Elasticsearch分页是如何工作的(详细介绍)

如果你曾经使用过 Kibana,你会注意到它允许你查看存储在 Elasticsearch 索引中的特定信息。但是,由于大多数索引包含数千条记录,因此 Kibana 会修剪每页可用的数量,从而允许你从一页导航到另一页并查看下一条或上一条记录,所以,Elasticsearch分页是如何工作的呢?
在本教程中,我们将分析Elasticsearch分页工作原理、学习如何使用分页 API 在 Elasticsearch 中对结果进行分页。
以下屏幕截图显示了如何为前端应用程序实现 Elasticsearch 的分页。

Elasticsearch分页是如何工作的(详细介绍)

文章图片
在 Elasticsearch 中,有三种主要的方式来执行分页。每种方法都有其优点和缺点。因此,必须考虑存储在索引中的数据的结构。
在本指南中,我们将学习如何使用三种主要方法进行分页。即:
  1. 从和大小分页
  2. 滚动分页
  3. 分页后搜索。
Elasticsearch分页示例:从和大小分页Elasticsearch分页工作原理:当你在 Elasticsearch 中发出搜索请求时,你将获得匹配查询的前 10 次命中。如果你有一个返回更多文档的搜索查询,你可以使用 from 和 size 参数。
from 参数用于定义在显示先前文档之前要跳过的记录数。将其视为 Elasticsearch 开始显示结果的索引。
size 参数将描述搜索查询将返回的最大记录数。
当你想要创建分页结果时,from 和 size 参数非常适用。
Elasticsearch分页是如何工作的?考虑下面的查询,它说明了如何使用 from 和 size 参数:
GET /kibana_sample_data_flights/_search{"from": 0,"size": 5,"query": {"match": {"DestCityName": "Denver"}}}

在上面的查询中,我们搜索符合特定条件的文档。然后我们使用 from 和 size 参数来确定查询将显示多少条记录。
在我们的示例中,我们从第一个匹配的文档开始。即,我们从索引 0 开始。
我们还将显示的最大文档数指定为 5。
查询结果如下:
Elasticsearch分页是如何工作的(详细介绍)

文章图片
从上面的响应中可以看出,我们总共有七次点击。但是,我们将最大文档数限制为 5。
要查看最后两个文档,我们可以将 from 值设置为 5 为:
GET /kibana_sample_data_flights/_search{"from": 5,"size": 5,"query": {"match": {"DestCityName": "Denver"}}}

滚动分页Elasticsearch分页是如何工作的?Elasticsearch 中的下一种分页类型是滚动分页。它需要一个唯一的 scroll_id 来确定要显示的文档数量和搜索上下文的持续时间。
查看文档以了解有关搜索上下文的更多信息。
Elasticsearch分页示例 - 要生成 scroll_id,请发出如下所示的请求:
GET /kibana_sample_data_flights/_search?scroll=1m{"size": 20,"query": {"match": {"DestCityName": "Denver"}}}

上面的查询应该返回结果,包括如下所示的 scroll_id:
Elasticsearch分页是如何工作的(详细介绍)

文章图片
搜索查询中的滚动参数告诉 Elasticsearch 使用 1 分钟作为搜索上下文的持续时间。
要使用滚动 API 并查看以下批次的 20 个结果,请使用 scroll_id,如下所示:
GET /_search/scroll{"scroll": "1m","scroll_id": "FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFml5Z0hnX3QzVHFHTlBnUlRLZ0RrVEEAAAAAAABDSRZqUndsQ1ZsRFJDdXdtUjMwVV9OYU5R" }

查询应返回与指定查询匹配的下一批文档。
要清除滚动,请使用删除请求作为:
DELETE /_search/scroll{"scroll_id": "< scroll_id value"}

该请求应删除 id 指定的滚动条。值得注意的是,当设置的持续时间到期时,搜索上下文会自动清除。
Elasticsearch分页工作原理:分页后搜索Elasticsearch 中的另一种分页方法是 search_after。search_after 背后的想法是在排序值之后检索值。
让我们举一个简单的例子。假设我们要查看 DestCityName = Denver 的文档并根据票价进行排序。
GET /kibana_sample_data_flights/_search{"size": 2,"query": {"match": {"DestCityName": "Denver"}}, "sort": [ {"AvgTicketPrice": {"order": "desc"}}]}

Elasticsearch分页是如何工作的?如果我们运行上面的查询,我们应该只看到总命中中的两个,如 size 参数所指定的。
它还将为我们提供每个文档的排序值,如下所示:
Elasticsearch分页是如何工作的(详细介绍)

文章图片
Elasticsearch分页示例 - 我们可以使用这个排序值来获取下一批文档:
GET /kibana_sample_data_flights/_search{"size": 2,"query": {"match": {"DestCityName": "Denver"}},"search_after": [ 940.3963], "sort": [ {"AvgTicketPrice": {"order": "desc"}}]}

然后我们使用 search_after 参数和上次请求中提供的排序 id 来查看下一批文档。
Elasticsearch分页工作原理总结【Elasticsearch分页是如何工作的(详细介绍)】本指南为你提供了在 Elasticsearch 中使用 from 和 size 分页、滚动和 search_after 分页对结果进行分页的基础知识。考虑要探索的文档。

    推荐阅读