Term-level queries.Fuzzy query

81 阅读1分钟

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将不会执行。