ToB企服应用市场:ToB评测及商务社交产业平台

标题: Elasticsarch:利用全文搜刮在 ES|QL 中进行过滤 - 8.17 [打印本页]

作者: 丝    时间: 2025-1-12 17:02
标题: 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 已经提供了文本过滤功能,包罗:

文本过滤很有效 - 但它在面向文本的用例中大概会有所不足:


多值字段

将 ES|QL 函数与多值字段结合利用大概比力棘手 - 函数在应用于多值字段时会返回 null。
假如你必要将函数应用于多值字段,则首先必要利用 MV_CONCAT 将值转换为单个值,以便可以匹配单个值:
  1. FROM logs
  2. | EVAL all_tags = MV_CONCAT(tags)
  3. | WHERE all_tags == "production"
复制代码

分析文本

分析器对于全文搜刮非常有效,因为它们允许转换文本。它们允许我们提取和修改索引文本,并修改查询,以便我们最大限度地找到我们正在探求的内容。
利用文本过滤时不会分析文本。这意味着比方,你必要在搜刮时匹配文本大小写,大概创建办理大概的大小写差别的正则表达式/模式。
在查找多语言文本(因此你不能利用  ASCII folding)、尝试匹配路径的部分(path hierarchy)或删除停用词(stopwords)时,这大概会变得更加成题目。

性能

模式匹配和正则表达式必要时间。Lucene 可以通过创建有限自动机来利用索引术语辞书进行匹配,从而完成大量繁重的工作,但这仍然是一个计算麋集型过程。
正如你在我们 8.17 版本博客中看到的那样,利用正则表达式进行文本过滤的速度大概比利用全文函数慢 50-1000 倍,具体取决于你的数据集。

进入全文函数

Elasticsearch 8.17 和 Serverless 引入了两个用于文本匹配的新函数:MATCH 和查询字符串(缩写为 QSTR)。
这些函数办理了文本过滤的一些限制:


MATCH 函数

MATCH 允许匹配特定字段上的值:
  1. FROM logs
  2. | WHERE match(message, "connection lost")
复制代码

Match 函数在底层利用 match query。这意味着当利用多个术语时,它将创建一个布尔查询,并利用 OR 作为组合它们的默认运算符。
Match 函数目前有一些限制:

8.17 版本存在以下限制:

我们正在积极努力解除这些限制,以便你可以充实利用 MATCH 的全部功能。你可以查看 Elastic Cloud Serverless 中的进度,它会不断更新我们的新工作。以下是针对上述限制的 serverless 当前状态:

查看最新文档以相识无服务器上 MATCH 的状态。

匹配运算符

匹配运算符 ( 相当于上面的匹配函数,但它提供了更简便的语法:
  1. FROM logs
  2. | WHERE message:"connection lost"
复制代码
利用 match 运算符更方便,但你可以利用对你更有意义的任何运算符。
match 运算符具有与 match 函数相同的限制。

查询字符串函数

查询字符串函数 (QSTR) 利用查询字符串语法对一个或多个字段实行复杂查询:
  1. FROM logs
  2. | WHERE qstr("message: 'connection lost' AND tags:'production'")
复制代码
查询字符串语法允许指定强盛的全文选项和操作,包罗含糊搜刮、邻近搜刮(proximity searches)和布尔运算符(boolean operators)的利用。有关更多详细信息,请参阅文档。
查询字符串是一个非常强盛的工具,但目前有一些限制,与 MATCH 函数非常相似:

与 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 上的状态。

下一步是什么?

全文搜刮将会发生什么?相当多的事情:

我们还在努力添加评分,因此你可以开始利用 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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4