我正在使用django-haystack來爲我的應用程序搜索,並且我有布爾型字段,我想過濾我的模型。但是,當我嘗試這樣做時,我的搜索查詢失敗。如何在django-haystack搜索查詢中使用布爾型字段
我使用的搜索後端是elasticsearch
我正在使用django-haystack來爲我的應用程序搜索,並且我有布爾型字段,我想過濾我的模型。但是,當我嘗試這樣做時,我的搜索查詢失敗。如何在django-haystack搜索查詢中使用布爾型字段
我使用的搜索後端是elasticsearch
發佈你的一些代碼在這裏的是搞清楚到底是怎麼回事錯了你,因爲這是很難用什麼來解決有幫助。
我是如何實現這一點(使用嗖而不是elasticsearch,但Django的代碼應該是一樣的/無論如何相似)就像這樣:
創建了自己的searchform類(如果你還沒有這樣做這一點,看看Haystack Docs - Creating your own form
from django import forms
from haystack.forms import SearchForm
class PaidPropertySearchForm(SearchForm):
q = forms.CharField(required=False, label=('Town Area'))
#othersearchtermshere
furnished = forms.BooleanField(required=False)
def search(self):
sqs = super(PaidPropertySearchForm, self).search()
#other search filtering here
if self.is_valid() and self.cleaned_data['furnished']:
sqs = sqs.filter(furnished__contains=self.cleaned_data['furnished'])
return sqs
相關模型場很簡單:
class Properties (models.Model):.
furnished = models.BooleanField()
和我searchindexes.py:
class PropertyIndex(indexes.SearchIndex, indexes.Indexable):
#other indexed terms
furnished = indexes.BooleanField(model_attr='furnished', default='false')
這是值得注意的,有乾草堆,並與布爾值嗖的一聲後端之間的一些問題,,需要我指定defult指標值作爲一個字符串「假」,而不是布爾值false。如果我沒有這樣做,或者沒有設置默認值,由於某些原因,所有的布爾值被索引爲True,而不管模型存儲了什麼。我不知道這個問題會影響elasticsearch,所以你可能不需要
default='false'
在搜索索引
希望這有助於讓你在正確的軌道上,如果你還沒有想通了。
sqs = sqs.filter(boolean_field=True)
沒有對我也(使用草堆2.1.0和1.2.1 Elasticsearch),但
sqs = sqs.filter(boolean_field=1)
沒有工作。
哇,謝謝你關於Whoosh的一點:我在本地使用它,因爲我很懶,我一直在這裏堅持一段時間(儘管我還沒有擺脫這種行爲,即使使用'default = 「false'')。 – Tom 2013-03-27 17:53:06
我與Elasticsearch有同樣的問題,併爲我修復了它。同樣重要的是要注意,你不能使用實際的布爾值進行過濾......這是一種愚蠢的行爲。你必須使用'true'或'false'。例如sqs = sqs.filter(mybool ='true')。使用True或False將表現得像'真',如果不是徹頭徹尾的錯誤,那真的感覺像是一個可怕的設計。 – Cerin 2013-05-23 03:33:47