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
бы быть правдой ...