zoukankan      html  css  js  c++  java
  • 使用 search_after 进行分页

    适用于不断下一页这样的查询
    我这里用的releaseTimestamp倒序。

    {
      "query": {
        "range": {
          "releaseTime": {
            "gte": "2019-09-20 00:00:00",
            "lte": "2019-09-21 00:00:00"
          }
        }
      },
      "search_after":[ 1568995200000],
      "_source": ["title","releaseTime"],
      "sort": [
        {
          "releaseTimestamp": {
            "order": "desc"
          }
        }
      ],
      "size": 5
    }
    

    得到3条结果:

     "hits": {
        "total": 3,
        "max_score": null,
        "hits": [
          {
            "_index": "test_news",
            "_type": "_doc",
            "_id": "45a88261c9975aa6e0eb996c369c32de",
            "_score": null,
            "_source": {
              "releaseTime": "2019-09-20 23:59:48",
              "title": "岭南大学与五邑大学将开展居家养老联合研究-新华网"
            },
            "sort": [
              1568995190935
            ]
          },
          {
            "_index": "test_news",
            "_type": "_doc",
            "_id": "3ba4cc4d5ea82ff6da48109c070cb265",
            "_score": null,
            "_source": {
              "releaseTime": "2019-09-20 23:59:48",
              "title": "岭南大学与五邑大学将开展居家养老联合研究"
            },
            "sort": [
              1568995188633
            ]
          },
          {
            "_index": "test_news",
            "_type": "_doc",
            "_id": "45a88261c9975aa6e0eb996c369c32de",
            "_score": null,
            "_source": {
              "releaseTime": "2019-09-20 23:59:48",
              "title": "岭南大学与五邑大学将开展居家养老联合研究-新华网"
            },
            "sort": [
              1568995185201
            ]
          }
        ]
      }
    

    接下来用第二条数据的sort值 放到search_after中再次查询:

    {
      "query": {
        "range": {
          "releaseTime": {
            "gte": "2019-09-20 00:00:00",
            "lte": "2019-09-21 00:00:00"
          }
        }
      },
      "search_after":[ 1568995188633],
      "_source": ["title","releaseTime"],
      "sort": [
        {
          "releaseTimestamp": {
            "order": "desc"
          }
        }
      ],
      "size": 5
    }
    

    结果会得到上次查询的第二条之后的数据:

     "hits": {
        "total": 3,
        "max_score": null,
        "hits": [
          {
            "_index": "test_news",
            "_type": "_doc",
            "_id": "45a88261c9975aa6e0eb996c369c32de",
            "_score": null,
            "_source": {
              "releaseTime": "2019-09-20 23:59:48",
              "title": "岭南大学与五邑大学将开展居家养老联合研究-新华网"
            },
            "sort": [
              1568995185201
            ]
          }
        ]
      }
    

    如果是多个字段排序的话,search_after值的顺序要与我们排序条件的顺序一致
    还有使用search_after时 from设置为0,-1或者直接不加from
    使用search_after 进行分页 相比from&size的方式要更加高效,而且在不断有新数据入库的时候仅仅使用from和size分页会有重复的情况
    相比使用scroll分页,search_after可以进行实时的查询
    不过search_after不适合跳跃式的分页

  • 相关阅读:
    自定义带有uitableview的alertview对话框
    ZBarSDK扫描二维码
    iOS-UISearchBar和UISearchController(参考网友来练习一下)
    Nsstring中的搜索方法rangeOfString
    手势识别UIGestureRecognizer
    对iPhone手机型号进行判断
    iOS NSString 与NSData转化
    使用dispatch_once实现单例
    Command /usr/bin/codesign failed with exit code 1
    ios button的title下面添加横线
  • 原文地址:https://www.cnblogs.com/feng07/p/11585113.html
Copyright © 2011-2022 走看看