Django Haystack & Whoosh Search funktioniert, aber SearchQuerySet gibt 0 Ergebnisse zurück
Bearbeiten: Mehr Infos am Ende des Beitrags ...
Ursprüngliche Frage:
Ich habe anscheinend das gleiche Problem wie in dieser (ungelösten) Frage: django-haystack + Whoosh SearchQuerySet (). all () immer None
Ich habe Haystack with Whoosh in meinem Django-Projekt eingerichtet und anfangs funktionierte alles einwandfrei (SearchQuerySet wurde verwendet, um Ergebnisse zurückzugeben), aber nach einem abgebrochenen Versuch, ein neues benutzerdefiniertes Suchformular zu erstellen (Rollback von Git), scheint diese Indizierung zu funktionieren und die ursprüngliche Suchseite funktionieren immer noch, aber jetzt gibt SearchQuerySet () immer 0 Ergebnisse zurück!
Laufen
manage.py rebuild_index --verbosity=2
Zeigt richtig:
Indexing 14 assets
indexed 1 - 14 of 14 (worker PID: 1234).
Diese indizierten Assets können dann alle über das ursprüngliche Suchformular korrekt durchsucht werden.
Öffnen einer Django-Shell und Ausführen von:
from haystack.query import SearchQuerySet
SearchQuerySet().all().count()
Gibt immer @ zurü0
!
Relevantpip freeze
:
/ 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')),
....
]
BEARBEITEN
So im Haystack-Quellcode graben Ich habe herausgefunden, wo die 0 herkommt, aber nicht warum!
/ 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
....
Wechseln0
zu jedem int bewirkt, dass SearchQuerySet immer diesen int zurückgibt, aber ich weiß immer noch nicht warumif not self._result_count
wäre wahr ...