Ich habe das Beispiel Getting Starting - Django Haystack gefolgt, ihr Modell für meins auszuwechseln. In search_indexes.py hat die Methode index_queryset den Kommentar "Wird verwendet, wenn der gesamte Index für das Modell aktualisiert wurde". es wird jedoch jedes Mal aufgerufen, wenn ich eine Suche aus der Sicht search/search.htmlWarum wird index_queryset jedes Mal aus der Suchansicht in django-Haystack aufgerufen?
Die Methode selbst ruft alle Objekte aus der Datenbank und ist sehr langsam, also nehme ich an, dies ist nicht das beabsichtigte Verhalten.
search_indexes.py
import datetime
from haystack import indexes
from article.models import Article
class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
article_id = indexes.IntegerField(model_attr='id')
title = indexes.CharField(model_attr='title')
summary = indexes.CharField(model_attr='summary')
content = indexes.CharField(model_attr='content')
published_at = indexes.DateTimeField(model_attr='published_at')
def get_model(self):
return Article
def index_queryset(self, using=None):
return self.get_model().objects.filter(
published_at__lte=datetime.datetime.now())
ich den Stack-Trace eingefangen, wo man es aus aufgerufen wurde:
python2.7/site-packages/haystack/views.py(53)__call__()
-> return self.create_response()
python2.7/site-packages/haystack/views.py(133)create_response()
-> (paginator, page) = self.build_page()
python2.7/site-packages/haystack/views.py(110)build_page()
-> self.results[start_offset:start_offset + self.results_per_page]
python2.7/site-packages/haystack/query.py(272)__getitem__()
-> self._fill_cache(start, bound)
python2.7/site-packages/haystack/query.py(191)_fill_cache()
-> to_cache = self.post_process_results(results)
python2.7/site-packages/haystack/query.py(214)post_process_results()
-> objects = index.read_queryset(using=self.query._using)
python2.7/site-packages/haystack/indexes.py(144)read_queryset()
-> return self.index_queryset(using=using)
myApplication/article/search_indexes.py(20)index_queryset()
-> return self.get_model().objects.filter(
Anmerkung: Ich django Version 1.7.10 bin mit und django-Heuhaufen-Version 2.4.1