abi*_*son 0 django django-haystack elasticsearch
我有以下型号:
class ProductIndex(CelerySearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
number = indexes.CharField()
description = indexes.CharField(model_attr='description')
Run Code Online (Sandbox Code Playgroud)
在我的网页中,我对一个函数执行一个AJAX调用,该函数应该返回给我的产品,这些产品的描述包含一些使用过的类型的单词.例如,如果我的产品的描述为"Apple Macbook Pro",并且用户输入"book",我想返回该结果.
我执行以下操作:
q = request.GET['q']
results = SearchQuerySet().models(Product).filter(description__contains=q)
Run Code Online (Sandbox Code Playgroud)
但是,就像我说的那样,我确实有一个产品描述:
Macbook和用户类型book,它将无法正常工作.但是,Macbook会奏效.
最后,如果我打印q,它会返回u'book'.
你可以用indexes.EdgeNgramField而不是indexes.CharField.自动完成文档(http://django-haystack.readthedocs.org/en/v2.0.0/autocomplete.html)中建议这样做.
您不需要更改查询代码.
编辑:
为了使它不区分大小写,你可以做这样的事情
class ProductIndex(CelerySearchIndex, indexes.Indexable):
... fields here ...
def prepare_description(self, object):
return object.description.lower()
Run Code Online (Sandbox Code Playgroud)
当查询使用lower()时q
| 归档时间: |
|
| 查看次数: |
616 次 |
| 最近记录: |