我不明白 elasticsearch/haystack 返回的结果
I don't understand the results that's returning from elasticsearch/haystack
使用 elasticsearch 后端从 haystack 中 return 编辑的结果对我来说似乎是错误的。我的搜索索引如下:
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]
return让我觉得这不起作用的结果是具有以下特征的视频对象
title: u'Cindy Daniels'
description: u'',
text: u'Cindy Daniels\n\n\n',
absolute_url: u'/videos/testimonial/cindy-daniels/'
为什么世界上会查询return这样的结果?我很困惑。
我目前的理论是,它将查询中字符的每个子集标记化,并将其用作部分匹配。有没有办法降低这种容忍度以使其更接近。
我的 pip 信息是
elasticsearch==1.2.0
django-haystack==2.3.1
并且elasticsearch版本号是1.3.1
此外,当我访问本地服务器时
http://localhost:9200/haystack/_search/?q=darby&pretty
它 return 有 10 个结果。
SearchQuerySet().filter(content="darby")
Returns 4k 个结果。
有谁知道会导致这种行为的原因是什么?
django-haystack 2.1.0 的 Charfield 索引的 filter() 方法存在问题。您可以将它们更改为 NgramField,例如 text = indexes.NgramField(document=True, template_name=True)
.
问题是,当您使用此组合时,您只会得到第一个字符。所以它 returns 你所有在文本索引字段中有 'd' 的匹配项。
使用 elasticsearch 后端从 haystack 中 return 编辑的结果对我来说似乎是错误的。我的搜索索引如下:
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]
return让我觉得这不起作用的结果是具有以下特征的视频对象
title: u'Cindy Daniels'
description: u'',
text: u'Cindy Daniels\n\n\n',
absolute_url: u'/videos/testimonial/cindy-daniels/'
为什么世界上会查询return这样的结果?我很困惑。
我目前的理论是,它将查询中字符的每个子集标记化,并将其用作部分匹配。有没有办法降低这种容忍度以使其更接近。
我的 pip 信息是 elasticsearch==1.2.0 django-haystack==2.3.1
并且elasticsearch版本号是1.3.1
此外,当我访问本地服务器时 http://localhost:9200/haystack/_search/?q=darby&pretty
它 return 有 10 个结果。
SearchQuerySet().filter(content="darby")
Returns 4k 个结果。
有谁知道会导致这种行为的原因是什么?
django-haystack 2.1.0 的 Charfield 索引的 filter() 方法存在问题。您可以将它们更改为 NgramField,例如 text = indexes.NgramField(document=True, template_name=True)
.
问题是,当您使用此组合时,您只会得到第一个字符。所以它 returns 你所有在文本索引字段中有 'd' 的匹配项。