`

elasticsearch 滚动查询

阅读更多
在Elasticsearch中,一次查询只能得到一次独立的结果,在分页中这是很不方便的,当用Elasticsearch进行第n页查询的时候,Elasticsearch内部是查询了从n页的所有数据,只是在返回的时候抛弃了前面的n-1页的内容。这样对查询一个大量数据的时候是非常不方便的。但Elasticsearch提供了滚动API来解决此问题,这有点像数据库中的游标。

滚动查询请求

    滚动是不适合实时用户请求,而是适合处理大量的数据,例如为了重建一个索引到一个新的索引中。

    官方客户端只支持Perl和Python。

    注意:从 scroll 请求返回的结果反映了在查询发生时刻的索引状态,就像一个快照。后续的对文档的改动(索引、更新或者删除)都只会影响后面的搜索请求。

    为了使用 scroll,在第一次搜索请求的查询中指定 scroll 参数,它告诉 Elasticsearch 需要保持搜索的上下文环境多长时间。例如:

滚动查询请求

    滚动是不适合实时用户请求,而是适合处理大量的数据,例如为了重建一个索引到一个新的索引中。

    官方客户端只支持Perl和Python。

    注意:从 scroll 请求返回的结果反映了在查询发生时刻的索引状态,就像一个快照。后续的对文档的改动(索引、更新或者删除)都只会影响后面的搜索请求。

    为了使用 scroll,在第一次搜索请求的查询中指定 scroll 参数,它告诉 Elasticsearch 需要保持搜索的上下文环境多长时间。例如:

请求:POST http://localhost:9200/secilog/log/_search?scroll=1m&pretty

参数:

{
    "query": {
        "term": {
            "message": "text"
        }
    }
}

Time	Units说明
y	Year
M	Month
w	Week
d	Day
h	Hour
m	Minute
s	Second
返回的结果:

{
  "_scroll_id" : "cXVlcnlBbmRGZXRjaDsxOzExMjo1azRqYldqOVJmYTdIdlVWSk94X2FnOzA7",
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.4232868,
    "hits" : [ {
      "_index" : "secilog",
      "_type" : "log",
      "_id" : "10",
      "_score" : 0.4232868,
      "_source" : {
        "type" : "file",
        "message" : "secilog is a log real-time analyse software,it's full text search is based on Elasticsearch "
      }
    } ]
  }
}
    从返回值中可以看出上面的请求结果中包含一个 scroll_id,这个 ID 可以被传递给 scroll API 来检索下一个批次的内容。在下一次查询中的实例:

请求:POST http://localhost:9200/_search/scroll?pretty

参数:

{
   "scroll" : "1m", 
   "scroll_id" : "cXVlcnlBbmRGZXRjaDsxOzExMjo1azRqYldqOVJmYTdIdlVWSk94X2FnOzA7"
}
返回的结果:

{
  "_scroll_id" : "cXVlcnlBbmRGZXRjaDsxOzExMzo1azRqYldqOVJmYTdIdlVWSk94X2FnOzA7",
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.4232868,
    "hits" : [ ]
  }
}
    每一次调用scroll查询返回下一批的结果,直到返回为空("hits" : [ ]),表示查询完成。

注意:第一次搜索请求和每个后续的滚动请求返回一个新的 _scroll_id,只有最新的 _scroll_id 才能被使用。

如果请求指定了聚合(aggregation),只有第一次搜索的返回结果才会包含聚合结果。

当使用_doc排序查询的时候,滚动的效率是最高的,当你向遍历所有的文档,且无顺序要求,这是效率最高的方式:

请求:POST localhost:9200/_search?scroll=1m

参数:

{
  "sort": [
    "_doc"
  ]
}
搜索的时效性

    滚动scroll 参数告诉Elasticsearch应保持多长时间的搜索。这个值并不需要长到可以处理所有的数据,只要够处理前一批次结果的时间。每一个滚动请求设置一个新的有效时间。

    一般来说,合并过程优化的背景是通过合并小段来创建一个新的大段来优化索引,然后删除小段。在执行滚动期间仍可以进行索引优化,但在打开搜索上下文时当小段仍然在使用候的时候会阻止小段的删除。这就是为什么后来对文档的改变不会影响滚动搜索请求的结果。

提示:保持较旧的段,意味着需要更多的文件句柄。确保在节点中已配置访问文件句柄的参数足够用。

你可以通过stats API检查打开了多少搜索上下文。

请求:GET http://localhost:9200/_nodes/stats/indices/search?pretty

清除滚动接口

    当滚动超时的时候会自动删除搜索上下文,然而保持滚动打开会产生成本,所以 scrolls 当scroll不再被使用的时候需要用 clear-scroll 显式地清除。

请求:DELETE localhost:9200/_search/scroll

参数:

{
    "scroll_id" : ["cXVlcnlBbmRGZXRjaDsxOzExMzo1azRqYldqOVJmYTdIdlVWSk94X2FnOzA7"]
}
可以同时清除多个id

{
    "scroll_id" : ["cXVlcnlBbmRGZXRjaDsxOzExMzo1azRqYldqOVJmYTdIdlVWSk94X2FnOzA7","qYldqOVJmYTdIdl"]
}
或者使用_all参数清除所有id

DELETE localhost:9200/_search/scroll/_all
分享到:
评论

相关推荐

    escroll:遵循curl精神的elasticsearch滚动查询命令客户端。 用于通过字段URI过滤进行数据提取的Shell工具

    使用escroll消除了编写定制滚动搜索脚本以从常规elasticsearch查询返回每个结果的耗时任务。 它是用于从Elasticsearch提取大数据的安全且可重复使用的工具。 用法 争论 旗帜 例子 描述 -url ...

    ElasticSearch Java API 中文文档

    8. **查询DSL (Query DSL)**: 详细介绍了ElasticSearch的查询语言(Domain Specific Language),包括全量查询(Match All Query)、全文查询(Full Text Queries)、词项级查询(Term level queries)、复合查询...

    elasticsearch-head 可视化界面

    7. **滚动刷新**:对于持续增长的数据,Elasticsearch-Head支持自动或手动刷新,保持数据的实时性。 8. **安全性**:支持基本的HTTP认证,增强集群的安全防护。 ### 使用场景 Elasticsearch-Head适用于多种场景,...

    基于Elasticsearch Java API的参考手册

    **Elasticsearch Java API详解** Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎,广泛应用于大数据领域的实时分析和信息检索。Java API是Elasticsearch官方提供的与Elasticsearch服务器进行交互的...

    elasticsearch-7.2.0

    根据提供的信息,我们可以深入探讨Elasticsearch 7.2.0的相关知识点,包括其更新特点、功能改进以及在实际应用中的优势。 ### Elasticsearch 7.2.0简介 Elasticsearch是一款基于Lucene的分布式搜索与分析引擎,...

    Elasticsearch 34道面试题和答案.docx

    Elasticsearch 面试题和答案 本文档总结了 34 道 Elasticsearch 面试题和答案,涵盖了 Elasticsearch 的基础概念、索引架构、集群管理、性能优化、倒排索引、master 选举等多个方面。 一、Elasticsearch 基础...

    spring-data-elasticsearch

    4. 集成Elasticsearch的特定功能:Spring Data Elasticsearch集成了Elasticsearch的许多特定功能,例如多租户性、过滤器、滚动浏览(Scrolling)、扫描(Scanning)等。这些特性允许开发者在使用Spring Data ...

    elasticsearch7.9+elasticsearch-head-master+node-v12.18.3

    3. **SQL支持**:7.9版本进一步完善了对SQL查询的支持,使得对Elasticsearch的操作更加直观和方便。 4. **索引生命周期管理(ILM)**:ILM允许用户定义索引的生命周期策略,自动处理索引的滚动、合并和删除,简化了...

    elasticsearch-7.10.2、kibana-7.10.2 Mac 版.zip

    Elasticsearch和Kibana是两个非常重要的开源工具,它们在大数据分析和日志管理领域发挥着关键作用。这个zip文件包含的是Elasticsearch 7.10.2和Kibana 7.10.2的Mac版安装包,为苹果电脑用户提供了强大的搜索和可视化...

    Elasticsearch server book

    这部分内容会讲解如何安装和启动Elasticsearch服务器,以及如何通过简单的命令进行索引创建、文档插入和查询操作。此外,还会讨论Elasticsearch的数据类型,如text、keyword、date等,以及如何通过映射(Mapping)来...

    ElasticSearch Java 中文文档 5.6

    从文件内容来看,文档涉及到ElasticSearch Java客户端的多个方面,包括如何连接ElasticSearch集群、使用文档API进行索引、查询等操作,以及如何使用搜索API和聚合功能等高级特性。文档还提到了与ElasticSearch交互的...

    ElasticSearch代码实例C#

    Elasticsearch(简称ES)是一种基于Lucene的分布式、RESTful搜索分析引擎,广泛应用于大数据检索、日志分析、实时监控等领域。在C#开发环境中,我们可以借助Nest或Elasticsearch.Net这两个官方支持的客户端库来与ES...

    Elasticsearch 技术解析与实战.zip

    142 3.5.2 _default_映射 143 3.5.3 动态字段映射 143 3.5.4 动态模板 145 3.5.5 重写默认模板 148 3.6 小结 148 第4章 搜索 149 4.1 深入搜索 149 4.1.1 搜索方式 149 4.1.2 重新评分 153 4.1.3 滚动查询请求 155 ...

    elasticsearch-6.2.3

    4. **SQL支持**:此版本进一步增强了对SQL查询的支持,使熟悉SQL语法的用户能更轻松地与Elasticsearch交互,无需学习新的查询语言。 5. **多租户**:Elasticsearch通过索引模板和别名实现多租户,允许在一个集群上...

    elasticsearch-head-0.1.5.zip chrome插件

    Elasticsearch Head 是一款功能强大的开源工具,专为Elasticsearch(ES)设计,提供了一个用户友好的界面,用于可视化管理和操作ES集群。这款插件最初由Michael G. Ziller开发,版本号为0.1.5,它是一个压缩包文件...

    elasticsearch-head-master.zip

    Elasticsearch Head是一款非常实用的Elasticsearch管理工具,它以网页界面的形式提供对Elasticsearch集群的可视化操作。在“elasticsearch-head-master.zip”这个压缩包中,包含的是Elasticsearch Head的最新版本,...

    elasticsearch集群安装包

    在本篇中,我们将深入探讨如何进行 Elasticsearch(简称 ES)集群的安装。 首先,了解集群的概念至关重要。在 Elasticsearch 中,集群是一组节点(运行 Elasticsearch 的服务器),它们共同存储数据并处理搜索和...

    java api 检索elasticsearch数据

    在Java开发中,Elasticsearch是一个非常流行的分布式搜索引擎和数据分析平台。它提供了强大的API来执行各种复杂的查询和分析任务。本篇文章将详细讲解如何使用Java API,特别是TransportClient,来检索Elasticsearch...

    elasticsearch java api

    Elasticsearch Java API是开发Elasticsearch应用时常用的一个接口,它允许开发者使用Java语言与Elasticsearch集群进行交互。由于“隔壁的30分比较老,基本上都用不了”,这可能指的是早期版本的教程或API已经过时,...

Global site tag (gtag.js) - Google Analytics