返回顶部
首页 > 资讯 > 数据库 >ElasticSearch如何一次查询出全部数据——基于Scroll
  • 157
分享到

ElasticSearch如何一次查询出全部数据——基于Scroll

摘要

elasticsearch 查询结果默认只显示10条,可以通过设置from及size来达到分页的效果(详见附3),但是 from + size 0); 其中:SEARCH_HITS_SIZE = 1000, srb是多条件组合查询,前

elasticsearch 查询结果默认只显示10条,可以通过设置fromsize来达到分页的效果(详见附3),但是 from + size <= 10,000,因为index.max_result_window 默认值是10,000,而 from+ size 必须小于index.max_result_window 。因此只能用Scroll(一次取一点,分多次取出)取出所有的结果,

  • Scroll相当于传统数据库的游标,具体代码片段如下:
		SearchResponse scrollResp = client.prepareSearch(availableIndices)
				.setTypes(type)
				.setScroll(new TimeValue(60000))
				.setQuery(boolQueryBuilder)
				.setSize(SEARCH_HITS_SIZE).get(); //max of SEARCH_HITS_SIZE hits will be returned for each scroll
		//Scroll until no hits are returned
		do {

			for (SearchHit hit : scrollResp.getHits().getHits()) {
					tmpJSONList.add( (jsONObject) JSONValue.parse(hit.getSourceAsString()));
				}
			}
			jsonList.addAll(tmpJsonList);
			tmpJsonList.clear();
			scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();
		} while (scrollResp.getHits().getHits().length != 0);

setScroll()里传入的时间,表示一次处理setSize()里的数据超时时间。即处理一个分页最长不超过的时间,上面的代码表示1分钟(详情可搜索Scroll context)。scrollResp.getScrollId()每次回生成一个ScrollID,如下图:

 

  • 用from + size循环读取的代码片段如下
       int index = 0; 
            {
                tmpJsonList.clear();
                srb.setFrom(Math.multiplyExact(index, SEARCH_HITS_SIZE));
                index++;
                MultiSearchResponse.Item[] items = sr.get().getResponses();
                for (MultiSearchResponse.Item item : items) {
                    SearchResponse response = item.getResponse();
                    SearchHit[] hits = response.getHits().getHits();
                    if (hits.length != 0) {
                        for (SearchHit hit : hits) {
                                tmpJsonList.add((JSONObject) JSONValue.parse(hit.getSourceAsString());
                            }
                        }
                    }
                jsonList.addAll(tmpJsonList);
                }
            } while (tmpJsonList.size() > 0);

其中:SEARCH_HITS_SIZE = 1000, srb是多条件组合查询,前置代码如下:

 queryBuilders.forEach(query -> {          
        boolQueryBuilder.must(query);
            });

MultiSearchRequestBuilder sr = client.prepareMultiSearch();
            SearchRequestBuilder srb = client.prepareSearch().setTypes(type).setIndices(availableIndices).setQuery(boolQueryBuilder).setSize(SEARCH_HITS_SIZE);
            sr.add(srb);

查询条件的构造代码片段如下(用QueryBuilders根据需要选择term, range, match等):

	StringUtil.isEmpty(l7p)) {
            queryBuilders.add(QueryBuilders.terMQuery(Event.FIELD_L7P, l7p));
        }
  
        if (!StringUtil.isEmpty(startTime) && StringUtil.isEmpty(endTime)) {
            queryBuilders.add(QueryBuilders.rangeQuery(Event.FIELD_START_TIME).from(startTime));
        }

 

附:

1)using scroll in java https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search-scrolling.html

2)scroll Https://www.elastic.co/guide/en/elasticsearch/reference/5.1/search-request-scroll.html

3) from and size https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html#request-body-search-from-size

 

*****************************************************************************************************

精力有限,想法太多,专注做好一件事就行

  • 我只是一个程序猿。5年内把代码写好,技术博客字字推敲,坚持零拷贝和原创
  • 写博客的意义在于打磨文笔,训练逻辑条理性,加深对知识的系统性理解;如果恰好又对别人有点帮助,那真是一件令人开心的事

*****************************************************************************************************

您可能感兴趣的文档:

--结束END--

本文标题: ElasticSearch如何一次查询出全部数据——基于Scroll

