社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Elasticsearch

Elasticsearch 查询语句语法

Evelynzzz • 4 年前 • 301 次点击  
阅读 7

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字段中包含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*/。具体正则表达式语法参考:www.elastic.co/guide/en/el…

模糊操作符

可以搜索相似的词语,比如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文档:www.elastic.co/guide/en/el…

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51016
 
301 次点击