gpt4 book ai didi

Django Haystack 和 Taggit

转载 作者:行者123 更新时间:2023-12-04 23:23:59 25 4
gpt4 key购买 nike

有没有人在 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.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

我正在使用自定义搜索查询集进行多语言搜索:
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)

最佳答案

为了让标签进入搜索索引,我们将它们添加到我们的内容模板文件中,例如

{{ 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()]

在任何一种情况下都没有成功尝试使 boost 工作,但搜索肯定会正确索引它们。

关于Django Haystack 和 Taggit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16613742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com