Elasticsarch:使用全文搜索在 ES|QL 中进行过滤 - 8.17

8.17 在 ES|QL 中引入了 match 和 qstr 函数,可用于执行全文过滤。本文介绍了它们的作用、使用方法、与现有文本过滤方法的区别、当前的限制以及未来的改进。
ES|QL 现在包含全文函数,可用于使用文本查询过滤数据。我们将回顾可用的文本过滤方法,并了解为什么这些函数提供了更好的替代方案。我们还将研究 ES|QL 中全文函数的未来改进。
使用 ES|QL 过滤文本
日志中的文本数据对于理解、监控和排除系统和应用程序故障至关重要。文本的非结构化性质允许灵活地捕获各种信息。
由于是非结构化的,我们需要隔离特定模式、关键字或短语的方法。无论是搜索错误消息、使用标签缩小结果范围,还是查找特定主机名,都是我们一直在做的事情,以优化我们的结果并最终获得我们正在寻找的信息。
ES|QL 提供了不同的方法来帮助你处理文本。Elasticsearch 8.17 添加了全文函数 match 和 qstr,以帮助解决更复杂的搜索用例。
文本过滤的局限性
ES|QL 已经提供了文本过滤功能,包括:
- 文本相等,使用相等运算符直接比较完整字符串。
- 字符串开始和结束,使用 STARTS_WITH 和 ENDS_WITH 函数。
- 使用 LIKE 和 RLIKE 运算符进行模式和正则表达式匹配。
文本过滤很有用 - 但它在面向文本的用例中可能会有所不足:
多值字段
将 ES|QL 函数与多值字段结合使用可能比较棘手 - 函数在应用于多值字段时会返回 null。
如果你需要将函数应用于多值字段,则首先需要使用 MV_CONCAT 将值转换为单个值,以便可以匹配单个值:
FROM logs
| EVAL all_tags = MV_CONCAT(tags)
| WHERE all_tags == "production"
分析文本
分析器对于全文搜索非常有用,因为它们允许转换文本。它们允许我们提取和修改索引文本,并修改查询,以便我们最大限度地找到我们正在寻找的内容。
使用文本过滤时不会分析文本。这意味着例如,你需要在搜索时匹配文本大小写,或者创建解决可能的大小写差异的正则表达式/模式。
在查找多语言文本(因此你不能使用 ASCII folding)、尝试匹配路径的部分(path hierarchy)或删除停用词(stopwords)时,这可能会变得更加成问题。
性能
模式匹配和正则表达式需要时间。Lucene 可以通过创建有限自动机来使用索引术语词典进行匹配,从而完成大量繁重的工作,但这仍然是一个计算密集型过程。
正如你在我们 8.17 版本博客中看到的那样,使用正则表达式进行文本过滤的速度可能比使用全文函数慢 50-1000 倍,具体取决于你的数据集。
进入全文函数
Elasticsearch 8.17 和 Serverless 引入了两个用于文本匹配的新函数:MATCH 和查询字符串(缩写为 QSTR)。
这些函数解决了文本过滤的一些限制:
- 它们可以直接用于多值字段。当多值字段中的任何值与查询匹配时,它们将返回结果。
- 它们使用文本字段的分析器。将使用目标字段的任何现有分析器分析查询,这将允许匹配而不考虑大小写。这还可以解锁 ASCII folding、删除停用词,甚至使用同义词。
- 它们性能卓越。它们可以直接使用 Lucene 索引结构来定位数据中的特定术语,而不是依赖模式匹配或正则表达式。
MATCH 函数
MATCH 允许匹配特定字段上的值:
FROM logs
| WHERE match(message, "connection lost")
Match 函数在底层使用 match query。这意味着当使用多个术语时,它将创建一个布尔查询,并使用 OR 作为组合它们的默认运算符。
Match 函数目前有一些限制:
- 它不提供指定参数的方法。它将使用匹配查询的默认值。
- 它只能在 WHERE 子句中使用。
- 它不能在 STATS 或 LIMIT 命令之后使用
8.17 版本存在以下限制:
- 只有 text 或 keyword 字段可以与 MATCH 一起使用。
- MATCH 可以与其他条件组合作为 AND 表达式的一部分,但不能作为 OR 表达式的一部分。可以使用 WHERE match(message, "connection lost") AND length(message) > 10,但不能使用 WHERE match(message, "connection lost") OR length(message) > 10。
我们正在积极努力解除这些限制,以便你可以充分利用 MATCH 的全部功能。你可以查看 Elastic Cloud Serverless 中的进度,它会不断更新我们的新工作。以下是针对上述限制的 serverless 当前状态:
- MATCH 几乎可以与任何字段类型一起使用,并自动将字符串值转换为任何类型。
- 当条件的所有元素都是全文函数时,MATCH 和全文函数允许使用 OR 条件
查看最新文档以了解无服务器上 MATCH 的状态。
匹配运算符
匹配运算符 (:) 相当于上面的匹配函数,但它提供了更简洁的语法:
FROM logs
| WHERE message:"connection lost"
使用 match 运算符更方便,但你可以使用对你更有意义的任何运算符。
match 运算符具有与 match 函数相同的限制。
查询字符串函数
查询字符串函数 (QSTR) 使用查询字符串语法对一个或多个字段执行复杂查询:
FROM logs
| WHERE qstr("message: 'connection lost' AND tags:'production'")
查询字符串语法允许指定强大的全文选项和操作,包括模糊搜索、邻近搜索(proximity searches)和布尔运算符(boolean operators)的使用。有关更多详细信息,请参阅文档。
查询字符串是一个非常强大的工具,但目前有一些限制,与 MATCH 函数非常相似:
- 它不提供指定参数(如 match type)或指定要搜索的 default fields 的方法。
- 它只能在 WHERE 子句中使用。
- 它不能在 STATS 或 LIMIT 命令之后使用
- 它不能在修改列的命令之后使用,例如 SHOW、ROW、DISSECT、DROP、ENRICH、EVAL、GROK、KEEP、MV_EXPAND 或 RENAME
与 MATCH 函数类似,我们对 OR 条件有一个限制。QSTR 可以作为 AND 表达式的一部分与其他条件组合,但不能作为 OR 表达式的一部分。可以使用 WHERE qstr("message: 'connection lost'") AND length(message) > 10,但不能使用 WHERE qstr("message: 'connection lost'") OR length(message) > 10。
当条件的所有元素都是全文函数时,Elastic Cloud Serverless 允许使用 OR 条件。请查看最新文档,了解 QSTR 在 Serverless 上的状态。
下一步是什么?
全文搜索将会发生什么?相当多的事情:
- 为 MATCH 和 QSTR 函数的行为添加调整选项
- 一个额外的 KQL 函数,可用于将你现有的 Kibana 查询移植到 ES|QL
- 消除全文函数的当前限制
我们还在努力添加评分,因此你可以开始使用 ES|QL 进行相关性匹配,而不仅仅是进行过滤。这非常令人兴奋,因为这将定义 Elasticsearch 中文本搜索的未来!
试一试
MATCH 和 QSTR 在 Elasticsearch 8.17 上可用,当然它们在 Serverless 中始终是最新的。
你在文本过滤方面寻找什么?让我们知道你的反馈!
祝你全文过滤愉快!
Elasticsearch 包含新功能,可帮助你为你的用例构建最佳搜索解决方案。深入了解我们的示例笔记本以了解更多信息,开始免费云试用,或立即在你的本地机器上试用 Elastic。
原文:https://www.elastic.co/search-labs/blog/filtering-in-esql-full-text-search-match-qstr
相关文章:
Elasticsarch:使用全文搜索在 ES|QL 中进行过滤 - 8.17
8.17 在 ES|QL 中引入了 match 和 qstr 函数,可用于执行全文过滤。本文介绍了它们的作用、使用方法、与现有文本过滤方法的区别、当前的限制以及未来的改进。 ES|QL 现在包含全文函数,可用于使用文本查询过滤数据。我们将回顾可用的文本过滤方法…...
第432场周赛:跳过交替单元格的之字形遍历、机器人可以获得的最大金币数、图的最大边权的最小值、统计 K 次操作以内得到非递减子数组的数目
Q1、跳过交替单元格的之字形遍历 1、题目描述 给你一个 m x n 的二维数组 grid,数组由 正整数 组成。 你的任务是以 之字形 遍历 grid,同时跳过每个 交替 的单元格。 之字形遍历的定义如下: 从左上角的单元格 (0, 0) 开始。在当前行中向…...
RK3399开发板Linux实时性改造
本次测试基于NanoPC-T4开发板(国产化处理器RK3399),4.19.111内核Xenomai实时性改造测试。 Xenomai下载网站:https://xenomai.org/downloads/ NanoPC-T4网站:https://wiki.friendlyarm.com/wiki/index.php/NanoPC-T4/z…...
青少年编程与数学 02-006 前端开发框架VUE 22课题、状态管理
青少年编程与数学 02-006 前端开发框架VUE 22课题、状态管理 一、状态管理二、Vuex1. 安装Vuex2. 创建Vuex Store3. 在Vue应用中使用Store4. 在组件中使用状态5. 模块化Store 三、Vuex应用示例1. 创建项目2. 安装Vuex3. 设置Vuex Store4. 在主项目中使用Store5. 创建组件6. 更新…...
Linux 内核中的 netif_start_queue 函数:启动网络接口发送队列的关键
在 Linux 内核的网络子系统中,netif_start_queue 函数扮演着至关重要的角色。这个函数的主要功能是启动(或启用)网络接口的发送队列,标志着网络接口已经准备好开始发送数据包。本文将深入探讨 netif_start_queue 函数的用途、工作原理以及在实际网络驱动代码中的应用。 函…...
数据结构之顺序结构二叉树(超详解)
文章目录 1 树1.1 树的概念与结构1.2 相关术语1.3 树的表示与运用场景1.3.1 运用场景 2. 二叉树2.1 概念与结构2.1.1 满二叉树2.1.2 完全二叉树 3. 顺序结构二叉树3.1 堆的引入3.1.1 概念与结构 3.2 功能实现3.2.1 堆的结构3.2.2 初始化、销毁 3.3 堆的插入数据3.3.1 向上调整算…...
acwing_5722_十滴水
acwing_5722_十滴水 下面这篇大佬的题解属实是把指针用明白了,可以好好理解一下: 原题解连接:AcWing 5722. 一个简单模拟实现 - AcWing map/unordered_map的用法:见收藏夹 #include<iostream> #include<unordered_map> #incl…...
acwing-3194 最大的矩形
acwing-3194 最大的矩形 这个题程序设计课上有讲过, 平民算法,时间复杂度在 O ( n 2 ) O(n^2) O(n2) // // Created by HUAWEI on 2024/10/28. // #include<iostream>using namespace std;const int Max_size 1e4 20;int N; int h[Max_size];…...
UnityDemo-TheBrave-制作笔记
这是我跟着b站up主MStudio的视频学习制作的,大体上没有去做一些更新的东西,这里只是一个总的总结。在文章的最后,我会放上可以游玩该游戏的链接和exe可执行文件,不过没有对游戏内容进行什么加工,只有基本的功能实现罢了…...
玩转 JMeter:Random Order Controller让测试“乱”出花样
嘿,各位性能测试的小伙伴们!今天咱要来唠唠 JMeter 里超级有趣又超实用的 Random Order Controller(随机顺序控制器),它就像是性能测试这场大戏里的“魔术棒”,轻轻一挥,就能让测试场景变得千变…...
VTK知识学习(33)-交互问题2
1、前言 主要是针对前面有过实现不了交互的情况进行说明,经过一些尝试和分析调用API,总算实现RenderWindowControl函数回调正常串接,当然这个移动处理事件的效果目前也没有确认。 2、使用 vtkImageReslice reslice vtkImageReslice.New();p…...
Centos9-SSH免密登录配置-修改22端口-关闭密码登录-提高安全性
Centos9-SSH免密登录配置-修改22端口-关闭密码登录 生成秘钥对将公钥信息存进authorized_keys测试登录查询访问记录、比对指纹更换22访问端口关闭账号密码登录生成秘钥对 生成密钥对,指定 备注 和 文件目录命令执行后,默认两次回车,不设置秘钥使用密码ssh-keygen -t rsa -b …...
SqlServer: An expression services limit has been reached异常处理
在工作中遇到一个问题,因为项目很老,代码很不规范,出现一种场景: 查询所有客户(5w条以上),然后根据客户Id,再去其他表查询,代码中是直接将customerId拼接到sql中去查询,形成的sql如…...
CentOS下安装Docker
Docker 必须要在Linux环境下才能运行,windows下运行也是安装虚拟机后才能下载安装运行,菜鸟教程 下载安装 linux 依次执行下边步骤 更新 yum yum update 卸载旧的Docker yum remove docker docker-client docker-client-latest docker-common doc…...
WPF控件Grid的布局和C1FlexGrid的多选应用
使用 Grid.Column和Grid.Row布局,将多个C1FlexGrid布局其中,使用各种事件来达到所需效果,点击复选框可以加载数据到列表,移除列表的数据,自动取消复选框等 移除复选框的要注意!!!&am…...
Jenkins-持续集成、交付、构建、部署、测试
Jenkins-持续集成、交付、构建、部署、测试 一: Jenkins 介绍1> Jenkins 概念2> Jenkins 目的3> Jenkins 特性4> Jenkins 作用 二:Jenkins 版本三:DevOps流程简述1> 持续集成(Continuous Integration,CI࿰…...
高级第一次作业
1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容,不存在则创建一个文件将创建时间写入。 2、写一个 shel1 脚本,实现批量添加 20个用户,用户名为user01-20,密码为user 后面跟5个随机字符。 3、编写个shel 脚本将/usr/local 日录下大于10M的文件转移到…...
Copula算法原理和R语言股市收益率相依性可视化分析
阅读全文:http://tecdat.cn/?p6193 copula是将多变量分布函数与其边缘分布函数耦合的函数,通常称为边缘。在本视频中,我们通过可视化的方式直观地介绍了Copula函数,并通过R软件应用于金融时间序列数据来理解它(点击文…...
反弹SHELL不回显带外正反向连接防火墙出入站文件下载
什么是反弹shell 正向连接正向连接(Forward Connection):正向连接是一种常见的网络通信模式,其中客户端主动发起连接到服务器或目标系统。正向连接通常用于客户端-服务器通信,客户端主动请求服务或资源,例如…...
后盾人JS--JS值类型使用
章节介绍与类型判断 看看构造函数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</t…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
大数据治理的常见方式
大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...
VSCode 使用CMake 构建 Qt 5 窗口程序
首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...
LeetCode - 148. 排序链表
目录 题目 思路 基本情况检查 复杂度分析 执行示例 读者可能出的错误 正确的写法 题目 148. 排序链表 - 力扣(LeetCode) 思路 链表归并排序采用"分治"的策略,主要分为三个步骤: 分割:将链表从中间…...
