Возникли проблемы с получением большего количества подобных результатов для возврата любых результатов в Haystack с использованием бэкэнда Elastic Search.

Кажется, я не могу заставить тег more_like_this в Haystack вернуть какие-либо результаты. Не уверен, что это связано с данными, которые я ввел, но я пробовал это с некоторыми документами, которые должны быть очень похожими.

Я убедился, что он не работает даже с таким довольно простым индексом:

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 }}

Не уверен, есть ли что-то еще, что мне нужно сделать. В документах по эластичному поиску упоминается «Чтобы использовать функцию mlt, необходимо либо сохранить mlt_field, либо сохранить term_vector, либо включить источник». Однако я не уверен, что это означает в терминах Haystack.

Я должен отметить, что я не вижу никаких ошибок - просто я получаю пустой список/результирующий набор из more_like_this.

О, и Elastic Search версии 1.1.1.


person John Montgomery    schedule 13.05.2014    source источник
comment
Я могу ошибаться, но я считаю, что эта функция уже давно не работает. У меня никогда не получалось работать с помощью solr.   -  person Chris Hawkes    schedule 13.05.2014
comment
Да, это то, о чем я беспокоился. Я, вероятно, могу кодировать это сейчас, но это позор, поскольку это сделало бы эту функцию такой быстрой для добавления.   -  person John Montgomery    schedule 13.05.2014
comment
@JohnMontgomery Вы нашли решение?   -  person Murat Çorlu    schedule 27.05.2015
comment
К сожалению нет. В конце концов, я просто выполнил ручной поиск, где я запросил эластичный поиск, чтобы найти элементы, которые были помечены одной и той же темой (с полем subject = indexes.MultiValueField(faceted=True)).   -  person John Montgomery    schedule 27.05.2015


Ответы (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 к тегам в вашей модели.

person webtweakers    schedule 02.02.2018