查询字符串中的模糊匹配(Elasticsearch fuzziness)

9
我在查询字符串中指定了一个模糊前缀长度,但是搜索"tes"并没有显示标题为"test"的帖子...你有什么想法我做错了什么吗?
这是我的查询字符串设置。
"query" : {
  "query_string" : {
    "query" : the-query-string-goes-here,
    "default_operator" : "AND",
    "fuzzy_prefix_length" : 3,
  }
}
1个回答

13

你可能忘了在查询末尾添加 "fuzzy" 运算符。试试这个:

"query" : {
  "query_string" : {
    "query" : "tes~",
    "default_operator" : "AND",
    "fuzzy_prefix_length" : 3,
  }
}

啊,我明白了...如果您不介意的话,我有几个问题...我听说通配符查询比平均查询慢,并且不可扩展。这个运算符是否存在类似的问题?此外,现在搜索“tes”将显示标题为“test”的帖子,但搜索“est”则不会...有没有办法让它这样做...或者我是过度期望了? - concept47
1
由于您指定了非零的fuzzy_prefix_length,因此"est"没有返回任何结果。fuzzy_prefix_length设置了匹配开头字符的数量。如果fuzzy_prefix_length为零,则elasticsearch需要将字典中的所有术语与您查询中的术语进行模糊匹配。通过指定非零的fuzzy_prefix_length,您可以大大限制要检查的术语数量并提高性能。正如您所提到的,这与通配符查询有些相似,但是在模糊运算符的情况下,术语匹配算法更加复杂。 - imotov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接