Kibana3中filter与query的区别

下面这段可以忽略:

这又快两个月的时间没有更新博客了,一方面是因为最近跳槽去了某浪某博技术保障部(当然还是从事日志收集处理的工作),工作强度变的比以前要大了,并且又开始学习一些新的东西,所以有点无暇顾及这个博客了,另外一方面,是自己也有点懈怠了,但感觉也是正常的,一直紧绷着可能也不太现实,希望后面可以再重新走上正路,去做一些事情。今天在我打开博客之后,欣喜的发现我的博客已经更新到48篇了,距离我当初定下50篇就拿它出去得瑟的目标已经不远了,但是我还是不太想拿它出去得瑟,而是想后面再做一个公众号什么的,当然现在还是停留在“想”的地步,这个后面再看看吧,姑且先放在这里吧。

这篇文章主要是来说明在kibana3中query和filter之间的区别,因为在使用kibana3的时候经常有种比较晕的感觉,就是分不清filter与query的区别。下面就谈谈我对于二者的理解:

filter与query的区别:

一个filter查询,实际上是在所有的document中查询一个内容“是”还是“否”,他被用于那些是精确值的字段。比如像下面这些查询场景:

.创建日期是否在2013-2014年之间。

.status字段是否包含published这个term。

.lat_lon是否在指定点的10km以内。

而一个query查询虽然和filter查询有些像,但是它查询的是:一个文档与查询内容的匹配程度。一些典型的场景如下:

1.最匹配“full text search”这个字符串的document。
2.包含单词run,但是也可以匹配runs,running,jog,或者sprint的document。
3.包含quick,brown,fox的document,但是返回相关度最高的那个document。
4.有很多的tag比如:lucene,search,java,但是返回相似度最高的那个document。

query查询得到是每个document与查询内容的相似度,并根据相似度为结果分配一个分数,这个分数用_score表示,并根据需要来对相似度进行排序。这种相似度的结果是适用于全文查询(full-text search),而不是得到一个准确的结果。

而kibana3中的query和filter就依次对应上述的query和filter,但这里注意一点,在kibana3的query中使用的是query string query,而我们经常在kibana的query框中使用的OR,AND这种语法其实也是query string query中的语法(详见:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html),同时还有一点,在query中其实是可以使用正则表达式的,而kibana中的filter其实就是filter查询,是做精确值查询,是不可以用正则表达式的。

而我们经常在kibana3中使用的term panel,其实是一个facets查询,facets这个东西在k4中被aggregation查询取代。facets查询实际上一种聚合查询,它可以对某一项内容进行聚合分组统计。它可以包含query和filter查询。

说了这么多有点晕:看个例子:

query框和filter中分别写的内容如下:

屏幕快照 2015-08-23 下午6.50.40

 

屏幕快照 2015-08-23 下午6.50.34

此时kibana3中发送的请求如下:

屏幕快照 2015-08-23 下午6.48.02

 

这是一个对interface这个field进行聚合的查询的例子:query框中写的内容在kibana中解析成了:一个query_string查询,同时带有两个filter:一个为时间filter,一个为term filter。这两个filter都必须为精确值。它表达意思是:

在所有的文档中的logLevel字段里检索“INFO”这个单词;(query-string:全文搜索)

同时要求满足两个过滤条件:(filter:精确值查询)

1:interface等于“com.rili.web.controller.TmpMessageController”。(这是一个terms filter)

2:@timestamp这个时间字段在1440323134357和1440326734358之间。(这是一个range filter)

同时对检索出来的文档,用interface字段来进行分组计数聚合(facets:聚合统计)。

最后我们得到了如下的结果:

屏幕快照 2015-08-23 下午6.49.49

Kibana3中filter与query的区别》上有2条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>