【发布时间】:2018-11-01 19:58:45
【问题描述】:
我正在尝试在 ElasticSearch 中编写一个匹配单词中连续字符的查询。所以,如果我的索引有“John Doe”,我应该仍然会看到 Elasticsearch 返回的“John Doe”,用于以下搜索。
- 约翰·多伊
- 约翰做
- 哦,做
- 约翰
- 确实
到目前为止,我已经尝试过以下查询。
{
"query": {
"multi_match": {
"query": "term",
"operator": "OR",
"type": "phrase_prefix",
"max_expansions": 50,
"fields": [
"Field1",
"Field2"
]
}
}
}
但这也会返回不必要的匹配,例如当我输入 john x 时我仍然会得到“John Doe”。
【问题讨论】:
-
这个答案正好满足你的需要:stackoverflow.com/a/41094878/4604579
-
我希望部分单词匹配是连续的。因此,搜索“John Do”应该只导致 John Doe,而不是 ngram 分析器正在执行的 John X Do。
-
不,因为该解决方案使用 ngram 标记器,它标记整个输入而不是单独的术语,就像 ngram 标记过滤器那样
-
除了 ngram 之外,我还有什么可以用来匹配我的部分连续单词匹配用例的吗?
-
我链接到的示例完全支持您的用例。 Ngram 标记器将索引连续的单词
标签: elasticsearch