当前位置: 首页 > article >正文

【ES实战】Elasticsearch中模糊匹配类的查询

Elasticsearch中模糊匹配类的查询

文章目录

  • Elasticsearch中模糊匹配类的查询
    • 通配符查询
    • 前缀匹配查询
    • 正则匹配查询
      • 标准的正则操作
      • 特殊运算符操作
    • 模糊化查询
      • Fuzziness
    • `text`类型同时配置`keyword`类型

Elasticsearch中模糊类查询主要有以下

  • Wildcard Query:通配符查询
  • Prefix Query:前缀匹配查询
  • Regexp Query:正则匹配查询
  • Fuzzy query :模糊查询
  • text类型同时配置keyword类型,同时支持全文搜索和精确查询

使用前,性能需要进行验证

通配符查询

通配符支持*?*可以代表任何字符序列,包含空字符; ?可以代表任一字符。

示例

GET /_search
{"query": {"wildcard" : { "user" : "ki*y" }}
}

前缀匹配查询

查询到匹配字段包含以给定开头的词的文档

示例

GET /_search
{ "query": {"prefix" : { "user" : "ki" }}
}

正则匹配查询

示例

GET /_search
{"query": {"regexp":{"name.first": "s.*y"}}
}GET /_search
{"query": {"regexp":{"name.first": {"value": "s.*y","flags" : "INTERSECTION|COMPLEMENT|EMPTY"}}}
}

以下是支持的正则表达式语法(Lucene正则表达式引擎与perl不兼容,但支持更小范围的操作符)

标准的正则操作

  • Anchoring 锚定正则表达式

    用来说明这是个正则表达式,使用 ^ 表示开头或 $ 表示结尾。

  • Allowed characters 允许使用的字符

    表达式中可以使用任何 Unicode 字符,但某些字符是保留字符,必须转义。标准的保留字符有:

    . ? + * | { } [ ] ( ) ” \

    如果启用了可选功能(见下文),这些字符也可能被保留:

    # @ & < > ~

    任何保留字符都可以用反斜杠\*转义,包括字面反斜杠字符:\\

    此外,任何字符(双引号除外)在被双引号包围时都按字面解释:john“@smith.com”

  • Match any character匹配任何字符

    .点可以匹配任何字符

    For string "abcde":

    ab... # match a.c.e # match

  • One-or-more 匹配一次或多次

    加号 + 可用来重复前面的最短模式一次或多次

    For string "aaabbb":

    a+b+ # match

    aa+bb+ # match

    a+.+ # match

    aa+bbb+ # match`

  • Zero-or-more 匹配0次或多次

    星号 * 可用来匹配前面最短模式的零次或多次。

    For string "aaabbb":

    a*b* # match

    a*b*c* # match

    .*bbb.* # match

    aaa*bbb* # match

  • **Zero-or-one **匹配0次或1次

    问号 ? 可用来匹配前面最短模式的零次或1次。

    For string "aaabbb":

    aaa?bbb? # match

    aaaa?bbbb? # match

    .....?.? # match

    aa?bb? # no match

  • Min-to-max匹配最小次数与最大次数

    大括号 {} 可用于指定前面最短模式重复的最少次数和(可选)最多次数。

    {x,y},x代表最小匹配次数,y代表最多匹配次数,y可选

    {5} 最少重复匹配5次

    {2,5} 最少重复匹配2次,最多重复匹配5次

    {2,} 最少重复匹配2次

    For string “aaabbb”:

    a{3}b{3} # match

    a{2,4}b{2,4} # match

    a{2,}b{2,} # match

    .{3}.{3} # match

    a{4}b{4} # no match

    a{4,6}b{4,6} # no match

    a{4,}b{4,} # no match`

  • Grouping 分组匹配

    括号() 可以用来组成子句型。

    For string "ababab":

    (ab)+ # match

    ab(ab)+ # match

    (..)+ # match

    (...)+ # no match

    (ab)* # match

    abab(ab)? # match

    ab(ab)? # no match

    (ab){3} # match

    (ab){1,2} # no match

  • Alternation

    管道符号 | 充当 OR 运算符。如果左侧或右侧的模式匹配,则匹配成功。交替适用于最长的模式,而不是最短的模式。

    For string "aabb":

    aabb|bbaa # match

    aacc|bb # no match

    aa(cc|bb) # match

    a+|b+ # no match

    a+b+|b+a+ # match

    a+(b|c)+ # match

  • Character classes

    方括号[]括起来的潜在字符范围可以表示为字符类。

    ^ 表示否定字符类。

    -表示一个字符范围,除非它是第一个字符或用反斜杠转义。

    The allowed forms are:

    [abc] # ‘a’ or ‘b’ or ‘c’

    [a-c] # ‘a’ or ‘b’ or ‘c’

    [-abc] # ‘-’ or ‘a’ or ‘b’ or ‘c’

    [abc\-] # ‘-’ or ‘a’ or ‘b’ or ‘c’

    [^abc] # any character except ‘a’ or ‘b’ or ‘c’

    [^a-c] # any character except ‘a’ or ‘b’ or ‘c’

    [^-abc] # any character except ‘-’ or ‘a’ or ‘b’ or ‘c’

    [^abc\-] # any character except ‘-’ or ‘a’ or ‘b’ or ‘c’

    For string abcd:

    ab[cd]+ # match

    [a-d]+ # match

    [^a-d]+ # no match

