Django-haystack возвращает результаты с «простым» бэкэндом, но не с «свистом» - PullRequest
4 голосов
/ 25 января 2012

Я пытаюсь интегрировать поиск с django-haystack,
Хотя он хорошо работает с бэкэндом «sample», при замене бэкенда на whoosh он всегда возвращает 0 результатов.

settings.py:

HAYSTACK_DEFAULT_OPERATOR = 'AND'
HAYSTACK_SITECONF = 'search_sites'
HAYSTACK_SEARCH_ENGINE = 'whoosh'
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 20
HAYSTACK_WHOOSH_PATH = os.path.join(PROJECT_ROOT, 'search_index')

search_sites.py

import haystack
haystack.autodiscover()

profile / search_indexes.py:

from haystack import indexes
from haystack import site

from profiles.models import Profile


class ProfileIndex(indexes.SearchIndex):
    text = indexes.CharField(document=True, use_template=True)

    def index_queryset(self):
        """Used when the entire index for model is updated."""
        return Profile.objects.all()

site.register(Profile, ProfileIndex)

шаблоны / поиск / индексы / анкеты / profile_text.txt:

{{ profile.name }}
{{ profile.description }}

Выполнение python manage.py rebuild_index возвращает:

All documents removed.
Indexing 60 profiles.

При запуске следующего в оболочке:

>>> from haystack.query import SearchQuerySet
>>> sqs = SearchQuerySet().all()
>>> sqs.count()
0

При переключении свиста с помощью «простого» бэкэндавсе работает нормально и возвращается 60 результатов.

Кажется, все настроено правильно, согласно Getting Started with Haystack и Debugging Haystack .
Я попытался установить предыдущую версию Whoosh, но безуспешно.

Чувствуя себя очень глупо на этом этапе, любая помощь будет очень признательна.

Версии пакета:

python==2.7  
Django==1.3.1  
Whoosh==2.3.2  
django-haystack==1.2.6  

Обновления:

  • Понижение рейтинга Whooshдо 1.8.4 не помогло.
  • При использовании базового шаблона поиска, как описано в Haystack Tutorial , все результаты возвращаются для однобуквенных запросов, а 0 - для других поисков.

1 Ответ

7 голосов
/ 28 января 2012

Хорошо, нашел его, и это было еще глупее, чем я, хотя ...

templates/search/indexes/profiles/profile_text.txt должно быть:

{{ object.name }}
{{ object.description }}

А не:

{{ profile.name }}
{{ profile.description }}

Что меня смутило, так это то, что «простой» бэкэнд сопоставляется с базой данных и, очевидно, игнорирует шаблон данных.

...