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

2021年11月10日01:31:32 发表评论 906 次浏览

如果你曾经使用过 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":
"FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFml5Z0hnX3QzVHFHTlBnU

lRLZ0RrVEEAAAAAAABDSRZqUndsQ1ZsRFJDdXdtUjMwVV9OYU5R"
}

查询应返回与指定查询匹配的下一批文档。

要清除滚动,请使用删除请求作为:

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 中使用 from 和 size 分页、滚动和 search_after 分页对结果进行分页的基础知识。考虑要探索的文档

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: