gpt4 book ai didi

python - 使用 Elasticsearch 后端使 “more like this”无法在Haystack中返回任何结果

转载 作者:行者123 更新时间:2023-12-02 22:41:55 25 4
gpt4 key购买 nike

我似乎无法在Haystack中获取more_like_this标记以返回任何结果。不知道它是否取决于我输入的数据,但是我已经尝试了一些应该非常相似的文档。

我已经证实即使使用这样的简单索引也无法正常工作:

class PaperIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)

def get_model(self):
return Paper

同样,简化的模型如下所示:
class Paper(Publishable):
title = models.CharField(max_length=255)
abstract = models.TextField()

def __unicode__(self):
return self.title

搜索模板如下所示:
{% autoescape off %}
{{ object.title }}
{{ object.abstract|striptags }}
{% endautoescape %}

目前,我只是想看看这是从标记返回的结果中,如下所示:
{% more_like_this paper as related_papers limit 1 %}
{{ related_papers }}

不知道我还有什么需要做的。 elastic search docs提到“为了使用mlt功能,必须存储mlt_field,需要启用存储term_vector或源。”但是我不确定这在Haystack术语中意味着什么。

我应该注意,我没有看到任何错误-只是我从 more_like_this取回了一个空列表/结果集。

哦,Elastic Search是1.1.1版。

最佳答案

旧问题,但仍然是反复出现的问题。

解决方案很简单:在搜索模板中提供足够的信息以供Elastic Search计算相似度。

如果您有标签,完整说明,流派,语言或其他可用于查找匹配项的内容,请将其添加到搜索模板中。

要添加(例如,标签的)列表,您可以在搜索模板中执行以下操作:

{% load search_tags %}
{% render_tags object %}

然后在 search_tags中添加一个名为 render_tags的模板标签:
from django.template import Library
from django.utils.safestring import mark_safe

register = Library()


@register.simple_tag
def render_tags(obj):
return mark_safe(' '.join([t.tag for t in obj.tags.all()]))

假设您与模型中的标签具有ManyToMany关系。

关于python - 使用 Elasticsearch 后端使 “more like this”无法在Haystack中返回任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23634065/

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