Edit: Plus d'infos sur fond de poste ...Django Haystack et Whoosh Recherche de travail, mais SearchQuerySet Retour 0 Résultats
Original Question:
Je semblent avoir le même problème que dans ce (sans solution) question: django-haystack + Whoosh SearchQuerySet().all() always None
J'ai mis en place Haystack avec Whoosh sur mon projet Django et tout fonctionnait bien au début (SearchQuerySet utilisé pour retourner des résultats), mais après une tentative avortée de créer une nouvelle forme de recherche personnalisée (reculé de git) il apparaît cette indexation et la page de recherche d'origine fonctionnent tout de même bien, mais maintenant SearchQuerySet() renvoie toujours 0 résultats!
Course à pied:
manage.py rebuild_index --verbosity=2
montre correctement:
Indexing 14 assets
indexed 1 - 14 of 14 (worker PID: 1234).
Ces actifs indexés peuvent alors tous être correctement recherché sur le moteur de recherche d'origine.
Cependant, l'ouverture d'un shell Django et le fonctionnement:
from haystack.query import SearchQuerySet
SearchQuerySet().all().count()
retourne toujours 0
!
pip freeze
significatives:
- python 3.5.2
- Django 1.9.3
- django-meule de foin 2.5.0
- Whoosh 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:
creuser Ainsi, dans le code source de Haystack, j'ai découvert d'où vient le 0, mais pas pourquoi!
/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
....
Modification du 0
à tout entier rend SearchQuerySet retourne toujours int, mais je ne sais toujours pas pourquoi if not self._result_count
serait vrai ...