起因是一月份需求中有一个功能,需要遍历ES索引中的内容进行处理,原本之前常用的的是ES的scroll方法来处理的,但是对比以前其他同事开发的功能发现以前某个已离职的同事做的一个类似的功能的时候用的是search_after方法。所以在这里把3中方式都列下,对比说明下。题外话不多说,进入正题

我们在进行ES数据查询的时候,对于翻页需求的处理可以使用的方法有3种,如题中所述分别是from&size参数,scroll滚动处理,search_after参数

首先是基础环境

请求

GET /

结果

{
    "name": "olap05-sit",
    "cluster_name": "common",
    "cluster_uuid": "xgg8HEt3SzyI7-Jyg4-J4A",
    "version": {
        "number": "5.4.2",
        "build_hash": "Unknown",
        "build_date": "Unknown",
        "build_snapshot": true,
        "lucene_version": "6.5.1"
    },
    "tagline": "You Know, for Search"
}
  • from&size分页查询

请求

GET /your_es_index/your_es_index/_search
{
  "size": 20,
  "from": 0
}

结果

{
  "took": 10,
  "timed_out": false,
  "_shards": {
    "total": 30,
    "successful": 30,
    "failed": 0
  },
  "hits": {
    "total": 8645477,
    "max_score": 1.0,
    "hits": [
      {
        "_index": "your_es_index",
        "_type": "your_es_index",
        "_id": "6073958667689227072",
        "_score": 1.0,
        "_source": {
          "brand_name": "iPad",
          "bu_name": "冰洗",
          "end_time": "2022-05-27 12:14:56",
          "item_id": "000882022439",
          "oid": "6073958667689227072",
          "pay_time": "2022-05-15 05:11:43",
          "purch_title": "无印良品日式简约全棉被套单件纯棉被罩冬新款150x200x230单人87"
        }
      },
      ......
    ]
  }
}

返回结果太长,不全贴出来了。简单说明下,size参数表示的是每页返回结果条数,from表示从某个位置开始查询,即相当于偏移量的意思,不是表示的当前页码,如果在页面上需要做分页显示当前页码需要自行计算转换下。自己在代码中对请求参数的page、pageSize转换为es查询中的from和size参数。

Continue reading