本文链接: https://lsjlt.com/news/2925.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • ElasticSearch如何一次查询出全部数据——基于Scroll
    Elasticsearch 查询结果默认只显示10条,可以通过设置from及size来达到分页的效果(详见附3),但是 from + size 0); 其中:SEARCH_HITS_SIZE = 1000, srb是多条件组合查询,前...
    99+
    2019-10-07
    ElasticSearch如何一次查询出全部数据——基于Scroll
  • mysql如何查询数据出现的次数
    这篇文章主要介绍“mysql如何查询数据出现的次数”,在日常操作中,相信很多人在mysql如何查询数据出现的次数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql如何查...
    99+
    2024-04-02
  • Mysql查询大量数据 比如100万数据 如何一次性查出来
    Mysql查询大量数据 比如100万数据 如何一次性查出来 首先是进行分页查询,但是如果有些情况不适合分页查询 则可以使用mybatis框架提供的流式接口查询 MyBatis 流式查询接口 MyBatis 提供了一个叫 org.ap...
    99+
    2023-09-02
    mybatis java mysql
  • hbase如何查询表中的全部数据
    要查询HBase表中的全部数据,可以使用Scan类来扫描整个表。以下是一个示例代码,用于查询名为"mytable"的HBase表中的...
    99+
    2023-10-28
    hbase
  • php如何每次查询10条数据
    这篇文章主要为大家展示了“php如何每次查询10条数据”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php如何每次查询10条数据”这篇文章吧。php每次查询10条数据的方法:1、在mysql数据...
    99+
    2023-06-25
  • oracle数据库查询数据如何导出
    oracle数据库提供以下导出数据的方法:sql*plus:使用spool命令导出到文本文件。oracle data pump:使用expdp命令导出到转储文件。oracle sql d...
    99+
    2024-04-19
    oracle
  • php如何查询数据库输出查询结果
    这篇文章主要讲解了“php如何查询数据库输出查询结果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php如何查询数据库输出查询结果”吧!连接数据库在开始查询数据库之前,需要先连接到数据库。在...
    99+
    2023-07-05
  • plsql如何导出查询的数据
    在PL/SQL中,可以使用以下几种方式来导出查询的数据:1. 使用PL/SQL Developer等第三方工具:PL/SQL Dev...
    99+
    2023-10-11
    plsql
  • node.js如何查询一条数据
    小编给大家分享一下node.js如何查询一条数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! no...
    99+
    2024-04-02
  • 如何基于Kubernetes部署MySQL数据库
    本篇内容介绍了“如何基于Kubernetes部署MySQL数据库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2024-04-02
  • php如何查询字符串最后一次出现的位置
    本篇内容介绍了“php如何查询字符串最后一次出现的位置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!查询最后一次出现位置的两种方法:1、使用...
    99+
    2023-07-02
  • mysql如何查询第一列数据
    本文小编为大家详细介绍“mysql如何查询第一列数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“mysql如何查询第一列数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2024-04-02
  • mysql如何查询第一条数据
    本篇内容主要讲解“mysql如何查询第一条数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql如何查询第一条数据”吧! 在m...
    99+
    2024-04-02
  • mysql如何查询一年的数据
    这篇文章主要介绍了mysql如何查询一年的数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql如何查询一年的数据文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • mongodb中如何查询一个数据
    在MongoDB中,可以使用`db.collection.find()`方法来查询数据。例如,假设有一个名为`users`的集合,其...
    99+
    2023-08-30
    mongodb
  • 如何一步步基于element-ui封装查询组件
    目录功能基本的查询功能查询条件初始化渲染页面更多查询以及展示优化下拉组件联动查询组件扩展搜索条件展示添加功能按钮区写在最后功能 接着前一篇文章基于element-ui框架封装一个更...
    99+
    2024-04-02
  • mysql如何查询近一周的数据
    这篇文章主要介绍“mysql如何查询近一周的数据”,在日常操作中,相信很多人在mysql如何查询近一周的数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql如何查询近...
    99+
    2024-04-02
  • Qt如何实现数据查询导出打印
    本篇内容主要讲解“Qt如何实现数据查询导出打印”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Qt如何实现数据查询导出打印”吧!效果图相关代码void DataHelper::datao...
    99+
    2023-07-02
  • sql如何遍历所有表查询出数据
    可以使用以下步骤来遍历所有表并查询出数据:1. 使用`SELECT name FROM sqlite_master WHER...
    99+
    2023-08-20
    sql
  • 基于MySQL和Otter实现生产环境安全的数据同步及查询
    前言在云平台的日常运维工作中,有很多故障排查和数据核对的场景,为了给全线运维人员(含部分开发和运营分析人员)提供现网数据的实时查询,我们使用MySQL和开源工具otter搭建了一套数据查询和管理系统,可以查...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作