美文网首页elasticsearch
Elasticsearch查询语句语法

Elasticsearch查询语句语法

作者: Evelynzzz | 来源:发表于2017-08-28 12:17 被阅读558次

    使用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字段中包含testinform的记录:message:(test OR inform)
      如果省掉了OR,也就是message:(test inform),则使用设置的default_operator的值(其默认值为OR)。
    • 查询所有mes开头的字段中包含trust的记录:mes\*:trust*通配符前需要加反斜杠\
      这里有一个问题,搜索kafka.\*:trsutlog会报错,因为这里匹配的字段的数据类型,有字符串类型,数值类型,和未知类型。对于数值类型的字段,我们只能使用数字来搜索,使用字母等就会报错。所以kafka.\*:17432195就有结果了。
      再比如,当我们尝试查询beat.\*:5.1.2时就成功了,因为匹配的beat.hostnamebeat.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

    • WARNINGERROR可选,只是提高了相关性。
    • +INFO表示一定要包含INFO单词。
    • -DEBUG表示一定不能包含DEBUG单词。

    如果使用ANDORNOT操作符(也写作&&||!),则可以转化成:

    • WARNING OR ERROR AND INFO AND NOT DEBUG
    • 不正确的转化:(WARNING OR ERROR) AND INFO AND NOT DEBUG。这种情况下,必须至少匹配WARNINGERROR中一个。

    保留字符

    如果要匹配保留字符,则需要在字符前加反斜杠\。保留字符包括: + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /。比如:要搜索(1+1)=2,则使用语句\(1\+1\)\=2
    不过,<>是无法转义的,它们总是会创建一个范围查询。

    参考链接

    ES文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_ranges

    星期六, 26. 八月 2017 05:58下午

    相关文章

      网友评论

        本文标题:Elasticsearch查询语句语法

        本文链接:https://www.haomeiwen.com/subject/yanwdxtx.html