Elasticsearch查询语句语法
使用KIBANA查询ES中的数据
在搜索时,一定要选择合理的时间范围,这个时间范围是基于创建索引模式时选择的时间字段。比如@timestamp
。
另外一个小提示:默认情况下,搜索结果列表的上方会显示一个柱状图。可以点击左下角的小箭头,查看其他的信息,比如搜索结果对应的ES请求主体等。
Elasticsearch查询语句语法
查询语句包含一系列词语(term
)和操作符。一个词语可以是一个单词,比如INFO
。
也可以是双引号包围的一个短语,比如"INFO make"
,这种情况下会搜索这整个短语,按照单词在短语中的顺序。
指定字段名称
默认情况下,会在所有字段中匹配要搜索的词语。或者我们也可以指定要搜索的字段。比如以下查询:
- 查询
message
字段中包含INFO
单词的记录:message:INFO
- 查询
message
字段中包含INFO make
短语的记录:message:"INFO make"
。
在这个例子中,如果搜索message:"make INFO"
就会提示未找到结果
,因为message
字段并不包含make INFO
这个短语。(稍微注意搜索栏的输入内容和ES查询请求中语句的差别) - 查询
message
字段中包含test
或inform
的记录:message:(test OR inform)
。
如果省掉了OR
,也就是message:(test inform)
,则使用设置的default_operator
的值(其默认值为OR
)。 - 查询所有
mes
开头的字段中包含trust
的记录:mes\*:trust
。*
通配符前需要加反斜杠\
。
这里有一个问题,搜索kafka.\*:trsutlog
会报错,因为这里匹配的字段的数据类型,有字符串类型,数值类型,和未知类型。对于数值类型的字段,我们只能使用数字来搜索,使用字母等就会报错。所以kafka.\*:17432195
就有结果了。
再比如,当我们尝试查询beat.\*:5.1.2
时就成功了,因为匹配的beat.hostname
和beat.version
字段都是字符串类型的。 - 查询
message
字段值非空的记录:_exists_:message
。
使用通配符
通配符搜索适用于单个单词中,使用?
替换单个字符,*
替换零个或多个字符。比如:tags:trust* OR tes?
的查询结果如下。注意这个查询中的tes?
是用于匹配所有字段的内容。如果要限定tags
字段,则应该查询tags:(trust* OR tes?)
。
另外,使用通配符查询是很占用内存的。
正则表达式
比如查询tags:/trust*/
。具体正则表达式语法参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html#regexp-syntax。
模糊操作符
可以搜索相似的词语,比如trsut~
,同样会匹配trust
。
取值范围
范围可以是日期,数值,或者字符串字段的范围。闭区间:[min TO max]
;开区间:{min TO max}
;也可以结合在一起:[min TO max}
。
- 日期:
date:[2012-01-01 TO 2012-12-31]
- 数值:
count:[1 TO 5]
- 字符串:
tag:{alpha TO omega}
- 不指定最小值或最大值:
-
count:[10 TO *]
,也可以写成count:>=10
-
date:{* TO 2012-12-31}
: date在2012-12-31之前(这个我测试了,查不到预想的结果)
-
Boolean操作符
比如ERROR WARNING +INFO -DEBUG
:
-
WARNING
和ERROR
可选,只是提高了相关性。 -
+INFO
表示一定要包含INFO
单词。 -
-DEBUG
表示一定不能包含DEBUG
单词。
如果使用AND
,OR
和NOT
操作符(也写作&&
,||
,!
),则可以转化成:
WARNING OR ERROR AND INFO AND NOT DEBUG
- 不正确的转化:
(WARNING OR ERROR) AND INFO AND NOT DEBUG
。这种情况下,必须至少匹配WARNING
和ERROR
中一个。
保留字符
如果要匹配保留字符,则需要在字符前加反斜杠\
。保留字符包括: + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /
。比如:要搜索(1+1)=2
,则使用语句\(1\+1\)\=2
。
不过,<
和>
是无法转义的,它们总是会创建一个范围查询。
参考链接
星期六, 26. 八月 2017 05:58下午