簡體   English   中英

如何在IntegerField上過濾Haystack SearchQuerySet for None

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

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