3

入力された単語を含む結果を返す必要があるオートコンプリートボックスがあります。ただし、入力単語は部分的で、異なる順序または場所に配置される場合があります。

例:

データベース列の値(MySQL)-

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

ここで、ユーザーが入力するquarter salesと、最初の2つの結果の両方が返されるはずです。

私は試した:

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に組み込まれていないものである可能性がありますか?

4

1 に答える 1

9

このタスクには検索エンジンの方が適していますが、基本的なコードでも実行できます。「A」と「B」を含む文字列を探している場合は、

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

また

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

しかし実際には、Haystack/Whoosh のような、構成がほとんどない単純な全文検索エンジンを使用する方がよいでしょう。

于 2012-05-13T11:04:59.613 に答える