[ElasticSearch2.x]Queries vs Filters

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 1. 查询与过滤Elasticsearch 使用的查询语言(DSL) 拥有一套查询组件(queries),这些组件可以以无限组合的方式进行搭配(mixed and matched)。

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

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
缓存 Java
Elasticsearch Query DSL之Compound queries(复合查询)
Elasticsearch Query DSL之Compound queries(复合查询)
Elasticsearch Query DSL之Compound queries(复合查询)
|
存储 JSON 缓存
Elasticsearch Query DSL之Term level queries
Elasticsearch Query DSL之Term level queries
Elasticsearch Query DSL之Term level queries
|
存储 自然语言处理 算法
Elasticsearch Query DSL之全文检索(Full text queries)上篇
Elasticsearch Query DSL之全文检索(Full text queries)上篇
Elasticsearch Query DSL之全文检索(Full text queries)上篇
|
自然语言处理 Java 关系型数据库
Elasticsearch Query DSL之全文检索(Full text queries)下篇
Elasticsearch Query DSL之全文检索(Full text queries)下篇
|
26天前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
92 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
3月前
|
数据可视化 Docker 容器
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
这篇文章提供了通过Docker安装Elasticsearch和Kibana的详细过程和图解,包括下载镜像、创建和启动容器、处理可能遇到的启动失败情况(如权限不足和配置文件错误)、测试Elasticsearch和Kibana的连接,以及解决空间不足的问题。文章还特别指出了配置文件中空格的重要性以及环境变量中字母大小写的问题。
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
|
3月前
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。
|
3月前
|
Ubuntu Oracle Java
如何在 Ubuntu VPS 上安装 Elasticsearch
如何在 Ubuntu VPS 上安装 Elasticsearch
35 0
|
3月前
|
存储 Ubuntu Oracle
在Ubuntu 14.04上安装和配置Elasticsearch的方法
在Ubuntu 14.04上安装和配置Elasticsearch的方法
42 0