Django Haystack和Taggit [英] Django Haystack and Taggit

查看:213
本文介绍了Django Haystack和Taggit的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有人用haystack使用Django taggit?我们如何使haystack的标签字段可索引?



我尝试过:

  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 $ s

$ b def prepare_text_tr(self,obj):
返回'%s%s'%(obj.title_tr,obj.descr_tr)

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

def get_model(self):
return Event

我正在使用自定义的searchqueryset进行多语言搜索:

  class MlSearchQuerySet(SearchQuerySet):
def filter(self,** kwargs):
根据某些属性和默认运算符缩小搜索范围。
如果kwargs中的content:
kwd = kwargs.pop('content')
currentLngCode = str (get_language())
lngCode = settings.LANGUAGE_CODE
如果currentLngCode == lngCode:
kwdkey =text
kwargs [kwdkey] = kwd
else:
kwdkey =text_%s%currentLngCode
kwargs [kwdkey] = kwd


如果getattr(设置,'HAYSTACK_DEFAULT_OPERATOR',DEFAULT_OPERATOR)=='OR' :
return self.filter_or(** kwargs)
else:
return self.filter_and(** kwargs)


解决方案

要将标签添加到搜索索引中,我们将其添加到我们的内容模板文件中,例如

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

我们还将其作为MultiValueField

  tags = indexes.MultiValueField()

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

没有成功尝试在任何一种情况下提升工作,但搜索绝对是正确地索引。


Is there anybody using Django taggit with haystack? How can we make tags field indexable by haystack?

I have tried:

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

And i am using a custom searchqueryset for multilingual search :

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)

解决方案

To get the tags into the search index we added them to our content template file eg

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

We also include it as a MultiValueField

tags = indexes.MultiValueField()

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

Haven't had success trying to make boost work in either case, but the search definitely indexes them correctly.

这篇关于Django Haystack和Taggit的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