Fuzzy query
source:www.elastic.co/guide/en/el…
path:Elasticsearch - Query DSL - Term-level queries - Fuzzy
返回的document包含与搜索term相似的term,根据 Levenshtein edit distance确定的相似度。
edit distance就是要将一个term转为另一个所需要改变单个字符的次数。这些改变包含以下几种:
- 改变一个字符(box -> fox)
- 移除一个字符 (black -> lack)
- 插入一个字符 (sic -> sick)
- 调换两个挨着的字符 (act -> cat)
为了查找相似的term,fuzzy query会创建所有可能的变种,或在指定的edit distance中进行扩展,query会返回匹配其扩展的所有document
Example requests
Simple example
GET /_search
{
"query": {
"fuzzy": {
"user.id": {
"value": "ki"
}
}
}
}
Example using advanced parameters
GET /_search
{
"query": {
"fuzzy": {
"user.id": {
"value": "ki",
"fuzziness": "AUTO",
"max_expansions": 50,
"prefix_length": 0,
"transpositions": true,
"rewrite": "constant_score_blended"
}
}
}
}
Top-level parameters for fuzzy
field
(Required,object) 要搜索的field
Parameters for field
value
(Required,string)想要在field中搜索的term
fuzziness
(Optional,string) 进行匹配时,允许的最大edit distance。可选值和更多信息请查看Fuzziness
max_expansions
(Optional,integer)创建变种的最大数量,最大是50
Warning:应避免为max_expansions设置较大的值,特别是当prefix_length参数值为0时。较大的max_expansions会导致性能较差,由于要检查数量较多的变种term。
prefix_length
(Optional,integer)当创建扩展时,多少个开头的字符保持不变。默认为0
transpositions
(Optional,Boolean)是否包含两个相邻字符调换顺序的变种(ab -> ba)。默认为true
rewrite
(Optional,string)用于重写query的方法,可选值和更多信息,请查看rewrite parameter.
Note
如果search.allow_expensive_queries被设置为false,Fuzzy queries将不会执行。