2016-11-02 10 views
2

Edit: Больше информации на дне поста ...Джанго Haystack & Whoosh Поиск работы, но SearchQuerySet Возвращенные 0 Результаты

Оригинал Вопрос:

Я, кажется, та же проблема, что и в этом (неразрешенный) вопрос: django-haystack + Whoosh SearchQuerySet().all() always None

Я настроил Хейстек с свист на моем проекте Django, и все работает нормально в первый (SearchQuerySet используется для возврата результатов), но после неудачной попытки создать новую форму пользовательского поиска (откат от git) появляется что индексирование и исходная страница поиска все еще работают нормально, но теперь SearchQuerySet() всегда возвращает 0 результатов!

Продолжительность:

manage.py rebuild_index --verbosity=2 

Правильно показывает:

Indexing 14 assets 
    indexed 1 - 14 of 14 (worker PID: 1234). 

Эти индексируемые активы могут затем быть все правильно обыскали дальше от исходной формы поиска.

Однако, открытие Джанго оболочки и работает:

from haystack.query import SearchQuerySet 
SearchQuerySet().all().count() 

Всегда возвращает 0!

Соответствующие pip freeze:

  • Python 3.5.2
  • Django 1.9.3
  • Джанго стоге сена 2.5.0
  • Свист 2.7.4

/MYAPP/search_indexes .py:

from haystack import indexes 
from .models import Asset 

class AssetIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.NgramField(document=True, use_template=True) 
    asset_description = indexes.CharField(model_attr='asset_description') 
    manufacturer = indexes.CharField(model_attr='asset_manufacturer') 

    def get_model(self): 
     return Asset 

    def no_query_found(self): 
     return self.searchqueryset.exclude(content='foo') 

    def index_queryset(self, using=None): 
     return self.get_model().objects.all() 

/myapp/templates/search/indexes/myapp/asset_text.txt:

{{ object.asset_description }} 
{{ object.asset_details }} 
{{ object.asset_manufacturer }} 
{{ object.asset_model }} 
... etc. 

/myapp/urls.py:

urlpatterns = [ 
    .... 
    url(r'^search/', include('haystack.urls')), 
    .... 
] 

EDIT:

Так копать исходный код Haystack, который я узнал, откуда приходит 0, но не почему!

/myvenv/Lib/site-packages/hackstack/query.py

class SearchQuerySet(object): 
    ... 

    def __len__(self): 
     if self._result_count is None: 
      self._result_count = self.query.get_count() 

     # Some backends give weird, false-y values here. Convert to zero. 
     if not self._result_count: 
      self._result_count = 0 

    # This needs to return the actual number of hits, not what's in the cache. 
    return self._result_count - self._ignored_result_count 

    .... 

Изменение 0 к любому междунар делает SearchQuerySet всегда возвращает эту Int, но я до сих пор не знаю, почему if not self._result_count бы быть правдой ...

ответ

0

Похоже, это ошибка в стоге сена, что уже сообщалось, но еще предстоит решить:

https://github.com/django-haystack/django-haystack/issues/1021

К сожалению, если «текст» индекс поля Ngram или EdgeNgram SearchQuerySet().count() и SearchQuerySet().all().count() вернется 0, если вы не указали фильтр, например SearchQuerySet().all().exclude(content='thisshouldnotmatchanythingintheindex').count() возвращает общее количество проиндексированных объектов.

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