a dotaz si vzdy sestavujeme sami, myslim ze kdyz uz clovek voli mocny ES backend, tak by se nemel nechat limitovat timto zakladnim vyhledavanim (ktere nebere ohledy na boost u sloupcu, trochu mi vadi re pri indexaci renderuje sablonu a vse nacpe do jednoho...). Doporucuju vic pythonic, tj. vyuzit prepare_FIELD() a konstruovat si vlastni dotaz.
U nas to vypada treba tak:
class PublishableIndex(indexes.SearchIndex):
# ne ze by toto bylo hezke, jde o to abychom nemuseli mit jeden field text s document=True...
def __init__(self):
self.prepared_data = None
title = indexes.CharField(model_attr='title', boost=5)
description = indexes.CharField(model_attr='description', boost=3)
category = indexes.CharField(model_attr='category', boost=2)
authors = indexes.MultiValueField(faceted=True)
publish_from = indexes.DateTimeField(model_attr='publish_from')
# we need filtering by site
site_id = indexes.IntegerField(model_attr="category__site__id")
def prepare_authors(self, obj):
return [
a.name for a in obj.authors.all()]
def prepare_description(self, obj):
return strip_tags(obj.description)
def prepare_category(self, obj):
return obj.category.title
def index_queryset(self, using=None):
return self.get_model().objects.filter(publish_from__lte=datetime.now(), published=True)
def get_model(self):
raise NotImplementedError('This method must be overriden')
def get_updated_field(self):
return 'last_updated'
class ArticleIndex(PublishableIndex, indexes.Indexable):
content = indexes.CharField(model_attr='content')
def get_model(self):
return Article