首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
ElasticSearch开篇ES的安装
ElasticSearch的基本概念与名词解析
ElasticSearch数据管理文档的基础操作
ElasticSearch全文搜索API实践
ElasticSearch之Term-Query-API实践
ElasticSearch组合查询
ElasticSearch推荐搜索选项Suggesters的API
ElasticSearch统计需求之聚合
ElasticSearch集群管理API的使用
ElasticSearch索引管理API的使用
ElasticSearch中Mapping的使用
ElasticSearch关系模型之嵌套类型和父子文档
ElasticSearch正排索引与倒排索引简介
ElasticSearch全文搜索之倒排索引的实现
ElasticSearch数据相似的依据之相关性评分
ElasticSearch词项生成器之分词器
ElasticSearch分布式之集群中常见问题与解决方案
ElasticSearch分布式文档搜索机制
ElasticSearch数据持久化之分布式文档的存储流程
ElasticSearch分页之from+size、search after、scroll api
ElasticSearch聚合分析的原理之聚合结果一定准确
ElasticSearch数据副本策略
ElasticSearch数据副本模型
ElasticSearch集群运维
ElasticSearch索引的生命周期ILM
ElasticSearch安全之集群安全
ElasticSearch异常管理之搭建ELK日志系统
当前位置:
首页>>
技术小册>>
ElasticSearch零基础到实战
小册名称:ElasticSearch零基础到实战
ElasticSearch提供了多种方式实现分页,本文将介绍三种常用的方法:from+size、search after、scroll api,并提供Python代码示例。 **1.from+size** from和size是ElasticSearch分页的基本概念,from表示从第几条记录开始,size表示返回多少条记录。例如,我们要查询前100条数据,可以使用如下的ElasticSearch查询语句: ```asp GET /my_index/_search { "from": 0, "size": 100, "query": { "match_all": {} } } ``` 这个查询语句中,from为0,size为100,表示从第0条记录开始,返回100条记录。如果我们要查询第101-200条数据,只需要将from改为100,size还是100即可。 下面是使用Python实现ElasticSearch分页的示例代码: ```asp from elasticsearch import Elasticsearch es = Elasticsearch() query = { "from": 0, "size": 100, "query": { "match_all": {} } } res = es.search(index="my_index", body=query) hits = res["hits"]["hits"] for hit in hits: # 处理每一条记录 ``` 这段代码中,使用Elasticsearch库创建一个ElasticSearch客户端,然后定义查询语句query,调用search方法进行查询,最后获取查询结果中的hits字段,遍历每一条记录进行处理。 **2.search after** from+size虽然是ElasticSearch最基本的分页方法,但是它的缺点也很明显:分页查询效率低下。因为每次查询需要跳过前面的记录,查询的效率会随着from的增加而降低。在查询大量数据时,使用search after方法可以解决这个问题。 search after方法的原理是:将上一页的最后一条记录的排序值作为下一页查询的search after参数,这样就可以直接跳过前面的记录,查询效率大大提高。例如,我们要查询第101-200条记录,可以先查询前100条记录,获取最后一条记录的排序值,然后使用search after参数查询第101-200条记录: ```asp GET /my_index/_search { "size": 100, "sort": [ {"timestamp": "asc"}, {"_id": "asc"} ] } GET /my_index/_search { "size": 100, "sort": [ {"timestamp": "asc"}, {"_id": "asc"} ], "search_after": [last_timestamp, last_id] } ``` 这个查询语句中,sort参数指定按照timestamp升序、_id升序排序,然后使用search after参数指定上一页最后一条记录的timestamp和_id。 下面是使用Python实现ElasticSearch search after方法的示例代码: ```asp from elasticsearch import Elasticsearch es = Elasticsearch() query = { "size": 100, "sort": [ {"timestamp": "asc"}, {"_id": "asc"} ] } res = es.search(index="my_index", body=query) hits = res["hits"]["hits"] for hit in hits: # 处理每一条记录 last_hit = hits[-1] # 获取最后一条记录 last_timestamp = last_hit["_source"]["timestamp"] last_id = last_hit["_id"] while len(hits) == 100: query["search_after"] = [last_timestamp, last_id] res = es.search(index="my_index", body=query) hits = res["hits"]["hits"] for hit in hits: # 处理每一条记录 last_hit = hits[-1] last_timestamp = last_hit["_source"]["timestamp"] last_id = last_hit["_id"] ``` 这段代码中,首先查询前100条记录,获取最后一条记录的timestamp和_id作为下一页查询的search after参数。然后在循环中使用这个search after参数进行查询,直到查询结果不足100条为止。在循环中处理每一条记录即可。 **3.scroll api** scroll api是ElasticSearch提供的另一种分页方式,它与search after方法不同的是,search after方法是基于排序值的分页方式,而scroll api是基于游标的分页方式。使用scroll api需要先创建一个游标,然后使用游标进行分页查询。例如,我们要查询前1000条记录,可以使用如下的ElasticSearch查询语句: ```asp POST /my_index/_search?scroll=1m { "size": 100, "query": { "match_all": {} } } ``` 这个查询语句中,scroll参数指定游标的存活时间,每次查询返回的结果中会包含一个scroll_id,使用这个scroll_id进行下一次查询即可。 下面是使用Python实现ElasticSearch scroll api的示例代码: ```asp from elasticsearch import Elasticsearch es = Elasticsearch() query = { "size": 100, "query": { "match_all": {} } } res = es.search(index="my_index", body=query, scroll="1m") scroll_id = res["_scroll_id"] hits = res["hits"]["hits"] for hit in hits: # 处理每一条记录 while len(hits) > 0: res = es.scroll(scroll_id=scroll_id, scroll="1m") scroll_id = res["_scroll_id"] hits = res["hits"]["hits"] for hit in hits: # 处理每一条记录 ``` 这段代码中,首先查询前100条记录,获取scroll_id和查询结果中的hits字段。然后在循环中使用scroll_id进行查询,直到查询结果为空为止。在循环中处理每一条记录即可。 **小结:** 本文介绍了ElasticSearch分页的三种常用方法:from+size、search after、scroll api,并提供了Python代码示例。在使用分页查询时,应根据实际情况选择合适的方法,以提高查询效率。
上一篇:
ElasticSearch数据持久化之分布式文档的存储流程
下一篇:
ElasticSearch聚合分析的原理之聚合结果一定准确
该分类下的相关小册推荐:
ElasticSearch入门与实践