0

我有以下模型:

class ProductIndex(CelerySearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    number = indexes.CharField()
    description = indexes.CharField(model_attr='description')

在我的网页中,我对一个函数执行 AJAX 调用,该函数应该返回给我的产品,其描述包含一些使用的类型的单词。例如,如果我有一个描述为“Apple Macbook Pro”的产品,并且用户键入“book”,我想返回该结果。

我执行以下操作:

q = request.GET['q']
results = SearchQuerySet().models(Product).filter(description__contains=q)

但是,就像我说的那样,我确实有一个带有描述的产品:

Macbook和用户类型book,它将不起作用。但是,Macbook会工作。

最后,如果我 print q,它会返回u'book'

4

1 回答 1

5

您可以使用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()

并且在查询使用lower()q

于 2013-06-11T06:10:08.587 回答