【发布时间】:2022-01-28 16:51:51
【问题描述】:
在 Elasticsearch 中,我想在搜索“John Ox”时匹配记录“John Oxford”。我目前正在使用match_phrase_prefix:
{
"query": {
"match_phrase_prefix":{
"SearchName": {
"query": "John Ox"
}
}
}
}
我知道这不起作用,因为正如文档所述:
虽然设置简单,但使用 match_phrase_prefix 查询进行搜索自动完成有时会产生令人困惑的结果。
例如,考虑查询字符串 quick brown f。此查询通过创建一个由 quick 和 brown 组成的短语查询来工作(即,术语 quick 必须存在并且必须跟在术语 brown 之后)。然后它查看已排序的术语字典以查找以 f 开头的前 50 个术语,并将这些术语添加到短语查询中。
问题是前 50 个术语可能不包括术语 fox,因此不会找到短语 quick brown fox。这通常不是问题,因为用户会继续输入更多字母,直到出现他们要查找的单词。
有关按您输入搜索的更好解决方案,请参阅完成建议器和 search_as_you_type 字段类型。
那么,在不改变数据在 ES 中存储方式的情况下,是否有其他方法可以实现这一点?
【问题讨论】:
-
如果需要,您还可以increase
max_expansions超过默认值 50。
标签: elasticsearch