elasticsearch查询10000条以后的数据

本文介绍了如何在Elasticsearch中查询超过默认限制的大量数据。首先,可以通过设置`max_result_window`参数扩大查询上限,但不推荐,因为可能导致资源消耗过大。更推荐使用游标(scroll)方式分批查询,提供了一段Python代码示例,展示如何利用scroll API遍历超过10000条的数据,这种方式在处理大量数据时效率更高。
摘要由CSDN通过智能技术生成

elsaticsearch是一个分布式的、RESTful 风格的搜索和数据分析引擎,由于是分布式的,在es中默认设置最多可以查询前10000条的数据,当要查询10000条之后的数据,可以采用如下的两种方式配置,具体如下:
(1)通过设置索引的max_result_window的这个参数,可以修改最大查询的值;

put请求     http://127.0.0.1:9200/indexname/_settings
    {
        "index": {
            "max_result_window": "100000"
        }
   }

通过采用这样的方式,可以修改elasticsearch查询最多数据的条数,这里设置成了10w;
注:不推荐使用设置max_result_window的方式,当max_result_window很大时,会导致消耗的内存和cpu过多;

(2)通过游标的方式进行处理(比较推荐)
这里提供了python的代码,调用elasticsearch lib的方式

from elasticsearch import Elasticsearch

#本地服务没有设置权限认证
es = Elasticsearch("127.0.0.1:9200")
body = {
	"query":{
		"match_all":{}
	}
}

index = 'xxxxx'
#第一次查询,可以查询出100条数据
#scroll代表了#保持游标查询窗口5分钟
query = es.search(index=index, body=body, scroll='5m', size=100)

#第一次查询出的数据
first_hits = query['hits']['hits']
#获取一共有多少条数据
total = query['hits']['total']


#获取scroll_id,方便查询在100条之后的数据
scroll_id = query['_scroll_id']

#查询前100条之后的数据
for i in range(0, int(total/100)):
	#每次查询出100条的数据并进行合并
	query_scroll = es.scroll(scroll_id=scroll_id,scroll='5m')['hits']['hits']
	hits = query_scroll['hits']['hits']

采用上述的方式,可以查询出10000条之后的数据,当数据量越大时,效果会越好;

在 Java 代码中,使用 Elasticsearch 进行分页查询和获取超过 20000 数据的方法如下: 1. 首先,创建一个 RestHighLevelClient 实例,用于与 Elasticsearch 进行通信: ```java RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); ``` 2. 然后,构建一个 SearchRequest 对象,设置要查询的索引和查询件: ```java SearchRequest searchRequest = new SearchRequest("your_index_name"); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(QueryBuilders.matchAllQuery()); sourceBuilder.size(100); // 设置每页返回的数据量 sourceBuilder.from(20000); // 设置查询的起始位置 searchRequest.source(sourceBuilder); ``` 3. 执行搜索请求,并处理搜索结果: ```java SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); SearchHits hits = searchResponse.getHits(); SearchHit[] searchHits = hits.getHits(); for (SearchHit hit : searchHits) { // 处理每个搜索结果 String sourceAsString = hit.getSourceAsString(); // ... } client.close(); // 关闭客户端 ``` 上述代码中的 `size` 方法用于设置每页返回的数据量,`from` 方法用于设置查询的起始位置。通过调整这两个参数,可以实现分页查询和获取超过 20000 数据。 请注意,当数据量很大时,可能会对 Elasticsearch 的性能产生影响。为了提高性能,你可以使用滚动搜索(scroll)等技术来处理大量数据查询。这超出了本回答的范围,你可以查阅 Elasticsearch 的官方文档来了解更多信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值