您的位置:首页 > 产品设计 > UI/UE

查询和过滤器(queries and filters)

2014-06-04 14:50 302 查看
虽然我们已经了解了Query DSL,事实上DSL有两种表现形式:Query DSL和Filter DSL。查询条目和过滤条目是很相似的,只不过在目的上略有不同。

filter对每个document提出yes或者no的问题,常常作用于包含确切值的field:

1:名为created的创建日期是否在2013到2014之间?

2:名为status的状态是否包括”published“?

3:名为lat_lon是否在距离指定的点的10KM之内?

查询是和过滤是相似的,只不过提出的问题是:查询条件匹配document的层度

典型的query的使用方法是找到document:

1:查询要匹配关键字:full text search

2:包含关键字run,但也可能匹配runs,runing,jog或者spring

3:包口关键字quick,brown和fox——在document中这三个关键字距离越近,那么document和查询条件的关联度就越高

4:被关键字lucene,search或者java标记的document——标签越多且符合这三个的document,关联度就越高。

查询是要计算查询条件和document的关联度的,并且把关联度赋值给_score,这个被用来对结果排序的依据。这个关联度的概念是很适合全文检索的,但是却少产生完全正确的答案。

性能差异(performance differences)

很多的过滤器的输出——是一个简单的符合过滤器的document列表——能够快速的计算并且缓存在内存中,每个document仅仅使用一个bit。因此缓存过滤可以在随后的请求中有效的重用。

查询不单找到匹配的document,还要计算每个document的关联度,这通常使得查询要比过滤器显得笨重。并且查询的结果也不能缓存。

幸好有了inverted index,对一些document的简单查询的性能很好甚至在对于百万级的documen优于缓存过滤器。但是,通常情况下,缓存过滤器总是比查询性能要好的。

过滤器的目的就是减少已经被查询检测过的document的数量。

什么时候该选择哪一个(when to use which)

一般情况下对full text搜索或者任何的条件会影响到关联度的时候使用查询条目,其他情况使用过滤器。

原文:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_queries_and_filters.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: