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:

Python 3.5.2Django 1.9.3 django-haystack 2.5.0Whoosh 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')),
    ....
]

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 ...

Antworten auf die Frage(2)

Ihre Antwort auf die Frage