我似乎无法在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/

10-11 08:47