elasticsearch中使用fuzzy查询

server/2024/12/29 3:12:09/

文章目录

      • 1. `fuzzy` 查询的基本用法
        • 示例文档:
      • 2. 基本的 `fuzzy` 查询
        • 解释:
        • 查询结果:
      • 3. `fuzziness` 的不同设置
        • **`fuzziness` 设置为数字(编辑距离)**
        • `fuzziness` 设置为 `0`
      • 4. 更多的 `fuzzy` 查询选项
        • 示例:
      • 5. 总结

Elasticsearch 中,fuzzy 查询用于执行模糊匹配,通常用于处理拼写错误、变体或者近似匹配的场景。它基于 Levenshtein 编辑距离算法(即编辑距离,也叫做编辑距离算法)来比较字符串之间的相似度。fuzzy 查询可以通过设置允许的最大编辑距离来控制匹配的宽松度。

1. fuzzy 查询的基本用法

假设我们有一个 articles 索引,包含 title 字段。我们想通过模糊查询来查找包含与 title 字段中某个单词拼写相似的词。

示例文档:
POST /articles/_bulk
{ "index": { "_id": 1 } }
{ "title": "Elasticsearch Basics" }
{ "index": { "_id": 2 } }
{ "title": "Learning Elasticsearch" }
{ "index": { "_id": 3 } }
{ "title": "Advanced Elasticsearch" }
{ "index": { "_id": 4 } }
{ "title": "Understanding Search Engines" }

2. 基本的 fuzzy 查询

假设我们要查找与 Elasticsearch 拼写相似的文章,我们可以使用 fuzzy 查询来实现。下面是一个基本的 fuzzy 查询,查找 title 字段中与 Elasticserch 类似的文档(注意拼写故意错误)。

