[英]Django Haystack exact filtering
我有一個haystack搜索,其中包含以下SearchIndex:
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')
不幸的是,這也產生了來自“健康\\其他”和“健康\\心血管”計划的對象。 如何阻止搜索允許其他程序進入?
我用Xapian作為我的搜索后端運行Ubuntu 9.10。
你已經可以解決這個問題,但我只是偶然發現了Whoosh后端的問題。 也許Xapian和Whoosh后端的行為相同? 似乎Whoosh默認阻止所有CharFields,並使用某種contains-query在其中搜索。 切換到自定義后端,但沒有在CharFields上啟用詞干,為我解決了這個問題。
希望這會推動其他人朝着正確的方向發展。
你可以使用這里描述的字段查找。
sqs = sqs.filter(program__exact='Health')
對於solr后端,我需要使用_exact
(只有一個下划線而不是兩個)。
免責聲明:我是Xapian-Haystack的維護者。
我相信這是因為Xapian-Haystack正在使用一個術語生成器來逃避像/
這樣的特殊字符。
因此,在您的情況下, "Health\\Other"
被編入索引為"health"
和"other"
。 這最近在Xapian-Haystack的主分支中修復,參見例如此處 。
對程序字段使用“prepare_data”並擺脫health \\ blabla事情
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.