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

Elasticsearch:使用全文搜索在 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

相关文章:

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

8.17 在 ES|QL 中引入了 match 和 qstr 函数,可用于执行全文过滤。本文介绍了它们的作用、使用方法、与现有文本过滤方法的区别、当前的限制以及未来的改进。 ES|QL 现在包含全文函数,可用于使用文本查询过滤数据。我们将回顾可用的文本过滤方法&#xf…...

《自动驾驶与机器人中的SLAM技术》ch8:基于 IESKF 的紧耦合 LIO 系统

目录 基于 IESKF 的紧耦合 LIO 系统 1 IESKF 的状态变量和运动过程 1.1 对名义状态变量的预测 1.2 对误差状态变量的预测及对协方差矩阵的递推 2 观测方程中的迭代过程 3 高维观测中的等效处理 4 NDT 和 卡尔曼滤波的联系 5 紧耦合 LIO 系统的主要流程 5.1 IMU 静止初始化 …...

引领图像编辑领域的新潮流!Edicho:实现跨图像一致编辑的新方法(港科蚂蚁)

在图像处理领域,如何实现跨图像的一致编辑一直是技术挑战。传统方法往往局限于单张图像的编辑,难以保证多张图像间编辑效果的一致性。香港科技大学、蚂蚁集团、斯坦福大学和香港中文大学联合提出Edicho,这一难题迎来了全新的解决方案。 总结如…...

459. 重复的子字符串【力扣】——kmp拼接字符串解法

