Подтвердить что ты не робот

Я не понимаю результатов, которые возвращаются из elasticsearch/haystack

Результаты, возвращаемые из стога сена, используя бэкенд elasticsearch, кажутся мне ошибочными. Мой индекс поиска выглядит следующим образом:

from haystack import indexes
from .models import IosVideo

class VideoIndex(indexes.SearchIndex, indexes.Indexable):                   
    text = indexes.CharField(document=True, use_template=True)              
    title = indexes.CharField(model_attr='title')                           
    absolute_url = indexes.CharField(model_attr='get_absolute_url')         
#    content_auto = indexes.EdgeNgramField(model_attr='title')              
    description = indexes.CharField(model_attr='description')               
#    thumbnail = indexes.CharField(model_attr='thumbnail_url', null=True)   

    def get_model(self):                                                    
        return IosVideo                                                     

    def index_queryset(self, using=None):                                   
        return self.get_model().objects.filter(private=False)  

Мой текстовый документ выглядит следующим образом:

{{ object.title }}
{{ object.text }}
{{ object.description }}

Мой запрос

SearchQuerySet().models(IosVideo).filter(content="darby")[0]

Результат, который возвращает мне, что это не работает, - это видео объект со следующими характеристиками

title: u'Cindy Daniels'
description: u'',
text: u'Cindy Daniels\n\n\n',
absolute_url: u'/videos/testimonial/cindy-daniels/'

Почему в мире запрос будет возвращать такой результат? Я очень смущен.

Моя нынешняя теория заключается в том, что она подделывает каждое подмножество char в запросе и использует это как частичное совпадение. Есть ли способ уменьшить этот толерант ближе к соответствию.

Моя информация о пипе   elasticsearch == 1.2.0   Джанго-стог == 2.3.1

И номер версии elasticsearch равен 1.3.1

Кроме того, когда я нахожу локальный сервер с   http://localhost:9200/haystack/_search/?q=darby&pretty

Он возвращает 10 результатов.

SearchQuerySet().filter(content="darby")  

Возвращает результаты 4k.

Кто-нибудь знает, что может вызвать такой тип поведения?

4b9b3361

Ответ 1

Существует проблема с методом filter() для индексов Charfield для django-haystack 2.1.0. Вместо этого вы можете изменить их на NgramField, например text = indexes.NgramField(document=True, template_name=True).

Проблема заключается в том, что при использовании этой комбинации вы получаете только первый символ. Таким образом, он возвращает вам все совпадения с "d" в поле их текстового индекса.