记录ElasticSearch模糊查询

sourceBuilder.query(QueryBuilders.fuzzyQuery("name", "李").fuzziness(Fuzziness.ZERO));

版本:ElasticSearch7.8


fuzzyQuery 返回包含与搜索字词相似的字词文档:

为了找到相似的术语,fuzzy查询将在指定的编辑距离内创建一组搜索词的所有可能的变体或扩展,查询然后返回每个扩展的完全匹配。

如果search.allow_expensive_queries 设置为false,则不会执行模糊查询。

编辑距离,是将一个术语转换成另一个术语所需更改一个字符的次数(Levenshtein编辑距离衡量)。这些更改可以包括:
更改字符,box → fox
删除字符,black → lack
插入字符,sic → sick
转置两个字符,act → cat
为了查找相似的术语,模糊查询会创建一个集合用来列举所有可能的变体和扩展,染灰返回每个扩展的完全匹配。


Fuzziness
一些搜索和API支持的参数,允许进行不精确的模糊查询,参数为fuzziness

在查询text或是keyword时,fuzziness被解释为Levenshtein编辑距离(一个字符串要与另一个字符串相同必须更改的一个字符数),fuzziness可以为0,1,2(Levenshtein允许的最大编辑距离(或编辑次数));

AUTO:根据术语长度生成编辑距离。可以选择提过距离参数AUTO: [low], [high]。如果未指定则默认为AUTO: [3], [6];AUTO通常应该是fuzziness。

0-2 必须完全匹配
3-5 允许一次编辑
大于5 允许两次编辑

如上查询,结果是
{"name":"李元浩","sex":"小gay虎","tel":"2200"}

如果设为 Fuzziness.ONE :

sourceBuilder.query(QueryBuilders.fuzzyQuery("name", "李").fuzziness(Fuzziness.ONE));

结果:

{"name":"李元浩","sex":"小gay虎","tel":"2200"}
{"name":"一号","sex":"男","tel":"4396"}
{"name":"二号","sex":"男","tel":"2800"}
posted @ 2022-03-28 17:58  Leejk  阅读(960)  评论(0编辑  收藏  举报