编程语言
首页 > 编程语言> > python – 使用haystack / elasticsearch进行部分单词搜索

python – 使用haystack / elasticsearch进行部分单词搜索

作者:互联网

我们目前正在运行带有弹性搜索后端的haystack.我们无法让部分单词搜索正确运行.

我们目前有一个具有EdgeNgramField的索引.我试过在这个领域进行搜索,但除非它完全匹配,否则我找不到任何结果.我正在尝试使用它来查找产品,例如:我输入“sun”,我不会得到“太阳镜”的结果.

我开始直接在elasticsearch上使用curl命令,看看我是否能弄清楚发生了什么.我甚至用curl直接创建了自己的索引,还有一个ngram分析器,我使用部分单词搜索得到了正确的结果.

另一个有趣的事情是:如果我直接在我使用curl直接创建的elasticsearch上使用curl运行_mapping命令,我得到以下内容:“testfield”:{“type”:“string”,“analyzer”: “test_analyzer”},但是,如果我在haystack创建的索引上运行映射命令,它只有“type”:“string”.它没有提到它应该使用的edgengram_analyzer.

有任何想法吗?

解决方法:

我认为elasticsearch_backend.py中的haystack中有一个错误,它没有正确使用pyelasticsearch第868行看起来像:

self.conn.put_mapping('modelresult', current_mapping, index=self.index_name)

如果您将其替换为:

self.conn.put_mapping(doc_type='modelresult', mapping=current_mapping, index=self.index_name)

这是pyelasticsearch期望的方式,然后你会看到edgengram_analyzer被添加到你的EdgeNgramField字段中.至少它对我有用.

标签:python,elasticsearch,django-haystack
来源: https://codeday.me/bug/20190620/1246696.html