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

时间:2012-11-27 21:34:56

标签: python elasticsearch django-haystack

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

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

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

我认为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字段中。至少它对我有用。