只使用Django Haystack在查询中匹配一些单词
我目前使用下面的django-haystack代码在我的网站上进行搜索:
def products_search_results(request):
q = request.GET['q']
from haystack.query import SearchQuerySet
products = SearchQuerySet().models(Product).filter(text=q)
这在搜索中使用q
作为查询参数。 这也是使用q
中的所有单词来匹配结果。 这可能是(?)预期的默认行为。 这是我所看到的。
我有一个Product
与“红色克尔维特”的称号。
当然,搜索词“红色”,“红色克尔维特”和“克尔维特”全部匹配,但术语“红色克尔维特敞篷车”或“红色克尔维特T顶部”将不匹配。 我真的很喜欢那些匹配查询,特别是如果没有多少结果的默认查询。
有没有事情可以用我的干草堆查询来获得这种行为?
例如在您的搜索索引文件中使用EdgeNgramField
:
class AppIndex(indexes.SearchIndex, indexes.Indexable):
ngram_text = indexes.EdgeNgramField()
def prepare(self, obj):
"""Add the content of text field from final prepared data into ngram_text field
"""
prepared_data = super(AppIndex, self).prepare(obj)
prepared_data['ngram_text'] = prepared_data['text']
return prepared_data
然后查询该字段(确保在进行上述更改后首先执行rebuild_index
和update_index
):
products = SearchQuerySet().models(Product).filter(ngram_text=q)
链接地址: http://www.djcxy.com/p/38693.html
上一篇: Matching only some words in query using Django Haystack