特殊运算符操作

flags 代表正则的支持特殊运算符的类型,取值元素有ALLCOMPLEMENTINTERSECTIONINTERVALANYSTRING

flags 参数默认为 ALL。不同的标志组合(用 |连接)可用于启用/禁用特定运算符:

{"regexp": {"username": {"value": "john~athon<1-5>","flags": "COMPLEMENT|INTERVAL"}}
}
  • Complement

    Complement模式下,最短的表达式,如果紧跟着转折号~,就会被否定的意思

    For instance, "ab~cd" means:

    • a 开头
    • b 开头
    • 后跟任意长度的字符串,除了 c 以外的任何字符串
    • d 结尾

    For the string "abcdef":

    ab~df # match

    ab~cf # match

    ab~cdef # no match

    a~(cb)def # match

    a~(bc)def # no match

    Enabled with the COMPLEMENT or ALL flags.

  • Interval

    Interval模式下,使用<>代表数据范围区间

    For string: "foo80":

    foo<1-100> # match

    foo<01-100> # match

    foo<001-100> # no match

    Enabled with the INTERVAL or ALL flags.

  • Intersection

    该模式下,双引号 “&” 连接两个表达式,两个表达式必须匹配。

    For string "aaabbb":

    aaa.+&.+bbb # match

    aaa&bbb # no match

    Using this feature usually means that you should rewrite your regular expression.Enabled with the INTERSECTION or ALL flags.

  • Any string

    符号 “@” 匹配整个字符串。这可以与上面的交集和补码结合起来,表达 “除了…之外的所有内容”。

    For instance:

    @&~(foo.+) # anything except string beginning with “foo”

    Enabled with the ANYSTRING or ALL flags.

模糊化查询

模糊查询会生成在模糊度指定的最大编辑距离内的匹配术语,然后检查术语字典,找出索引中实际存在的已生成术语。最终查询最多使用 max_expansions 匹配词。

示例

GET /_search
{"query": {"fuzzy" : { "user" : "ki" }}
}GET /_search
{"query": {"fuzzy" : {"user" : {"value": "ki","boost": 1.0,"fuzziness": 2,"prefix_length": 0,"max_expansions": 100}}}
}
参数名解释
fuzziness最大编辑距离. 默认 AUTO. 详细见Fuzziness章节
prefix_length不会被 “模糊化 ”的初始字符数。这有助于减少必须检查的术语数量。默认为 0
max_expansions模糊化查询将扩展到的术语的最大数量 Defaults to 50.
transpositionsWhether fuzzy transpositions (abba) are supported. Default is false.

Fuzziness

在查询 text or keyword 字段时,“模糊度 ”被解释为Levenshtein Edit Distance–一个字符串要与另一个字符串相同而需要更改的一个字符的数量。

Levenshtein Edit Distance(莱文斯坦编辑距离)表示两个字符串之间,一个字符串转换成另一个字符串需要最少编辑操作的次数,编辑操作分为插入一个字符,删除一个字符。

fuzziness 参数可指定为:

参数值说明
0, 1, 2数字值, 最大允许的Levenshtein编辑距离(或编辑次数)
AUTO根据词条长度生成编辑距离。可选择提供低距离和高距离参数 AUTO:[low],[high]。如果未指定,默认值为 3 和 6,相当于 AUTO:3,6,长度为:**0...2必须完全匹配3...5允许一次编辑>5**允许两次编辑AUTO通常是 fuzziness的首选值。

text类型同时配置keyword类型

一个字段同时是keyword和text,同时支持全文搜索和精确查询

示例

新建索引

