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