Elasticsearch查询10000条之后的信息

266 阅读1分钟

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条之后的数据,当数据量越大时,效果会越好;