本文介绍不同方式的模糊查询。

通过查询语法进行模糊查询

在日志服务查询语法中,星号(*)代表多个任意字符的词,问号(?)代表单个字符的词。例如:abc*代表查询以abc开头的词。ab?d代表查询以ab开头、d结尾且中间包含单个字符的词, 详情请参见查询语法
说明 这种模糊查询的结果是不精确的,首先查询到命中的100个词,然后再查询这100个词命中的日志。所以如果你查询的模糊条件前缀很短且日志中超过100个词,那么查询结果是不精确的。通过这种查询语法,再结合not语句时,会发现某些查询条件未被过滤。例如:执行not abcd*查询语句,在结果中出现以abcd开头的词。

通过SQL的like语法进行精确的模糊查询

like语法满足标准的SQL like语法,在like语法中百分号(%)代表任意个字符。下划线 (_)代表单个字符。

示例:查询key满足abcd开头的所有日志,对应的查询分析语句如下所示。
* | select * from log where key like 'abcd%'

通过SQL的正则式函数进行模糊查询

通过正则式函数,可以在一个正则式中查询多个词。并且正则式的表达语义比like语法更强大,可以搜索满足数字的词以及满足特定字符的词等,详情请参见正则式函数

示例:
  • * | select * from log where regexp_like(key, abc*) 表示查询以abc开头的词。
  • * | select * from log where regexp_like(key, abc\d+) 表示查询以abc开头且后面跟着数字的词。
  • * | select * from log where regexp_like(key, abc[xyz])表示查询以abc开头且后面跟着xyz中的某个字符的词。