2013-07-28 44 views
0

可以說,我在搜索索引中使用了這個字符串'hairdresser doing great job'的記錄。Django Haystack飛快移動Tokenized搜索

如何使搜索查詢「奧克蘭理髮師」仍然返回搜索結果中的上述記錄?

我試過,但我覺得這是不這樣做的正確方法:

for word in query.split(' '): 
    result = SearchQuerySet().filter_or(content=word) 

而且我不希望使用SOLR我覺得這是矯枉過正安裝SOLR正好解決了這種搜索是不會一直髮生。

+0

你使用的乾草堆版本是什麼? – twil

+0

@twil django-haystack == 1.2.7 –

回答

0

另一種方法,更乾的方法是指定您自己的input type,它處理將字符串轉換爲一系列或過濾器。您還可以使用Raw輸入類型傳遞特定於Whoosh的查詢。

如果你只需要在幾個地方使用它,我會堅持你現在做的方式。否則,我會爲它指定一個輸入類型。

編輯:飛快的默認分析器使用簡單的boolean operators。正如你在文檔中看到的,默認的操作符是AND。要獲得嗖正確的查詢,只要做到以下幾點:

query = ' OR '.join(query.split(' ')) 
result = SearchQuerySet().filter(content=Raw(Clean(query))) 

Clean自動脫輸入,以防止惡意代碼注入。

+0

你知不知道你的腦海裏有什麼語法? –

+0

@JamesLin我用'Raw'輸入類型的正確代碼更新了我的答案。 – knbk

+0

我已經恢復使用1.2.7,因爲whoosh不會縮小模型,xapian不能很好地支持。現在我只能使用raw_search(),但是當我使用它時,我得到'未綁定的方法Query_empty()必須以Query實例作爲第一個參數調用(取而代之的是str實例)' –

0

我成功地實現(在某種程度上)這種用auto_query()

無論嗖或Xapian的是能夠搜索的查詢詞順序丟棄的,但如果搜索查詢有話不會匹配任何不存在於索引中。