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

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

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

相关文章

ISP流程--去马赛克详解

前言 本期我们将深入讨论ISP流程中的去马赛克处理。我们熟知,彩色图像由一个个像元组成,每个像元又由红、绿、蓝(RGB)三通道构成。而相机传感器只能感知光的强度,无法直接感知光谱信息,即只有亮暗而没有颜色…

晨辉面试抽签和评分管理系统之七:面试成绩核算的三种方式

晨辉面试抽签和评分管理系统(下载地址:www.chenhuisoft.cn)是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

FastApi Swagger 序列化问题

问题 错误现象: fastapi的 swagger 界面无法正常打开控制台报错:raise PydanticInvalidForJsonSchema(fCannot generate a JsonSchema for {error_info}) 详细报错: File "d:\Envs\miniconda3\envs\xdagent\lib\site-packages\pydan…

Browser-Use Web UI:浏览器自动化与AI的完美结合

Browser-Use Web UI:浏览器自动化与AI的完美结合 前言简介一、克隆项目二、安装与环境配置1. Python版本要求2. 安装依赖3. 安装 Playwright4. 配置环境变量(非必要步骤)三、启动 WebUI四、配置1. Agent设置2. 大模型设置3. 浏览器相关设置4. 运行 Agent结语前言 Web UI是在…

秒懂虚拟化(三):桌面拟化、用户体验虚拟化、应用程序虚拟化全解析,通俗解读版

秒懂虚拟化(二):服务器虚拟化、操作系统虚拟化、服务虚拟化全解析,通俗解读版-CSDN博客这篇文章学习了服务器虚拟化、操作系统虚拟化、服务器虚拟化,本节将继续学习桌面虚拟化、用户体验虚拟化、应用程序虚拟化。 1、…

UVM RAL Register Abstraction Layer:寄存器抽象层

topic 没有RAL的TB 有RAL的TB RAL介绍 summary

扬帆数据结构算法之舟,启航C++探索征途——LeetCode深度磨砺:顺序表技术精进实践

人无完人,持之以恒,方能见真我!!! 共同进步!! 文章目录 顺序表练习1.移除数组中指定的元素方法1(顺序表)方法2(双指针) 2.删除有序数组中的重复项…

【Linux网络编程】网络层 | IP协议 | 网段划分 | 私有IP和公有IP | NAT技术

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 🌈个人主页: 南桥几晴秋 🌈C专栏: 南桥谈C 🌈C语言专栏: C语言学习系…

Web基础之什么是HTTP协议

Q:什么是HTTP协议? 概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。 特点: 1.基于TCP协议:面向连接,安全 2.基…

小米路由器IPv6 功能使用指南

本文不限于多层路由使用IPv6 的情况,提供解决IPv6 无法获取的更硬核的方法,需要有ssh 工具。(无安卓设备,测试环境win、mac、ios) 首先明确一点,就是如果想让你的设备得到GUA 地址,即访问 6.i…

element plus 使用 upload 组件达到上传数量限制时隐藏上传按钮

最近在重构项目,使用了 element plus UI框架,有个功能是实现图片上传,且限制只能上传一张图片,结果,发现,可以限制只上传一张图片,但是上传按钮还在,如图: 解决办法&…

汽车基础软件AutoSAR自学攻略(三)-AutoSAR CP分层架构(2)

汽车基础软件AutoSAR自学攻略(三)-AutoSAR CP分层架构(2) 下面我们继续来介绍AutoSAR CP分层架构,下面的文字和图来自AutoSAR官网目前最新的标准R24-11的分层架构手册。该手册详细讲解了AutoSAR分层架构的设计,下面让我们来一起学习一下。 Introductio…

MBTiles 爬取,读取,数据转换,发布

MBTiles :https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md 1.MBTiles是什么 MBTiles是一个在SQLite 数据库存储瓦片地图数据的标准,该标准的目的是即时传输和使用数据。 作为一个容器格式,MBTiles可以存储任何瓦片数据,…

机器学习笔记合集

大家好,这里是好评笔记,公主 号:Goodnote。本笔记的任务是解读机器学习实践/面试过程中可能会用到的知识点,内容通俗易懂,入门、实习和校招轻松搞定。 笔记介绍 本笔记的任务是解读机器学习实践/面试过程中可能会用到…

java_将数据存入elasticsearch进行高效搜索

使用技术简介: (1) 使用Nginx实现反向代理,使前端可以调用多个微服务 (2) 使用nacos将多个服务管理关联起来 (3) 将数据存入elasticsearch进行高效搜索 (4) 使用消息队列rabbitmq进行消息的传递 (5) 使用 openfeign 进行多个服务之间的api调用 参…

Gitlab-Runner配置

原理 Gitlab-Runner是一个非常强大的CI/CD工具。它可以帮助我们自动化执行各种任务,如构建、测试和部署等。Gitlab-Runner和Gitlab通过API通信,接收作业并提交到执行队列,Gitlab-Runner从队列中获取作业,并允许在不同环境下进行作…

SpringBoot项目实战(41)--Beetl网页使用自定义函数获取新闻列表

在Beetl页面中可以使用自定义的函数从后台新闻列表中获取新闻数据展示到页面上。例如我们可以从后台新闻表中获取新闻按照下面的格式展示&#xff1a; <li><a href"#">东亚非遗展即将盛妆亮相 揭起盖头先睹为快</a></li><li><a hre…

LayaAir3.2来了:性能大幅提升、一键发布安装包、支持WebGPU、3D导航寻路、升级为真正的全平台引擎

前言 LayaAir3的每一个分支版本都是一次较大的提升&#xff0c;在3.1彻底完善了引擎生态结构之后&#xff0c;本次的3.2会重点完善全平台发布相关的种种能力&#xff0c;例如&#xff0c;除原有的安卓与iOS系统外&#xff0c;还支持Windows系统、Linux系统、鸿蒙Next系统&#…

【力扣热题100】—— Day18.将有序数组转换为二叉搜索树

期末考试完毕&#xff0c;假期学习开始&#xff01; —— 25.1.7 108. 将有序数组转换为二叉搜索树 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵平衡二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] …

C++ Qt练习项目 QChar功能测试

个人学习笔记 代码仓库 GitCode - 全球开发者的开源社区,开源代码托管平台 新建项目 设计UI 1、拖入group box去掉名字 2、拖入2个LineEdit 3、拖入两个Label 4、拖入两个PushButton 5、点栅格布局 1、拖入GroupBox 2、拖入4个PushButton 3、点栅格布局 1、拖入GroupBo…