Django Haystack 精确过滤
我有一个搜索功能,使用了以下的搜索索引:
class GrantIndex(indexes.SearchIndex): """ This provides the search index for the Grant application. """ text = indexes.CharField(document=True, use_template=True) year = indexes.IntegerField(model_attr='year__year') date = indexes.DateField(model_attr='date') program = indexes.CharField(model_attr='program__area') grantee = indexes.CharField(model_attr='grantee') amount = indexes.IntegerField(model_attr='amount') site.register(Grant, GrantIndex)
如果我想搜索并排除所有不是“健康”的程序,我会运行以下查询:
from haystack.query import SearchQuerySet sqs = SearchQuerySet() sqs = sqs.filter(program='Health')
可惜的是,这样做还是会得到来自“健康\其他”和“健康\心血管”的结果。我该怎么做才能不让这些其他程序出现在搜索结果中呢?
我在使用Ubuntu 9.10,并且用Xapian作为我的搜索后台。
5 个回答
0
使用“prepare_data”来处理程序字段,把健康和其他杂七杂八的东西去掉。
1
你可以使用字段查找,具体的说明可以在这里找到。
sqs = sqs.filter(program__exact='Health')
3
你可能已经解决了这个问题,但我刚好遇到了同样的问题,跟Whoosh这个后端有关。也许Xapian和Whoosh的表现是一样的?看起来Whoosh默认会对所有的CharFields(字符字段)进行词干提取,也就是把单词变成它的基本形式,然后用某种包含查询的方式在里面搜索。切换到一个自定义的后端,并且在CharFields上不启用词干提取,解决了我的这个问题。
希望这能给其他人指明正确的方向。