[ElasticSearch2.x]Queries vs Filters

1. 查询与过滤

Elasticsearch 使用的查询语言(DSL) 拥有一套查询组件(queries),这些组件可以以无限组合的方式进行搭配(mixed and matched)。这套组件可以在以下两种上下文中使用:过滤上下文(filtering context)和查询上下文(query context)。

当在过滤上下文(filtering context)中使用 时,该查询被设置成一个“不评分”或者“过滤”的查询。换句话说,这个查询只是简单的问一个问题:“这篇文档是否匹配?”。回答也是非常的简单,是或者不是。

  • created 时间是否在 2013 与 2014 这个区间?
  • status 字段是否包含 published 这个词项?
  • lat_lon 字段表示的位置是否在指定点的 10km 范围内?

当在查询上下文中使用时,查询就变成了一个“评分”的查询。和不评分的查询类似,也要去判断这个文档是否匹配,同时它还需要判断这个文档匹配程度如何(相关度)。

此查询的典型用法是用于查找以下文档:

  • 查找与 full text search 这个词语最佳匹配的文档
  • 包含 run 这个词,也能匹配 runs,running,jog 或者 sprint
  • 包含 quick, brown 和 fox 这几个词,它们之间距离越近,文档相关性越高
  • 标有lucene, search 或者 java 标签, 含有标签越多, 相关性越高

一个评分查询计算每一个文档与此查询的 相关程度,同时将这个相关程度赋值给一个相关性变量 _score,然后使用这个变量按照相关性对匹配到的文档进行排序。相关性的概念是非常适合全文搜索的情况,因为全文搜索几乎没有完全 “正确” 的答案。

注意

以前版本中,查询(queries)和过滤器(filters)是Elasticsearch中两个相互独立的组件。 从Elasticsearch 2.0版本开始,过滤器就已经删除了,同时所有查询(queries)都获得了不评分查询的能力。

然而,为了简洁与清晰,我们将使用“过滤器”术语来表示在非评分过滤上下文中使用的查询。 您可以将“过滤器”,“过滤查询”和“非评分查询”等术语视为相同的。

类似地,如果术语“查询”在没有限定符的情况下单独使用,我们指的是“评分查询”。

2. 性能差异

过滤查询是简单的包含/排除检查,这使得它们计算速度非常快。 当至少有一个过滤查询的结果是“稀疏”的(匹配到少数文档)时,有很多不同优化方法可以做,并且非评分查询经常被使用来缓存在内存中,以便更快的访问(ere are various optimizations that can be leveraged when at least one of your filtering query is "sparse" (few matching documents), and frequently used non-scoring queries can be cached in memory for faster access.)。

相反,评分查询不仅要找到匹配的文档,还要计算每个文档的相关度,这通常使它们比非评分查询更重,更缓慢。 此外,查询结果不可缓存。

由于倒排索引的存在,一个简单的评分查询(scoring query)在只匹配几个文档时可能会比过滤数百万文档的过滤器(filter)更好。 然而,一般来说,过滤器比评分查询性能更优异,并且表现的很稳定。

过滤的目标是减少那些需要通过评分查询(scoring queries)进行检查的文档。

3. 如何选择查询与过滤

通常的规则是,使用 查询(query)语句来进行 全文搜索 或者 有对于任何影响相关性得分的条件。除此以外的情况都使用过滤(filters)(As a general rule, use query clauses for full-text search or for any condition that should affect the relevance score, and use filters for everything else)。

原文连接:https://www.elastic.co/guide/en/elasticsearch/guide/current/_queries_and_filters.html#_queries_and_filters

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/632177

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。