簡體   English   中英

Django Haystack精確過濾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM