在 Mapping 里面,将 dynamic 参数设置成 strict 可以拒绝索引包含未知字段的文档。 此条 Tips 由 medcl 贡献。

_reindex时怎样判断当目标记录中某个字段值大于原记录字段时跳过不更新?

Elasticsearch | 作者 wangxinrong | 发布于2024年09月03日 | 阅读数:4032

如果一个索引的_id与数据的业务id一致,这个索引的数据持续有update操作,每次更新会更新文档中的updateTime字段
我现在想把它从A集群迁移到B集群。
迁移前我先从A到B全量reindex一遍索引,记录reindex开始时间t1,然后切换读写到B集群。
切换完成后我再做一次reindex导入增量变更数据
  "source": {  
    "index": "my_index",  
    "query": {  
      "range": {  
        "updateTime": {  
          "gte": t1
        }  
      }  
    }  
  },  
  "dest": {  
    "index": "my_index"  
  }
这时有个风险,如果某个id的记录在迁移期间有过好几次update操作
1.导数据前它是x(在A)
2.第一次全量导数据期间,它更新成了y(A上的x变y,B上值仍然是x)
3.读写切换到B之后,它又更新成了z(B上的x变z,A上是y)
4.这时我再把A上索引updateTime为t1后的数据导过去,B上这条记录就又从z刷回y了。
 
所以在导数据时要判断,B上索引的这条记录updateTime如果大于我原集群A索引上的记录时,跳过不更新,这种情况下要怎么实现呢,用脚本可以实现吗。
或者类似的迁移需求,有没有其他好的方法来实现。
 
 
已邀请:

zsy

赞同来自:

不知道能不能用脚本判断下

要回复问题请先登录注册