用于搜索的 ES|QL
Elastic Stack Serverless
本页概述了如何将 ES|QL 用于搜索用例。
想要开始使用实践教程吗?请查看 使用 ES|QL 搜索和过滤。
下表总结了 ES|QL 中可用的关键搜索功能以及它们推出的时间。
功能 | 可用版本 | 描述 |
---|---|---|
全文搜索函数 | 8.17 | 使用 MATCH 函数或匹配运算符 (: ) 执行基本文本搜索 |
查询字符串函数 | 8.17 | 使用查询字符串语法,使用 QSTR 执行复杂查询 |
相关性评分 | 8.18/9.0 | 使用 METADATA _score 计算相关性并按相关性排序 |
增强的匹配选项 | 8.18/9.0 | 使用 MATCH 函数的附加参数配置文本搜索 |
Kibana 查询语言 | 8.18/9.0 | 将 Kibana 查询语言与 KQL 函数一起使用 |
语义搜索 | 8.18/9.0 | 对 semantic_text 字段类型执行语义搜索 |
混合搜索 | 8.18/9.0 | 将词汇和语义搜索方法与自定义权重相结合 |
ES|QL 可用于简单过滤和基于相关性的搜索
- 过滤 会删除不匹配的文档,而不计算相关性评分
- 搜索 既会过滤文档,也会根据文档与查询的匹配程度对其进行排序
请注意,过滤比搜索更快,因为它不需要进行评分计算。
要首先获取最相关的结果,您需要使用 METADATA _score
并按分数排序。例如
FROM books METADATA _score
| WHERE match(title, "Shakespeare") OR match(plot, "Shakespeare")
| SORT _score DESC
在 ES|QL 中使用相关性评分时
- 如果在查询中不包含
METADATA _score
,则只会执行过滤操作,而不会进行相关性计算。 - 当您包含
METADATA _score
时,WHERE
条件中包含的任何搜索函数都会影响相关性评分。这意味着每次出现MATCH
、QSTR
和KQL
都会影响分数。 - 非搜索函数的过滤操作(例如范围条件和完全匹配)不会影响分数。
- 包含
METADATA _score
不会自动按相关性对结果进行排序。您必须显式使用SORT _score DESC
或SORT _score ASC
才能按相关性对结果进行排序。
ES|QL 为 match
提供了两种语法选项,它们复制了查询 DSL 中 match 查询的功能。
使用紧凑运算符语法 (:
) 进行使用默认参数的简单文本匹配。
FROM logs | WHERE message: "connection error"
当您需要传递附加参数时,请使用 match()
函数语法
FROM products | WHERE match(name, "laptop", { "boost": 2.0 })
这些全文函数解决了 ES|QL 中文本过滤的几个关键限制
- 它们直接在多值字段上工作,当多值字段中的任何值与查询匹配时,都会返回结果
- 它们利用分析器,确保查询使用与索引数据相同的过程进行分析(启用不区分大小写的匹配、ASCII 折叠、停用词删除和同义词支持)
- 它们性能很高,使用 Lucene 索引结构而不是模式匹配或正则表达式来定位数据中的术语
有关更多背景信息,请参阅此博客:在 ES|QL 中引入全文过滤。
有关使用 match 的更多高级选项,请参阅 匹配字段参数。
这些查询匹配文档,但不会自动按相关性排序。要首先获取最相关的结果,您需要使用 METADATA _score
并按分数排序。有关更多信息,请参阅相关性评分。
qstr
函数 提供与查询 DSL 的 query_string
查询相同的功能。这适用于高级用例,例如通配符搜索、跨多个字段的搜索等。
FROM articles METADATA _score
| WHERE QSTR("(new york city) OR (big apple)")
| SORT _score DESC
| LIMIT 10
有关完整详细信息,请参阅 查询 DSL query_string
文档。
使用 KQL 函数 在您的 ES|QL 查询中使用 Kibana 查询语言
FROM logs*
| WHERE KQL("http.request.method:GET AND agent.type:filebeat")
当从使用 KQL 的 Kibana Discover、Dashboard 或其他界面转换查询时,kql
函数很有用。这将允许您逐步将查询迁移到 ES|QL,而无需一次性重写所有查询。
您可以使用与全文搜索相同的匹配语法,对 semantic_text
字段类型执行语义搜索。
此示例使用匹配运算符 :
FROM articles METADATA _score
| WHERE semantic_content: "What are the impacts of climate change on agriculture?"
| SORT _score DESC
此示例使用匹配函数
FROM articles METADATA _score
| WHERE match(semantic_content, "What are the impacts of climate change on agriculture?")
| SORT _score DESC
混合搜索 将词汇和语义搜索与自定义权重相结合
FROM books METADATA _score
| WHERE match(semantic_title, "fantasy adventure", { "boost": 0.75 })
OR match(title, "fantasy adventure", { "boost": 0.25 })
| SORT _score DESC
有关已知限制的列表,请参阅 ES|QL 限制。
- 使用 ES|QL 搜索和过滤:ES|QL 中搜索工具的入门实践教程
- 使用 semantic_text 进行语义搜索:了解如何使用
semantic_text
字段类型
- ES|QL,你所知道的用于搜索:介绍评分和语义搜索
- 在 ES|QL 中引入全文过滤:ES|QL 文本过滤功能的概述