elasticsearch中使用fuzzy查询

embedded/2024/12/26 15:03:53/

文章目录

      • 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/embedded/148393.html

相关文章

视频矩阵系统怎么做?深度解析矩阵全链路玩法

今天咱们聊聊,为什么企业做短视频一定要搞矩阵?还,这个矩阵号到底应该怎么打造? 什么是抖音矩阵账号?简单来说,就是在一个品牌或企业在抖音平台上创建并管理多个员工账号,这些账号都和主账号有…

Windows查看MD5

如何在Windows,查看一个文件的MD5 1、ctrlr,输入cmd 2、执行命令certutil -hashfile 文件路径(按住将文件拖进来就行) MD5 3、执行命令certutil -hashfile 文件路径(按住将文件拖进来就行)SHA1 可查看SHA…

Gaea学习笔记总结

Gaea 是一款地形创建软件,它内置了丰富的地貌节点,能快速生成像山脉、荒原峡谷、河流、湖泊等地貌特征。 节点解释使用方法概述Primitives(基本体)Constant(常数)创建输出,一般用来输出Hight&am…

flux模型的下载、配套及简易使用记录(ubuntu)

我在学习使用时,很迷惘各个模型放在什么 位置。以及他们的作用。所以系统的了解了一下。然后记录了,一下,希望能帮助到想了解这个知识的朋友。 另外,我将持续的更新这个专辑。记录我在学习和使用过程中关于comfy的方面。希望得到…

Centos7 部署ZLMediakit

1、拉取代码 #国内用户推荐从同步镜像网站gitee下载 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit #千万不要忘记执行这句命令 git submodule update --init 2、安装编译器 sudo yum -y install gcc 3、安装cmake sudo yum -y install cmake 4…

蓝桥杯摆烂第三天

小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。 请计算这次考试的最高分、最低分和平均分。 输入描述 输入的第一行包含一个整数 n (1≤n≤104),表示考试人数。 接下来 n 行,每行包…

Kafka 常见问题

一、Kafka 如何实现高可用性? Kafka 的高可用性是通过多个机制和配置来实现的,主要包括以下几个方面: 分区与副本 Kafka 将主题(Topic)划分为多个分区(Partition),每个分区可以有多…

clickhouse分布式表插入数据不用带ON CLUSTER

向分布式表插入数据时,通常 不需要使用 ON CLUSTER,因为分布式表的写入操作会自动将数据分发到底层表(bm_online_user_count_part)的对应节点。 但对于 DDL(数据定义语句,例如 ALTER TABLE) 操…