![](/img/trans.png)
[英]Filter blank CharField in Django Haystack's SearchQuerySet
[英]How can I filter a Haystack SearchQuerySet for None on an IntegerField
這讓我有點生氣,但看起來應該很簡單。
我正在使用Django和Haystack並且有一個包含允許null的IntegerField的搜索索引。 這是基於Django的相關模型,但我認為這不重要。 例如:
class ThingIndex(indexes.ModelSearchIndex, indexes.Indexable):
group = indexes.IntegerField(model_attr='group__id', null=True)
class Meta:
model = Thing
我有時希望我的Haystack查詢返回此字段的None / Null項,所以我在搜索表單的__init__中進行過濾,但我無法獲得查詢來執行此操作。 我嘗試過的最明顯的方法是:
self.searchqueryset.filter(group__isnull=True) # how to do it on a regular Django queryset
但這不會返回任何記錄。
現在我正在解決這個問題:
self.searchqueryset.exclude(group__in=range(1,100))
哪個有效,但顯然不是它應該做的方式:)
有人可以幫忙嗎?
謝謝!
如果您正在使用ElasticSearch,則只需使用本機ElasticSearch就可以在不進行修補的情況下完成解決方案:
from haystack.inputs import Raw
self.searchqueryset.exclude(group = Raw("[* TO *]"))
換句話說,過濾所有具有非emtpy組字段的文檔:
from haystack.inputs import Raw
self.searchqueryset.filter(group = Raw("[* TO *]"))
這也適用於SOLR以及其他Haystack后端應用相同的概念,但具有后端搜索語言的特定語法。
參考文獻:
我覺得這個問題沒有得到解答。 似乎op正在詢問如何使用帶有ElasticSearch后端的haystack.query.SearchQuerySet來過濾空條目。
在上面的示例中,替換
self.searchqueryset.filter(group__isnull=True)
同
self.searchqueryset.filter(_missing_='group')
不直觀,但它是我到目前為止工作的唯一方式。
如果您正在使用SOLR,您可能希望查看以下鏈接:
1) https://github.com/toastdriven/django-haystack/commit/9332a91a7f0e4b33d7e20aa892d156305c12dfe3
2) https://github.com/toastdriven/django-haystack/issues/163
有一個SOLR的補丁,允許這樣的查詢,但對於其他后端,可能沒有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.