2012-05-13 20 views
0

私は入力単語を持つ結果を返す必要があるオートコンプリートボックスを持っています。しかし、入力語は部分的であり、異なる順序または場所に配置することができる。Djangoクエリーセットを使用して複数の単語の列を検索

例:

データベースカラム(MySQLの)の値 - ユーザタイプquarter sales場合

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

は今、それは最初の二つの結果の両方を返すべきです。

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 

どれトリック正規表現を介して、または、これは一般的なパターンであるので、私はジャンゴで作り付けの行方不明です何かをすることがあります。

は、私が試しましたか?

+1

おそらく私は間違っていますが、これは私にとってはフルテキスト検索の問題のように見えます。 MySQLフルテキスト検索を見て、それがあなたのニーズに合っているかどうかを調べるべきです。 –

+1

検索エンジンを使用しようとしましたか? haystack(http://haystacksearch.org/)をチェックしてください。 – szaman

+0

こんにちは、私は全文検索を試みましたが、それは上記の単語のいずれかを持つ結果を返します。また、Sales 12 monthsを返します(これは避けるべきです)。 – Pratyush

答えて

4

検索エンジンはこのタスクには適していますが、引き続き基本コードで実行できます。 あなたは

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

または

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

をすることができますが、本当に、あなたがより良いシンプルなフルテキスト検索エンジンと一緒に行くことだろう、「A」と「B」を含む文字列を探しているならHaystack/Whooshのような構成はほとんどありません

関連する問題