Elasticsearch高级检索对决:search_after+pit和scroll,谁才是最佳选择?

1、PIT是什么?

PIT的全称为Point in time,elastic官方的定义是这样的:

A search request by default executes against the most recent visible data of the target indices, which is called point in time.

我的理解是这样的,一个检索请求执行时,它是在执行检索前最近的这个时刻点索引内所有可见数据范围内执行检索,而不是针对其他时刻点索引内所有可见数据的范围内,关键字是【最近】的时刻点,这个点很重要,需要细细的琢磨、理解。

那么pit要解决什么问题呢?它要解决的是,一个检索请求在不同时间点检索结果出现不一致的问题,正常来说,同样检索条件,应该有相同的输出,但由于索引内数据的变化,比如增加了新数据,则会导致一个请求在不同时刻点检索出现不一样的结果,或者在search_after的请求之间,索引数据发生变化,就会影响search_after的检索结果,那么如何消除时间变量对检索结果的影响呢?这就是pit要解决的问题了。

2、search_after+pit全量检索方案

这个方案,首先利用pit创建时间点,保留索引当前状态,创建pit后,索引内数据的变化不会影响使用该pit检索的结果:

POST /new_tag_202411/_pit?keep_alive=1m

上面的命令会生成一个pid id。

keep_alive参数的含义是:时间点上下文的有效时间,意思是说,索引的数据状态最长保持时间,如果超过这个时间,同一个检索请求的输出就不保证是一样的了。

接下来使用pit构造检索请求:


GET /_search
{
  "query": {
    "bool": {
      "filter": [
        {"term":{
          "rule_id":1
        }}
      ]
    }
  },
  "sor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值