POST /articles/_search
{"query": {"fuzzy": {"title": {"value": "Elasticserch",  // 错误拼写"fuzziness": "AUTO"      // 自动调整模糊匹配的容忍度}}}
}
解释:
  • value:指定你希望查找的模糊词。这里我们故意拼错了 ElasticsearchElasticserch

  • fuzziness

    :指定允许的模糊度。

    AUTO
    

    会自动计算适当的模糊程度。它根据字符串长度自动选择适合的

    fuzziness
    

    值:

    • 对于长度小于等于 3 的词,fuzziness 被设为 0(不允许编辑)。
    • 对于长度大于 3 的词,fuzziness 被设为 12,允许一定的编辑距离。
查询结果:
{"hits": {"total": { "value": 3, "relation": "eq" },"hits": [{"_id": "1","_source": {"title": "Elasticsearch Basics"}},{"_id": "2","_source": {"title": "Learning Elasticsearch"}},{"_id": "3","_source": {"title": "Advanced Elasticsearch"}}]}
}

在这个例子中,ElasticserchElasticsearch 的拼写差异是允许的,因此所有包含 Elasticsearch 的文档都返回了。

3. fuzziness 的不同设置

fuzziness 设置为数字(编辑距离)

除了 AUTO,你还可以手动指定一个数字,表示允许的最大编辑距离。编辑距离是指从一个字符串转换到另一个字符串所需的最小字符编辑次数(包括插入、删除或替换字符)。

例如,fuzziness 设置为 2 表示最多允许 2 次字符编辑:

POST /articles/_search
{"query": {"fuzzy": {"title": {"value": "Elasticserch","fuzziness": 2   // 允许最多 2 次编辑}}}
}
fuzziness 设置为 0

如果你将 fuzziness 设置为 0,那么 Elasticsearch 会要求字段完全匹配,不允许任何类型的字符修改:

POST /articles/_search
{"query": {"fuzzy": {"title": {"value": "Elasticserch","fuzziness": 0  // 不允许任何编辑}}}
}

4. 更多的 fuzzy 查询选项

你还可以在 fuzzy 查询中使用更多选项来定制查询:

  • prefix_length:指定匹配的前缀长度。此参数可以提高查询性能。如果一个词的前缀部分没有变化,那么 fuzzy 查询会只在剩下的部分进行匹配。
  • max_expansions:限制查询扩展的最大数量。用于控制在查询中允许的最大变体数量,从而提高查询效率。
示例:
POST /articles/_search
{"query": {"fuzzy": {"title": {"value": "Elasticserch","fuzziness": 2,"prefix_length": 3,    // 前 3 个字符必须完全匹配"max_expansions": 10    // 允许最多 10 次变体扩展}}}
}

5. 总结

  • fuzzy 查询:用于执行基于编辑距离的模糊匹配,适用于拼写错误、变体或近似匹配。
  • fuzziness
    • AUTO:自动设置编辑距离。
    • 数字(如 12):指定允许的最大编辑距离。
    • 0:要求完全匹配。
  • prefix_length:设置匹配的前缀长度。
  • max_expansions:控制查询扩展的最大变体数量。

http://www.ppmy.cn/server/154084.html

相关文章

LeetCode每日三题(一)哈希

一、两数之和 自己答案&#xff1a; class Solution {public int[] twoSum(int[] nums, int target) {//遍历每一个元素 如果满足条件则终止循环返回答案int[] resultnew int[2];for(int i0;i<nums.length-1;i){for(int ji1;j<nums.length;j){if((nums[i]nums[j])target)…

第一个C++程序 - Hello World, 编译与运行

引言 编写并运行你的第一个 C 程序是学习这门语言的第一步。通过这个简单的例子&#xff0c;你将了解如何创建、编译和运行一个基本的 C 程序。本文将详细介绍每个步骤&#xff0c;并确保初学者能够顺利上手。 一、编写 "Hello World" 程序 1. 创建源代码文件 首先…

NestJS 认证与授权:JWT、OAuth 和 RBAC 实现

在上一篇文章中&#xff0c;我们介绍了 NestJS 的数据库操作和 TypeORM 集成。本文将深入探讨如何在 NestJS 中实现完整的认证和授权系统。 JWT 认证实现 1. 安装依赖 npm install nestjs/jwt nestjs/passport passport passport-jwt bcrypt npm install -D types/passport-…

JAVA没有搞头了吗?

前言 今年的Java程序员群体似乎承受着前所未有的焦虑。投递简历无人问津&#xff0c;难得的面试机会也难以把握&#xff0c;即便成功入职&#xff0c;也往往难以长久。于是&#xff0c;不少程序员感叹&#xff1a;互联网的寒冬似乎又一次卷土重来&#xff0c;环境如此恶劣&…

探秘 Chrome 隐藏配置项:chrome://net-internals

Chrome浏览器中的chrome://net-internals/页面是一个强大的内置工具&#xff0c;提供了监视和调试网络请求与事件的详细功能。 一、chrome://net-internals/#events 地址&#xff1a;chrome://net-internals/#events 这个页面用于监视和调试网络请求和事件。通过它&#xff…

华为仓颉编程语言的应用案例分析

一、华为仓颉语言简介 1.1 仓颉语言的设计背景 华为仓颉&#xff08;Cangjie&#xff09;语言是华为自主研发的新一代编程语言&#xff0c;旨在满足分布式系统和高并发场景下的编程需求。其设计初衷是解决传统开发模式中难以处理复杂分布式任务、效率低下以及协作困难的问题。…

Windows电脑异地SSH远程连接苹果MacOS小主机Mac mini详细教程

文章目录 前言1. macOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接macOS3.1 macOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接macOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …

国标GB28181-2022平台EasyGBS:安防监控中P2P的穿透方法

在安防监控领域&#xff0c;P2P技术因其去中心化的特性而受到关注&#xff0c;尤其是在远程视频监控和数据传输方面。P2P技术允许设备之间直接通信&#xff0c;无需通过中央服务器&#xff0c;这在提高效率和降低成本方面具有明显优势。然而&#xff0c;P2P技术在实际应用中也面…