4

我们目前正在使用弹性搜索后端运行 haystack。我们无法正确运行部分单词搜索。

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

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

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

有任何想法吗?

4

1 回答 1

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

于 2012-11-28T01:59:18.123 回答