2012-05-13 2 views
0

У меня есть поле автозаполнения, которое должно возвращать результаты с входными словами. Однако входные слова могут быть частичными и расположены в другом порядке или местах.Поиск столбца для нескольких слов с использованием Django queryset

Пример:

Значения в столбце базы данных (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/Whoosh

Смежные вопросы