记录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"}
你应当热爱自由!
作者:Leejk,转载请注明原文链接:https://www.cnblogs.com/leejk/p/16068345.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构