我似乎无法在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,需要启用store term_vector或source。”但是我不确定在干草堆术语中它等同于什么。
我应该注意到我没有看到任何错误 - 只是我从more_like_this
返回一个空的列表/结果集。
哦,Elastic Search是版本1.1.1。
答案 0 :(得分:0)
老问题,但仍然是一个反复出现的问题。
解决方案很简单:在弹性搜索的搜索模板中提供足够的信息,以便能够计算相似度。
如果您有标签,完整说明,流派,语言或其他可用于查找匹配项的内容,请将其添加到搜索模板中。
要添加列表(例如标签),您可以在搜索模板中执行以下操作:
{% 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关系。