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

news2025/7/14 0:18:20

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类型,则不支持模糊匹配(实际应该分词了,然后进行的匹配)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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;引起不少人强烈兴趣。据悉&…

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

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

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; 查询库函…

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

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

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

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

爬虫-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…

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

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…

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

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

SpringBootTest报错

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

w~视觉~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12327888 #几个论文 Fast Charging of Energy-dense Lithium-ion Batteries Real-time Short Video Recommendation on Mobile Devices Semantic interpretation for convolutional neural networks: What makes a ca…