日志服务提供短语查询,用于精准匹配指定的短语。本文介绍短语查询的基本功能、语法、使用限制和示例。
查询类型
日志服务支持短语查询和非短语查询,详细说明如下表所示:
查询类型 | 说明 |
---|
非短语查询 | 采用分词法进行关键词匹配,即根据索引分词符将短语拆分为各个独立的关键词并进行检索。
例如开启全文索引且索引分词符包含空格,那么执行检索语句 "error warn" 时,日志服务将根据 error AND warn 语句进行检索。只要日志中包含关键词 error 和 warn ,该条日志就会被检索到。 |
短语查询 | 精准匹配包含指定短语的日志。
例如开启全文索引且索引分词符包含空格,那么执行短语查询语句 #"error warn" 时,只有日志中包含 error warn 这一个完整的短语时,该条日志才会被检索到。 |
基本语法
短语查询使用井号(#)作为标识符。详细说明,如下表所示:
查询方式 | 短语查询语法 | 非短语查询语法 |
---|
键值检索 | key:#"abc def"
| key: "abc def" ,等同于 key: abc AND key: def 。
|
全文检索 | #"abc def"
| "abc def" ,等同于 abc AND def 。
|
基本原理
短语查询的基本原理如下:
- 日志服务后端接收到短语查询请求后,先执行对应的非短语查询语句进行日志检索。例如执行短语查询语句
#"abc def"
,实际后端先执行 abc AND def
语句,完成分词匹配。说明
为避免数据量过大,执行短语查询时,日志服务后端将限制步骤 1 最多返回 10,000 条结果。
- 日志服务后端在上述检索结果中挑选出匹配目标短语的日志,并返回最终的检索结果。
如下图所示,紫色直方图为短语查询结果,蓝色直方图为非短语查询结果。
注意事项
- 短语查询最多选取 10,000 条日志进行短语匹配。
- 执行短语查询后,日志分布直方图展示的是非短语查询的结果。
- 针对短语查询结果,仅支持向前或向后的连续翻页操作,不支持随机跳转。
- 短语查询不支持搭配模糊查询。
- 短语查询语句必须添加半角双引号("")。
- 短语查询语句中不支持搭配 NOT 语句,即不支持
not #"abc def"
。 - 短语查询语句不支持搭配 SQL 语句,即不支持
#"abc def" | select ***
。因此使用短语查询时,也不支持快速分析功能。
继续扫描和翻页操作
当符合短语查询的日志数量达到您所指定的每页显示条数或单次扫描日志量达到 10,000 条时,系统将停止查询,并及时返回短语查询结果。如果页面上显示继续扫描或可进行翻页操作,表示此次短语查询仅扫描了部分日志,此时您可以单击继续扫描或进行翻页操作,继续执行短语查询。
- 符合短语查询的日志数量达到您所指定的每页显示条数
例如上图所示,日志总数为 598 条,扫描了 311 条日志时,符合短语查询的日志数量已达到您所指定的 20 条,因此系统停止查询,并返回此 20 条日志。当您单击继续扫描或进行翻页操作时,系统会自动在后续的日志中,执行第二次短语查询,并返回符合条件的日志。 - 短语查询时,每次最多选取 10,000 条日志进行短语匹配
每次进行短语查询时,最多取 10,000 条日志进行短语匹配。在翻页操作过程中,可能出现某一页所显示的日志数量少于每页指定要显示的日志数量但仍可继续扫描。此时说明符合非短语查询语句的日志数量多于 10,000 条,但在当前短语查询的 10,000 条日志中,满足短语查询条件的日志数量少于指定要显示的日志数量。
例如日志总数为 40,000 条,并且指定每页显示 100 条日志。当您执行一次短语查询后,当前页面仅显示 40 条日志却仍可以继续扫描,则表示当前 10,000 条日志中仅有 40 条日志满足短语查询条件。当您继续执行翻页操作时,日志服务会自动在后续的 10,000 条日志中,执行第二次短语查询,并返回符合条件的日志。
查询示例
示例1
查询包含 open failed
的日志。非短语查询和短语查询这两种方式的结果如下所示。
说明
本示例已开启全文索引且索引分词符包含空格。关于索引的详细说明,请参考配置索引。
- 非短语查询
执行 "open failed"
语句,那么同时包含 open
和 failed
的日志都将被查询到。
- 短语查询
执行 #"open failed"
语句,日志服务将匹配完整的短语 open failed
。
示例2
查询 result
字段值中包含 "shard_id":0
的日志。非短语查询和短语查询这两种方式的结果如下所示。
说明
- 本示例已开启
result
字段的键值索引且索引分词符包含半角冒号(:)。关于索引的详细说明,请参考配置索引。 - 本示例的查询关键词中包含双引号("),因此需在检索语句中对双引号(")进行转义,例如
"\"shard_id\"
。
- 非短语查询
执行 result: "\"shard_id\":0"
语句,那么 result
字段值中同时包含关键词 shard_id
和 0
的日志都将被查询到,不能确保精准匹配 "shard_id":0
的日志。
- 短语查询
执行 result: #"\"shard_id\":0"
语句,日志服务将精准匹配 result
字段中完整的短语 "shard_id":0
。