常规kmp解答 class Solution { public:void getNext(int *next,string s){int j0;next[0]0;for(int i1;i<s.size();i){while(j>0 && s[i]!s[j]){jnext[j-1];}if(s[i]s[j]) j;next[i]j;}}bool repeatedSubstringPattern(string s) {if(s.size()0) return false;i…...

fpga 的时钟管理模块pll 跟 dcm

FPGA&#xff08;Field-Programmable Gate Array&#xff0c;现场可编程门阵列&#xff09;中的时钟管理模块&#xff08;Clock Management Module, CMM&#xff09;是用于生成和管理内部时钟信号的关键组件。两个常见的CMM类型是PLL&#xff08;Phase-Locked Loop&#xff0c;…...

USB 驱动开发 --- Gadget 驱动框架梳理(一)

本文由 Linux 内核文档翻译与总结而来&#xff0c;个人学习笔记仅供参考。 Gadget 框架 在 USB 协议交互过程中&#xff0c;角色定义&#xff1a; the device driver is the master (or “client driver”) Linux 内核中称为 HCD(Host Controller Driver)&#xff0c;负责与 …...

1Hive概览

1Hive概览 1hive简介2hive架构3hive与Hadoop的关系4hive与传统数据库对比5hive的数据存储 1hive简介 Hive是基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张数据库表&#xff0c;并提供类SQL查询功能。 其本质是将SQL转换为MapReduce/Spark的任务进…...

【Web安全】SQL 注入攻击技巧详解:UNION 注入(UNION SQL Injection)

【Web安全】SQL 注入攻击技巧详解&#xff1a;UNION 注入&#xff08;UNION SQL Injection&#xff09; 引言 UNION注入是一种利用SQL的UNION操作符进行注入攻击的技术。攻击者通过合并两个或多个SELECT语句的结果集&#xff0c;可以获取数据库中未授权的数据。这种注入技术要…...

IoTDB 常见问题 QA 第三期

关于 IoTDB 的 Q & A IoTDB Q&A 第三期持续更新&#xff01;我们将定期汇总我们将定期汇总社区讨论频繁的问题&#xff0c;并展开进行详细回答&#xff0c;通过积累常见问题“小百科”&#xff0c;方便大家使用 IoTDB。 Q1&#xff1a;查询最新值 & null 数据相加方…...

RabbitMQ---消息确认和持久化

&#xff08;一&#xff09;消息确认 1.概念 生产者发送消息后&#xff0c;到达消费端会有以下情况&#xff1a; 1.消息处理成功 2.消息处理异常 如果RabbitMQ把消息发送给消费者后就把消息删除&#xff0c;那么就可能会导致&#xff0c;消息处理异常想要再获取这条消息的时…...

《鸿蒙Next旅游应用:人工智能赋能个性化与智能导览新体验》

随着鸿蒙Next的推出&#xff0c;旅游应用迎来了全新的发展机遇&#xff0c;借助人工智能技术能为用户带来更出色的个性化推荐和智能导览服务。 鸿蒙Next与人工智能融合优势 鸿蒙Next拥有强大的分布式能力和原生智能体验。其能打破设备界限&#xff0c;实现多设备协同&#xf…...

微信小程序获取当前页面路径,登录成功后重定向回原页面

&#x1f935; 作者&#xff1a;coderYYY &#x1f9d1; 个人简介&#xff1a;前端程序媛&#xff0c;目前主攻web前端&#xff0c;后端辅助&#xff0c;其他技术知识也会偶尔分享&#x1f340;欢迎和我一起交流&#xff01;&#x1f680;&#xff08;评论和私信一般会回&#…...

【9.2】Golang后端开发系列--Gin路由定义与实战使用

文章目录 一、Gin 框架路由的基本定义方式1. 简单路由创建2. 路由参数3. 查询参数 二、商业大项目中的路由定义和服务调用1. 路由模块化2. 路由组和中间件3. 中间件的使用4. 服务层调用5. 错误处理6. 版本控制7. 路由注册 一、Gin 框架路由的基本定义方式 1. 简单路由创建 使…...

【微信小程序】let和const-综合实训

let 和 const 都是用于声明变量的关键字&#xff0c;它们与传统的 var 关键字相比&#xff0c;有很多不同之处。 let 声明块级作用域变量&#xff0c;可再赋值&#xff1b;const 声明块级作用域常量&#xff0c;不可再赋值。 以下是它们的详细介绍&#xff1a; 一、基本概念…...

图匹配算法(涵盖近似图匹配)

【图数据管理与挖掘-第四讲&#xff08;子&#xff09;图匹配算法&#xff08;涵盖近似图匹配&#xff09; 北京大学2021暑期-邹磊教授】https://www.bilibili.com/video/BV1zh411q7PW?vd_source7c2b5de7032bf3907543a7675013ce3a 图同构&#xff1a; 定义&#xff1a; 给定…...

java线程——Thread

java线程——Thread 基本步骤示例优劣总结 继承Thread类是Java中实现多线程的一种方式。使用时创建一个新的类&#xff0c;该类继承自java.lang.Thread&#xff0c;并重写其run()方法&#xff0c;在方法中定义线程执行的任务逻辑。 基本步骤 1、创建一个子类&#xff1a;定义一…...

MySQL8.0新特性

第十八章_MySQL8.0新特性 1.新特性概述 1. 数据库管理和存储 1.1 数据字典 特性: MySQL 8.0 使用统一的数据字典存储元数据&#xff08;如表、列、索引等&#xff09;&#xff0c;并将其存储在 InnoDB 表中。 优点 : 提升性能&#xff1a;减少对文件系统的依赖。 提高一致…...

Oracle EBS GL定期盘存WIP日记账无法过账数据修复

系统环境 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 问题症状 用户反映来源为“定期盘存”和类别为“WIP”的日记账无法过账,标准日记账的界面上的过账按钮灰色不可用。但是,在超级用户职责下,该日记账又可以过账,细心检查发现该业务实体下有二个公司段值15100和…...

【绝对无坑】Mongodb获取集合的字段以及数据类型信息

Mongodb获取集合的字段以及数据类型信息 感觉很LOW的一个数据仓工具seatunel&#xff0c;竟然不能自动读取mongodb的表结构信息&#xff0c;需要手工创建。 然鹅&#xff0c;本人对mongodb也是新手&#xff0c;很多操作也不知所措&#xff0c;作为一个DBA&#xff0c;始终还是…...

【Git版本控制器--1】Git的基本操作--本地仓库

目录 初识git 本地仓库 认识工作区、暂存区、版本库 add操作与commit操作 master文件与commit id 修改文件 版本回退 撤销修改 删除文件 初识git Git 是一个分布式版本控制系统&#xff0c;主要用于跟踪文件的更改&#xff0c;特别是在软件开发中。 为什么要版本…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...