我有一个干草堆搜索,其中包含以下SearchIndex:

类GrantIndex(indexes.SearchIndex):
“”
这为Grant应用程序提供了搜索索引。
“”
文字= indexs.CharField(document = True,use_template = True)
年= indexs.IntegerField(model_attr ='year__year')
日期= indexs.DateField(model_attr ='date')
程序= indexs.CharField(model_attr ='program__area')
被授予者= index.CharField(model_attr ='grantee')
数量= indexs.IntegerField(model_attr ='amount')
site.register(Grant,GrantIndex)

如果我想搜索过滤掉所有不是“健康”程序,请运行以下查询:

从haystack.query导入SearchQuerySet

sqs = SearchQuerySet()
sqs = sqs.filter(program ='Health')

不幸的是,这还会从程序“健康\其他”和“健康\心血管”中产生对象。如何阻止搜索允许其他程序进入?

我使用Xapian作为搜索后端运行Ubuntu 9.10。

最佳答案

您可能已经解决了该问题,但是我偶然发现了与Whoosh后端相同的问题。 Xapian和Whoosh后端的行为可能相同吗?似乎Whoosh默认情况下会阻止所有CharField,并使用某种contains-query在其中进行搜索。切换到自定义后端,而不在CharFields上启用阻止功能,为我解决了此问题。

希望这将把其他人推向正确的方向。

关于python - Django Haystack精确过滤,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2156559/

10-12 17:19