2013-05-17 3 views
4

Есть ли кто-нибудь, использующий Django taggit с стоком сена? Как мы можем сделать поле тегов индексируемым сеном?Django Haystack and Taggit

Я попытался:

class EventIndex(indexes.SearchIndex, indexes.Indexable): 
     text = indexes.CharField(model_attr='descr_en', document=True, use_template=True) 
     text_tr = indexes.CharField(model_attr='descr_tr') 
     tags = indexes.MultiValueField() 

     def prepare_text(self, obj): 
      return '%s %s' % (obj.title_en, obj.descr_en) 

     def prepare_text_tr(self, obj): 
      return '%s %s' % (obj.title_tr, obj.descr_tr) 

     def prepare_tags(self, obj): 
      return [tag.name for tag in obj.tags.all()] 

     def get_model(self): 
      return Event 

И я использую пользовательский searchqueryset для многоязычного поиска:

class MlSearchQuerySet(SearchQuerySet): 
    def filter(self, **kwargs): 
     """Narrows the search based on certain attributes and the default operator.""" 
     if 'content' in kwargs: 
      kwd = kwargs.pop('content') 
      currentLngCode = str(get_language()) 
      lngCode = settings.LANGUAGE_CODE 
      if currentLngCode == lngCode: 
       kwdkey = "text" 
       kwargs[kwdkey] = kwd 
      else: 
       kwdkey = "text_%s" % currentLngCode 
       kwargs[kwdkey] = kwd 


     if getattr(settings, 'HAYSTACK_DEFAULT_OPERATOR', DEFAULT_OPERATOR) == 'OR': 
      return self.filter_or(**kwargs) 
     else: 
      return self.filter_and(**kwargs) 

ответ

7

Чтобы получить тег в индекс поиска, мы добавили их в наш файл шаблон содержимого, например

{{ object.title }} 
{{ object.body }} 
{% for tag in object.tags.all %} {{ tag.name }} {% endfor %} 
{{ object.user.get_full_name }} 

Мы также включаем его в качестве MultiValueField

tags = indexes.MultiValueField() 

def prepare_tags(self, obj): 
    return [tag.name for tag in obj.tags.all()] 

Не добился успеха, пытаясь повысить эффективность работы в любом случае, но поиск определенно правильно их индексирует.

+0

Я обновил свой вопрос, чтобы лучше представить свою реальную структуру кода. Потому что я не получаю никаких тегов, связанных с результатами поиска, с помощью способов, которые вы предлагаете ... – ratata

+0

можете ли вы включить свой текстовый шаблон? если ваши теги находятся там, они должны индексироваться, они будут обрабатываться так же, как и любое другое содержимое вашего шаблона. –

+0

in 'event_text.txt' У меня есть: {{object.title}} {{object.descr}} {% для тега в объекте.tags.all%} {{tag.name}} {% endfor%} – ratata