PUT gudong20250423002
{"settings:": {"number_of_shards": 1,"number_of_replicas": 1},"mappings": {"_doc": {"properties": {"message": {"type": "keyword","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}
}PUT gudong20250423002
{"settings:": {"number_of_shards": 1,"number_of_replicas": 1},"mappings": {"_doc": {"properties": {"message": {"type": "keyword"}}}}
}

写入数据

POST gudong20250423001/doc
{"message":"中国江苏省南京市江北新区"}POST gudong20250423002/doc
{"message":"中国江苏省南京市江北新区"}

查询效果

GET gudong20250423001/_search
{"query": {"bool": {"filter": [{ "match": { "message": "中国" } }]}}
}{"took": 2,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": 1,"max_score": 0,"hits": [{"_index": "gudong20250423001","_type": "doc","_id": "AZZhpkVj-8S4QQ2j15fP","_score": 0,"_source": {"message": "中国江苏省南京市江北新区"}}]}
}
GET gudong20250423002/_search
{"query": {"bool": {"filter": [{ "match": { "message": "中国" } }]}}
}{"took": 1,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": 0,"max_score": null,"hits": []}
}

字段单纯配置keyword类型,则不支持模糊匹配(实际应该分词了,然后进行的匹配)

相关文章:

【ES实战】Elasticsearch中模糊匹配类的查询

Elasticsearch中模糊匹配类的查询 文章目录 Elasticsearch中模糊匹配类的查询通配符查询前缀匹配查询正则匹配查询标准的正则操作特殊运算符操作 模糊化查询Fuzziness text类型同时配置keyword类型 Elasticsearch中模糊类查询主要有以下 Wildcard Query&#xff1a;通配符查询P…...

Spring Security认证流程

认证是Spring Security的核心功能之一&#xff0c;Spring Security所提供的认证可以更好地保护系统的隐私数据与资源&#xff0c;只有当用户的身份合法后方可访问该系统的资源。Spring Security提供了默认的认证相关配置&#xff0c;开发者也可以根据自己实际的环境进行自定义身…...

TXPOLARITY/RXPOLARITY设置

TXPOLARITY/RXPOLARITY&#xff1a;该端口用来反向输出数据的极性。 0&#xff1a;表示不反向。TXP是正&#xff0c;TXN是负&#xff1b; 1&#xff1a;标识反向。TXP是负&#xff0c;TXN是正&#xff1b; 如下图所示&#xff1a;...

2026届华为海思秋暑期IC实习秋招笔试真题(2025.04.23更新)

今天给大家分享下华为海思2025.04.23号最新IC笔试真题。 华为海思IC前端中后端(COT&XPU)岗位笔试机考题 更多华为海思数字IC岗秋招实习笔试真题&#xff0c;可以私信小编。 数字后端培训实战项目六大典型后端实现案例 秒杀数字后端实现中clock gating使能端setup viola…...

优考试V4.20机构版【可注册】

优考试V4.20机构版&#xff0c;可通过注册机完美激活。 优考试机构版‌是一个功能强大的在线考试系统&#xff0c;适用于各种 考试场景&#xff0c;包括在线考试、培训、学习等多种用途。以下是优考试机构版的主要功能和特点&#xff1a; ‌多层级管理‌&#xff1a;优考试机…...

携国家图书馆文创打造AI创意短片,阿里妈妈AIGC能力面向商家开放

在4月23日“世界读书日”之际&#xff0c;阿里妈妈联合国家图书馆文创正式发布了三条AI创意视频。 该系列视频以“千年文脉典籍奇谈”为主题&#xff0c;借助阿里妈妈的AIGC能力&#xff0c;以AI链接古今&#xff0c;打开阅读典籍新方式&#xff0c;引起不少人强烈兴趣。据悉&…...

Spark,配置hadoop集群2

1.建立新文件&#xff0c;编写脚本程序 在hadoop101中操作&#xff0c;在/root/bin下新建文件&#xff1a;myhadoop&#xff0c;输入如下内容&#xff1a; 2.分发执行权限 保存后退出&#xff0c;然后赋予脚本执行权限 [roothadoop101 ~]$ chmod x /root/bin/myhadoop 像下图…...

4.1 融合架构设计:LLM与Agent的协同工作模型

大型语言模型&#xff08;Large Language Models, LLMs&#xff09;与智能代理&#xff08;Agent&#xff09;的融合架构已成为人工智能领域推动企业智能化的核心技术。这种协同工作模型利用LLM的语言理解、推理和生成能力&#xff0c;为Agent提供强大的知识支持&#xff0c;而…...

MMsegmentation第一弹-(认识与安装)

前言 在刚接触MMsegmentation的时候&#xff0c;我是怎么看都看不明白&#xff0c;那个过程实在是太痛苦了&#xff0c;所以我当时就想着一定要把这个写成文章&#xff0c;希望后来者能很轻松的就上手。该系列文章不涉及框架的底层原理&#xff0c;仅以一个使用者的身份带领读…...

12.无线网络安全入门

无线网络安全入门 第一部分&#xff1a;无线网络基础与风险第二部分&#xff1a;Wi-Fi攻击方式第三部分&#xff1a;无线网络安全实践总结 目标&#xff1a; • 理解无线网络的基本原理和安全风险 • 掌握Wi-Fi常见的攻击方式 • 通过实践提升对无线网络安全的认识和防护能力 …...

React19源码阅读之commitRoot

commitRoot入口 在finishConcurrentRender函数&#xff0c;commitRootWhenReady函数&#xff0c;commitRoot函数。 commitRoot流程图 commitRoot函数 commitRoot 函数是 React 渲染流程中用于提交根节点的关键函数。它的主要作用是设置相关的优先级和状态&#xff0c;然后调…...

目标检测:视觉系统中的CNN-Transformer融合网络

一、背景 无人机&#xff08;UAVs&#xff09;在城市自动巡逻中发挥着重要作用&#xff0c;但它们在图像识别方面面临挑战&#xff0c;尤其是小目标检测和目标遮挡问题。此外&#xff0c;无人机的高速飞行要求检测系统具备实时处理能力。 为解决这些问题&#xff0c;我们提出…...

Turso:一个基于 libSQL的分布式数据库

Turso 是一个完全托管的数据库平台&#xff0c;支持在一个组织中创建高达数十万个数据库&#xff0c;并且可以复制到任何地点&#xff0c;包括你自己的服务器&#xff0c;以实现微秒级的访问延迟。你可以通过Turso CLI&#xff08;命令行界面&#xff09;管理群组、数据库和API…...

深度学习前沿 | TransNeXt:仿生聚合注意力引领视觉感知新时代

目录 1. 引言 2. 背景与挑战 3. TransNeXt 核心创新 3.1 像素聚合注意力&#xff08;PAA&#xff09; 3.2 长度缩放余弦注意力&#xff08;LSCA&#xff09; 3.3 卷积 GLU&#xff08;ConvGLU&#xff09; 4. 模型架构详解 5. 实验与性能评估 5.1 图像分类&#xff08;I…...

C语言-函数-1

以下是我初学C语言的笔记记录&#xff0c;欢迎在评论区留言补充 一&#xff0c;函数分为几类 * 函数分为两类&#xff1a; 一类是库函数&#xff1b;一类是自定义函数 * 库函数&#xff1a; 系统自己带的&#xff0c;在使用时候&#xff0c;要用到头文件&#xff1b; 查询库函…...

卡尔曼滤波解释及示例

卡尔曼滤波的本质是用数学方法平衡预测与观测的可信度 &#xff0c;通过不断迭代逼近真实状态。其高效性和鲁棒性&#xff0c;通常在导航定位中&#xff0c;需要融合GPS、加速度计、陀螺仪、激光雷达或摄像头数据&#xff0c;来提高位置精度。简单讲&#xff0c;卡尔曼滤波就是…...

openwrt作旁路由时的几个常见问题 openwrt作为旁路由配置zerotier 图文讲解

1 先看openwrt时间&#xff0c;一定要保证时间和浏览器和服务器是一致的&#xff0c;不然无法更新 2 openwrt设置旁路由前先测试下&#xff0c;路由器能否ping通主路由&#xff0c;是否能够连接外网&#xff0c;好多旁路由设置完了&#xff0c;发现还不能远程好多就是旁路由本…...

Redis--预备知识以及String类型

目录 一、预备知识 1.1 基本全局命令 1.1.1 KEYS 1.1.2 EXISTS 1.1.3 DEL 1.1.4 EXPIRE 1.1.5 TTL 1.1.6 TYPE 1.2 数据结构以及内部编码 1.3 单线程架构 二、String字符串 2.1 常见命令 2.1.1 SET 2.1.2 GET 2.1.3 MGET 2.1.4 MSET 2.1.5 SETNX 2.2 计数命令 2.2.1 INCR 2.2.2…...

Redis 及其在系统设计中的作用

什么是Redis Redis 是一个开源的内存数据结构存储系统&#xff0c;可用作数据库、缓存和消息代理。它因其快速的性能、灵活性和易用性而得到广泛应用。 Redis 数据存储类型 Redis 允许开发人员以各种数据结构&#xff08;例如字符串、位图、位域、哈希、列表、集合、有序集合…...

UEC++第10天|UEC++获取对象、RTTI是C++

最近在写UEC项目&#xff0c;这里写几个案例里的问题&#xff0c;还在学习阶段 1. 如何获取小鸟对象&#xff1f; void AFlappyBirdGameModeBase::BeginGame() { // 让管道动起来PipeActor->SetMoveSpeed();// 让小鸟开始飞行// 如何获取到小鸟对象APawn* Pawn UGameplayS…...

【python】一文掌握 markitdown 库的操作(用于将文件和办公文档转换为Markdown的Python工具)

更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 一、markitdown概述1.1 markitdown介绍1.2 MarkItDown支持的文件1.3 为什么是Markdown?二、markitdown安装2.1 pip方式安装2.2 源码安装2.3 docker方式安装三、基本使用3.1 命令行方式3.2 可选依赖项配置3.3 插件方…...

爬虫-oiwiki

我们将BASE_URL 设置为 "https://oi-wiki.org/" 后脚本就会自动开始抓取该url及其子页面的所有内容&#xff0c;并将统一子页面的放在一个文件夹中 import requests from bs4 import BeautifulSoup from urllib.parse import urljoin, urlparse import os import pd…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(10): つもり 计划/打算

日语学习-日语知识点小记-构建基础-JLPT-N4阶段&#xff08;10&#xff09;&#xff1a; つもり 计划/打算 1、前言&#xff08;1&#xff09;情况说明&#xff08;2&#xff09;工程师的信仰 2、知识点&#xff08;1&#xff09;つもり 计划/打算&#xff08;&#xff12;&a…...

强化学习核心原理及数学框架

1. 定义与核心思想 强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种通过智能体&#xff08;Agent&#xff09;与环境&#xff08;Environment&#xff09;的持续交互来学习最优决策策略的机器学习范式。其核心特征为&#xff1a; ​​试错学习​​&#x…...

【技术派后端篇】技术派中 Session/Cookie 与 JWT 身份验证技术的应用及实现解析

在现代Web应用开发中&#xff0c;身份验证是保障系统安全的重要环节。技术派在身份验证领域采用了多种技术方案&#xff0c;其中Session/Cookie和JWT&#xff08;JSON Web Token&#xff09;是两种常用的实现方式。本文将详细介绍这两种身份验证技术在技术派中的应用及具体实现…...

【基础】Node.js 介绍、安装及npm 和 npx功能了解

前言 后面安装n8n要用到&#xff0c;做一点技术储备。主要是它的两个工具&#xff1a;npm 和 npx。 Node.js介绍 Node.js 是一个免费的、开源的、跨平台的 JavaScript 运行时环境&#xff0c;允许开发人员在浏览器之外编写命令行工具和服务器端脚本&#xff0c;是一个基于 C…...

第53讲 农学科研中的AI伦理与可解释性——探索SHAP值、LIME等可解释工具与科研可信性建设之道

目录 一、为什么农学科研中需要“可解释AI”? ✅ 场景示例: 二、常见可解释AI工具介绍 1. SHAP(SHapley Additive exPlanations) 2. LIME(Local Interpretable Model-agnostic Explanations) 三、AI伦理问题在农学中的体现 🧭 公平性与偏见 🔐 数据隐私 🤖…...

助力网站优化利用AI批量生成文章工具提升质量

哎&#xff0c;有时候觉得写东西这事儿吧&#xff0c;真挺玄乎的。你看着那些大网站的优质内容&#xff0c;会不会突然冒出个念头——这些家伙到底怎么做到日更十篇还不秃头的&#xff1f;前阵子我蹲在咖啡馆里盯着屏幕发呆&#xff0c;突然刷到个帖子说现在用AI写文章能自动纠…...

Java语言的进化:JDK的未来版本

作为一名Java开发者&#xff0c;我们正处在一个令人兴奋的时代&#xff01;Java语言正在以前所未有的速度进化&#xff0c;每个新版本都带来令人惊喜的特性。让我们一起探索JDK未来版本的发展方向&#xff0c;看看Java将如何继续领跑编程语言界&#xff01;&#x1f4aa; &…...

SpringBootTest报错

Unable to find a SpringBootConfiguration, you need to use ContextConfiguration or … 解决方案&#xff1a;在SpringTest注解中添加属性&#xff08;classes &#xff09;填写启动类 如我的启动类是MainApplication.class javax.websocket.server.ServerContainer no…...