正在加载

用于搜索的 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 条件中包含的任何搜索函数都会影响相关性评分。这意味着每次出现 MATCHQSTRKQL 都会影响分数。
  • 非搜索函数的过滤操作(例如范围条件和完全匹配)不会影响分数。
  • 包含 METADATA _score 不会自动按相关性对结果进行排序。您必须显式使用 SORT _score DESCSORT _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 中搜索的当前限制
© . All rights reserved.