Lucene查询语法

Published: 27 Dec 2018 Category: ES

最近要排查线上一个服务调度没有达到预期的问题,该服务的日志已经接入ELK,极大方便了日志查找。

一、Kibana日志查询语法

其查询语言基于Lucene查询语法。

默认情况下,and 比 or 具有更高优先级。

为了执行一个文本搜索,可以简单的输入一个文本字符串。例如,如果你想搜索web服务器的日志,你可以输入关键字”safari”,这样你就可以搜索到所有有关”safari”的字段

为了搜索一个特定字段的特定值,可以用字段的名称作为前缀。例如,你输入”status:200”,将会找到所有status字段的值是200的文档

为了搜索一个范围值,你可以用括号范围语法,[START_VALUE TO END_VALUE]。例如,为了找到状态码是4xx的文档,你可以输入status:[400 TO 499]

为了指定更改复杂的查询条件,你可以用布尔操作符 AND , OR , 和 NOT。例如,为了找到状态码是4xx并且extension字段是php或者html的文档,你可以输入status:[400 TO 499] AND (extension:php OR extension:html)

not response:200 将匹配response不是200的文档

response:* 将匹配所有存在response字段的文档

用引号引起来的一段字符串叫短语搜索。例如,message:”Quick brown fox” 将在message字段中搜索”quick brown fox”这个短语。如果没有引号,将会匹配到包含这些词的所有文档,而不管它们的顺序如何。这就意味着,会匹配到”Quick brown fox”,而不会匹配”quick fox brown”。

允许一个字段值在某个区间。[] 包含该值,{}不包含。

二、具体场景

2.1 统计不重复数据量

请教查询一列出现了多少不重复的数据。

例如访问日志的IP地址总数是多少,同一IP地址的其他访问不计算在内,可以理解为去重信息的展现。

解决: https://stackoverflow.com/questions/19102220/how-to-retrieve-unique-count-of-a-field-using-kibana-elastic-search