自动完成目前正在运行的Haysticm和Haysticm的城市名称搜索。问题是SearchQuerySet给我的结果与在elasticsearch中直接执行的相同查询不同,从我的角度来看,这是错误的,而对于我来说,这是预期的结果。在
我使用的是:Django 1.5.4, django haystack 2.1.0版, pyelasticsearch 0.6.1版, 弹性搜索0.90.3
使用以下示例数据:
使用
SearchQuerySet().models(Geoname).filter(name_auto='mid')
or
SearchQuerySet().models(Geoname).autocomplete(name_auto='mid')
结果始终返回所有6个名称,包括Min*和Mia*。但是,查询elasticsearch会直接返回正确的数据:
^{pr2}$不同例子的行为是一样的。我的猜测是,在干草堆中,字符串被所有可能的“最小值”字符组分割和分析,这就是它返回错误结果的原因。在
我不确定我是否在做或理解错误,如果这就是haystack的工作方式,但我需要haystack的结果与elasticsearch的结果相匹配。在
那么,我怎样才能解决这个问题呢?在
我总结的对象如下:
型号:
class Geoname(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=255)
索引:
class GeonameIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
name_auto = indexes.EdgeNgramField(model_attr='name')
def get_model(self):
return Geoname
映射:
modelresult: {
_boost: {
name: "boost",
null_value: 1
},
properties: {
django_ct: {
type: "string"
},
django_id: {
type: "string"
},
name_auto: {
type: "string",
store: true,
term_vector: "with_positions_offsets",
analyzer: "edgengram_analyzer"
}
}
}
谢谢。在
嗯,我也遇到了类似的问题,我的策略是定制后端。在
完整说明可在以下网址找到:
http://www.wellfireinteractive.com/blog/custom-haystack-elasticsearch-backend/
对我有用!在
希望这有帮助。在
深入查看代码后,我发现haystack生成的搜索结果是:
在elasticsearch中运行这个查询得到的结果是haystack显示的6个对象…但是如果我添加到“query”字符串中
^{pr2}$一切如愿以偿。所以我们的想法是能够为这个领域设置一个不同的搜索分析器。在
根据@user954994答案的链接和对this post的解释,我最终做的是:
所以,我的新设置是:
我的新的自定义构建架构方法如下所示:
重建索引后,我的映射如下所示:
现在一切如期进行!在
更新:
下面您可以找到代码来澄清这一部分:
进入我的应用程序搜索_后端.py公司名称:
我的索引定义如下:
最后,settings当然使用了haystack连接定义的自定义后端:
相关问题 更多 >
编程相关推荐