`
weitao1026
  • 浏览: 1048263 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Elasticsearch DSL中Query与Filter的区别

 
阅读更多

Elasticsearch支持很多查询方式,除了通过9300(默认)端口通过TCP协议进行查询,另一种就是DSL,它是把请求写在JSON里面,然后进行相关查询。

一个DSL例子

GET _search
{
  "query": { 
    "bool": { 
      "must": [
        { "match": { "name":   "Jim" }}, 
        { "match": { "city": "Guangzhou" }}  
      ],
      "filter": [ 
        { "term":  { "weight": "60" }}, 
        { "range": { "age": { "gte": "18" }}} 
      ]
    }
  }
}

查询的种类

Elasticsearch中的DSL主要由两部分组成:

Leaf query Cluase 叶查询子句:
这种查询可以单独使用,针对某一特定的字段查询特定的值,比如match、term、range等

Compound query Cluase复合查询子句:
这种查询配合其他的叶查询或者复合查询,用于在逻辑上,组成更为复杂的查询,比如bool


Query与Filter

查询在Query查询上下文和Filter过滤器上下文中,执行的操作是不一样的:

1、查询上下文:是在使用query进行查询时的执行环境,比如使用search的时候。
在查询上下文中,查询会回答这个问题——“这个文档是否匹配这个查询,它的相关度高么?
ES中索引的数据都会存储一个_score分值,分值越高就代表越匹配。即使lucene使用倒排索引,对于某个搜索的分值计算还是需要一定的时间消耗。

2、过滤器上下文:在使用filter参数时候的执行环境,比如在bool查询中使用Must_not或者filter
在过滤器上下文中,查询会回答这个问题——“这个文档是否匹配?
它不会去计算任何分值,也不会关心返回的排序问题,因此效率会高一点。
另外,经常使用过滤器,ES会自动的缓存过滤器的内容,这对于查询来说,会提高很多性能。

总而言之:
1 查询上下文:查询操作不仅仅会进行查询,还会计算分值,用于确定相关度;

2 过滤器上下文:查询操作仅判断是否满足查询条件,不会计算得分,查询的结果可以被缓存。

所以,根据实际的需求是否需要获取得分,考虑性能因素,选择不同的查询子句。

 

分享到:
评论

相关推荐

    elasql:通用SQL到Elasticsearch DSL查询转换器

    通用SQL到Elasticsearch DSL查询转换器。 专为设计 地位 实验性-加入我们,骇客入侵! 安装 npm install elasql 用法 const convert = require('elasql').convert convert('SELECT id,name FROM shop WHERE shop_id...

    Elasticsearch权威指南(中文).pdf

    1. **节点(Node)**:Elasticsearch中的基本工作单元,每个节点存储和处理一部分数据。 2. **集群(Cluster)**:由一个或多个节点组成,共享相同的数据并共同参与集群的操作。 3. **索引(Index)**:类似于数据库中的表...

    elasticsearch kibana简单查询讲解

    Elasticsearch Kibana 提供了多种搜索方式,包括 query string search、query DSL、query filter、full-text search、phrase search 和 highlight search 等。 ### 1. Query String Search Query String Search 是...

    elasticsearch的使用

    elasticsearch的使用 query DSL /Filter DSL 语句的对比

    es:使用DSL进行Elasticsearch查询

    包es提供了Elasticsearch查询DSL。 关于 不建议使用Go“点导入”,但是,如果您想在这种情况下利用点导入的表现力,我建议将此逻辑抽象为更高级别的查询功能和程序包。 我不建议直接将其点导入其他包中。 例子 丽皮...

    es-dsl-cheatsheet:Elasticsearch 查询 DSL 备忘单

    **Elasticsearch 查询 DSL 备忘单** Elasticsearch(ES)是一种强大的分布式搜索和分析引擎,广泛应用于日志分析、信息检索、实时数据分析等领域。它的查询DSL(Domain Specific Language)是用于构建复杂搜索和...

    elasticsearch java操作的api实例

    - **Query DSL**:Elasticsearch支持一种名为Query DSL的JSON风格查询语言。Java API中的`QueryBuilder`接口提供了一系列方法来构建这些查询。例如,我们可以使用`MatchQueryBuilder`进行全文本匹配,`...

    Mastering ElasticSearch.pdf

    同时,ElasticSearch提供了filter上下文和query上下文来分别优化查询结果的相关性和缓存能力。 4. **内部工作机制**:ElasticSearch的内部工作机制复杂而高效,包括文档是如何被索引和存储的,集群节点和分片如何...

    elasticsearch数据库下载、配置、使用案例PPT模板

    ### Elasticsearch数据库的下载、配置与使用案例 #### 一、Elasticsearch数据库的下载与安装 **1.1 下载与解压** - **下载Elasticsearch:** - **官方网站下载:** 访问Elasticsearch官方网站...

    52.(leaflet篇)leaflet多边形空间查询(ElasticSearch技术实现).zip

    在本教程中,我们将深入探讨如何使用Leaflet.js库与Elasticsearch集成,实现多边形空间查询。Leaflet是一个轻量级的JavaScript库,专为Web地图开发设计,而Elasticsearch则是一个强大的分布式搜索和分析引擎,支持...

    Elasticsearch 案例

    - **关键词搜索**:在Elasticsearch中,我们可以使用`match`或`query_string`查询来实现关键词搜索。例如,搜索关键词"example",可以写成`"match": { "field": "example" }`或者`"query_string": { "query": ...

    查询DSL-复合查询.docx

    Elasticsearch 7.6 中的查询DSL(Domain Specific Language)是一种强大的查询语言,允许用户构建复杂的查询逻辑。查询DSL由多种查询类型组成,每种查询类型都有其特定的用途和应用场景。 查询上下文和过滤器上下文...

    阿里云 专有云企业版 V3.5.2 Elasticsearch 技术白皮书 - 20180831.pdf

    Elasticsearch提供了多种查询语言,包括Query String Syntax、Query DSL、Filter DSL等,以满足不同场景下的搜索需求。 Elasticsearch聚合分析 Elasticsearch提供了多种聚合分析功能,包括 terms聚合、histogram...

    django-elasticsearch:或者我如何学会停止使用 elasticutils 并开始喜欢 elasticsearch-py 和 elasticsearch-dsl-py

    在升级过程中,需要注意的是`elasticsearch-py`和`elasticsearch-dsl-py`的API与`elasticutils`有所不同,可能需要调整代码以适应新的接口。同时,由于`elasticsearch-dsl-py`的DSL特性,你可能需要重新设计查询逻辑...

    Java操作Elasticsearch

    **Java操作Elasticsearch**是将Java编程语言与流行的全文搜索引擎Elasticsearch相结合,用于高效地执行各种数据操作。Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎,能够处理大量的数据并提供实时...

    安装教程总结_Elasticsearch

    本文将对Elasticsearch的安装过程进行总结,包括下载、安装插件、启动、接口测试、可视化页面的使用以及与其他搜索引擎和数据库的对比。 ### 一、下载Elasticsearch 首先,你需要从官方网站下载适合你操作系统的...

    Laravel开发-scout-elasticsearch

    在本文中,我们将深入探讨如何在Laravel框架中使用Scout和Elasticsearch进行高效的全文搜索。Laravel Scout 是一个优雅的解决方案,它为Laravel应用程序提供了开箱即用的搜索功能,而Elasticsearch则是一个强大的...

    elastic search in action

    - **文档(Document)**:在Elasticsearch中,文档是最小的数据单位,通常为JSON格式。 - **类型(Type)**:定义一组具有相同字段结构的文档集合。随着Elasticsearch的发展,类型的概念逐渐被弱化,新版中已被移除。 - ...

    Demo.zip_DEMO_YOG_查询es

    在IT行业中, Elasticsearch(ES)是一种广泛使用的分布式搜索引擎,它基于Lucene库,以其高效、可扩展和实时的搜索能力而闻名。在这个名为"Demo.zip_DEMO_YOG_查询es"的压缩包文件中,我们可以推测它包含了演示如何...

Global site tag (gtag.js) - Google Analytics