IK分词器新增词库使历史数据生效

背景

IK作为常用的ES中文分词插件。但是在IK新增热词后,不会去更新历史数据,只有后续新增的数据才生效。

那么问题来了?

  • 如何对历史数据进行更新呢?

解决方案

官方提供根据查询更新update_by_query

POST test_index/_update_by_query?conflicts=proceed

格式:test_index 索引名
注:此命令会更新索引下所有数据,默认按照1000一个批次处理,如下图1773条数据需要2个批次。
在这里插入图片描述

实现原理简析

  • 当发起更新请求时,会按照批次拉取数据并获取文档的内部版本号作为更新的快照。当快照的版本和索引版本一致则更新,并且递增版本号。
  • 若在对索引处理的时候若文档发生更改,将会发生版本冲突,则操作失败。但是不会回滚数据。
  • 若发生冲突而不暂停操作则需要设置conflicts参数 ,可通过url中添加参数conflicts=proceed,或者请求体添加"conflicts":“proceed”。

注据官网介绍:版本等于0的文档无法使用查询更新来更新,因为版本控制不支持0作为有效版本号。

同时更新多个索引中的文档:

POST test_index-000001,test_index-000002/_update_by_query

支持通配符
注:使用通配符*,匹配多个索引

POST test_*/_update_by_query?conflicts=proceed

自定义批次数量
注:默认按查询更新使用1000个滚动批次。可以使用scroll_size参数自定义批次大小。

POST test_index-000001/_update_by_query?scroll_size=200

指定根据查询条件更新

POST test_index/_update_by_query?conflicts=proceed
{
  "query": {
    "ids": {
      "values":[ 1001, 1002, 1003 ]
    }
  }
}

关注程序员小强公众号更多编程趣事,知识心得与您分享
👏关注“程序员小强”发送关键字“elasticSearch”到公众号获取相关篇

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值