2012-05-13 54 views
0

我有一個自動完成框,它需要返回具有輸入單詞的結果。然而,輸入的單詞可以是不完整的,並且位於不同的順序或位置。使用Django查詢集搜索多個單詞列

實施例:

在數據庫列(MySQL的)的值 - 如果

Expected quarterly sales 
Sales preceding quarter 
Profit preceding quarter 
Sales 12 months 

現在用戶類型quarter sales那麼它應該返回所述第一兩個結果。

我嘗試:通過正則表達式

column__icontains = term #searches only '%quarter sales% and thus gives no results 
column__search = term #searches any of complete words and also returns last result 
**{'ratio_name__icontains':each_term for each_term in term.split()} #this searches only sales as it is the last keyword argument 

任何伎倆或可能是我丟失的東西內置在Django,因爲這是一個常見的模式?

+1

也許我錯了,但這看起來更像是一個全文搜索問題給我。你應該看看MySQL全文搜索,看看它是否符合你的需求。 –

+1

您是否嘗試過使用任何搜索引擎?查看haystack(http://haystacksearch.org/)。它支持在開始時很容易使用的whoosh,以及更多 – szaman

+0

嗨Manoj,我嘗試了全文搜索,但它返回的結果中有上述任何一個單詞。示例還會返回銷售12個月(不應該)。 – Pratyush

回答

4

搜索引擎對此任務更好,但您仍然可以使用基本代碼執行此操作。 如果你正在尋找含有「A」和「B」的字符串,就可以

Model.objects.filter(string__contains='A').filter(string__contains='B') 

Model.objects.filter(Q(string__contains='A') & Q(string__contains='B')) 

不過說真的,你最好用一個簡單的全文搜索引擎去像Haystack /飛快移動