elasticsearch中使用fuzzy查询

文章目录

      • 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:控制查询扩展的最大变体数量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/941403.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数字化审计咨询服务,企业转型数字化审计的必要条件

人工智能、云计算、大数据、物联网等新兴技术的快速发展,为企业的数字化转型提供了强大的技术支持。这些技术逐渐被应用到企业运营管理的方方面面,推动了企业内部审计工作的变革。随着数字化转型的深化和信息技术的不断发展,数字化审计将成为…

【QT常用技术讲解】发送POST包(两种方式:阻塞方式及非阻塞方式)

前言 http/https(应用层)协议是广泛使用的网络通信协议。在很多与第三方API对接的场景中,通常是通过http/https协议完成,比如API对接时,通常要通过POST包获取access_token进行鉴权,然后再进行数据交互(本篇也包含有对接…

重撸设计模式--代理模式

文章目录 定义UML图代理模式主要有以下几种常见类型:代理模式涉及的主要角色有:C 代码示例 定义 代理模式(Proxy Pattern)属于结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。 通过引入代理对象&am…

【Steel Code】 10.5 COMPOSITE COLUMNS

10.5 COMPOSITE COLUMNS 组合柱 10.5.1 General 总则 (1) This clause applies for the design of composite columns and composite compression members with fully encased H sections, partially encased H sections, and infilled rectangular and circular hollow sect…

11.vector的介绍及模拟实现

1.vector的介绍 记得之前我们用C语言实现过顺序表,vector本质上也是顺序表,一个能够动态增长的数组。 vector 的底层实现机制 - 动态数组:vector 的底层实现是动态数组。它在内存中连续存储元素,就像一个可以自动调整大小的数…

封装(2)

大家好,今天我们来介绍一下包的概念,知道包的作用可以更好的面对今后的开发,那么我们就来看看包是什么东西吧。 6.3封装扩展之包 6.3.1包的概念 在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组…

go官方日志库带色彩格式化

go默认的 log 输出的日志样式比较难看,所以通过以下方式进行了美化和格式化,而且加入了 unicode 的ascii码,进行色彩渲染。 package mainimport ("fmt""log""os""runtime""strings""…

0基础学前端系列 -- 深入理解 HTML 布局

在现代网页设计中,布局是至关重要的一环。良好的布局不仅能提升用户体验,还能使内容更具可读性和美观性。HTML(超文本标记语言)结合 CSS(层叠样式表)为我们提供了多种布局方式。本文将详细介绍流式布局、Fl…

Windows开启IIS后依然出现http error 503.the service is unavailable

问题背景 已启用IIS服务,配置步骤可以参考Windows10 IIS Web服务器安装配置 问题描述 在这一步浏览网站时,并没有出现默认首页,而是 http error 503 the service is unavailable 问题解决 参考 成功解决http error 503.the service is un…

BuildCTF 公开赛web部分wp

文章目录 LovePopChainRedFlagWhy_so_serials?babyuploadeazyl0ginez!httpez_md5find-the-idsubtflock刮刮乐我写的网站被rce了&#xff1f; LovePopChain payload: <?php class MyObject{public $NoLove"Do_You_Want_Fl4g?";public $Forgzy;public functi…

diff 算法实现的几种方法和前端中的应用

diff 算法原理和几种实现方法 diff 是什么 diff 算法就是比较两个数据的差异&#xff0c;例如字符串的差异&#xff0c;对象的差异。 常用于版本管理&#xff08;git&#xff09;例如下面的实际案例。 github 上某个 commit&#xff0c;旧代码和新代码之间的不同 diff 展示…

Nacos源码搭建

拉取并配置代码 仓库地址 https://github.com/alibaba/nacos找到config 模块中找到 \resources\META-INF\mysql-schema.sql&#xff0c;在本地mysql中创建数据库nacos-config&#xff0c;将该脚本导入执行创建表。 找到console模块下的配置文件application.properties&#x…

C# Winfrom chart图 实例练习

代码太多了我就不展示了&#xff0c;贴一些比较有代表性的 成品效果展示&#xff1a; Excel转Chart示例 简单说一下我的思路 \ 先把Excel数据展示在dataGridView控件上 XLIST 为 X轴的数据 XLIST 为 Y轴的数据 ZLIST 为 展示的数据进行数据处理点击展示即可 // 将Excel数…

# 起步专用 - 哔哩哔哩全模块超还原设计!(内含接口文档、数据库设计)

↑ 上方下载文档 (大小374KB) 接口文档预览 (超过50个接口) 一、数据库25张表er-关系清晰构图&#xff01;(tip: 鼠标右键图片 > 放大图像) 二、难点/经验 详细说明 热门评论排序评论点赞列表|DTO封装经验分享|精华接口文档说明 组员都说喜欢分档对应枚举码 如果这篇文章…

【Go学习】从一个出core实战问题看Go interface赋值过程

0x01 背景 版本中一个同学找我讨论一个服务出core的问题&#xff0c;最终他靠自己的探索解决了问题&#xff0c;给出了初步的直接原因结论&#xff0c;"Go 中 struct 赋值不是原子的”。间接原因的分析是准确的&#xff0c;直接原因&#xff0c;我有点怀疑。当时写了一些…

leetcode之hot100---54螺旋矩阵(C++)

思路一&#xff1a;模拟 模拟螺旋矩阵的路径&#xff0c;路径超出界限&#xff0c;顺时针旋转&#xff0c;使用一个数组记录当前数字是否被访问到&#xff0c;直到所有的数字全部被访问 class Solution {//一个静态的常量数组&#xff0c;用于标记螺旋矩阵的移动方向(行列变化…

新能源汽车锂离子电池各参数的时间序列关系

Hi&#xff0c;大家好&#xff0c;我是半亩花海。为了进一步开展新能源汽车锂离子电池的相关研究&#xff0c;本文主要汇总并介绍了电动汽车的锂离子电池的各项参数&#xff0c;通过 MATLAB 软件对 Oxford Dataset 的相关数据集进行数据处理与分析&#xff0c;进一步研究各项参…

FastStone 10.x 注册码

简介 FastStone Capture是一款经典好用的屏幕截图软件&#xff0c;在屏幕截图领域具有广泛的应用和众多优势。 软件基本信息 FastStone Capture体积小巧&#xff0c;占用内存少&#xff0c;这使得它在运行时不会给计算机系统带来过多的负担&#xff0c;即使在配置较低的电脑…

AI合成图片是什么意思?有什么用?

随着人工智能的发展&#xff0c;现在市面上出现了很多对企业帮助很大的AI工具&#xff0c;比如说AI合成图片、AI换模特、AI穿衣、AI图片设计等等&#xff0c;下面小编就以AI合成图片为例&#xff0c;为大家详细介绍下。 一、AI合成图片是什么意思? AI合成图片主要就是指利用人…

【示例】Vue AntV G6 base64自定义img 动画效果,自适应宽高屏

需求&#xff1a;拓扑图中需要用动画的线条连接node&#xff0c;在此之前将HTML页面改成了vue页面。需要使用到G6的registerEdge 自定义边&#xff0c;小车的图片需要转成base64格式&#xff08;并翻转&#xff09;&#xff0c;可以通过base64转image查看原来的样子。 另外&am…