2013-07-28 6 views
0

Допустим, у меня есть запись с этой парикмахерской, которая отлично справляется с работой в строке поиска.Django Haystack Whoosh Tokenized Search

Как сделать поисковый запрос 'парикмахер в Окленде' по-прежнему возвращать запись выше в результатах поиска?

Я попробовал это, но я чувствую, что это не правильный способ сделать это:

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

И я не хочу использовать Solr Я чувствую, что это излишество установить Solr просто решить этот вид поиска, не происходит все время.

+0

Какую версию стога сена вы используете? – twil

+0

@twil django-haystack == 1.2.7 –

ответ

0

Альтернативный, более DRY подход - указать свой собственный input type, который обрабатывает преобразование строки в ряд или фильтры. Вы также можете передать конкретный запрос Whoosh, используя тип ввода Raw.

Если вам нужно использовать это только в нескольких местах, я бы придерживался того, как вы это делаете сейчас. В противном случае я бы указал для него тип ввода.

EDIT: анализатор Whoosh по умолчанию использует простой boolean operators. Как вы можете видеть в документации, оператор по умолчанию: AND. Чтобы получить правильный запрос для Свиста, просто сделайте следующее:

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

Clean автоматически экранирует вход для предотвращения вредоносных кода инъекций.

+0

Вы знакомы с синтаксисом whoose с головы? –

+0

@JamesLin Я обновил свой ответ с помощью правильного кода для типа ввода «Raw». – knbk

+0

Я вернул обратно к использованию 1.2.7, поскольку whoosh не будет сузить модели, а xapian не поддерживается. Теперь я могу использовать raw_search(), но когда я его использую, я получаю 'unbound метод Query_empty(), который должен быть вызван с экземпляром Query в качестве первого аргумента (вместо этого был получен экземпляр str). –

0

мне удалось добиться (вроде) это с помощью auto_query()

Либо Свист или Xapian может искать выбрасываемые порядка слов в запросе, но ничего не будет соответствовать, если поисковый запрос имеет слова, не существует в индексе.

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