Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用haystack/elasticsearch进行部分单词搜索_Python_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Django Haystack - Fatal编程技术网 elasticsearch,django-haystack,Python,elasticsearch,Django Haystack" /> elasticsearch,django-haystack,Python,elasticsearch,Django Haystack" />

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

Python 使用haystack/elasticsearch进行部分单词搜索,python,elasticsearch,django-haystack,Python,elasticsearch,Django Haystack,我们目前正在使用elasticsearch后端运行haystack。我们无法正确运行部分单词搜索 我们目前有一个索引,它有一个EdgeNgramField。我尝试过在这个领域做搜索,但我没有找到任何结果,除非它是一个确切的匹配。我试图用它来寻找产品,例如:我输入“sun”,我不会得到“sunglases”的结果 我开始直接在elasticsearch上使用curl命令,看看是否能找出发生了什么。我甚至直接用curl和一个ngram分析器创建了自己的索引,并通过部分单词搜索得到了正确的结果 另一件

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

我们目前有一个索引,它有一个EdgeNgramField。我尝试过在这个领域做搜索,但我没有找到任何结果,除非它是一个确切的匹配。我试图用它来寻找产品,例如:我输入“sun”,我不会得到“sunglases”的结果

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

另一件有趣的事情是:如果我在我用curl直接创建的elasticsearch上直接使用curl在我的测试索引上运行"映射命令",我会得到以下结果:“testfield”:{“type”:“string”,“analyzer”:“test_analyzer”},但是,如果我在haystack创建的索引上运行映射命令,它只有“type”:“string”。它没有提到它应该使用的edgengram_分析仪


有什么想法吗?

我认为elasticsearch\u backend.py中的haystack中有一个错误,它没有正确使用PylasticSearch。第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所期望的,然后您将看到EdgeGram_分析器被添加到您的EdgeGramfield字段中。至少它对我有用。

照@racedo提到的做。别忘了更新你的索引,它会起作用的。我目前面临的问题是,只有当单词与产品开头匹配时,autocomplete才会返回结果。但要不然就不行了。因此,如果我搜索“太阳”,它将返回“太阳镜”。但是,如果我搜索“玻璃”,我不会得到任何结果。虽然它也应该归还“太阳镜”??!拉西多,这部分解决了问题。谢谢但我现在面对的是萨尔玛提到的,它只在单词的开头做了部分匹配。没问题。你想要的是ngram而不是edge ngram。边缘NGram是指在一个单词的开头或结尾匹配,NGram是指一个单词内的一组连续字母(至少在信息提取术语中)。顺便说一句,如果这不是你的第二个问题,请创建一个新的问题,以便我们可以讨论它的答案。这是固定在规范的elasticsearch后端?还是我还要做这个改变?