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

背景

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

那么问题来了?

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

解决方案

官方提供根据查询更新update_by_query

POST test_index/_update_by_query?conflicts=proceed

格式:test_index 索引名
注:此命令会更新索引下所有数据,默认按照1000一个批次处理,如下图1773条数据需要2个批次。
IK分词器新增词库使历史数据生效_第1张图片

实现原理简析

  • 当发起更新请求时,会按照批次拉取数据并获取文档的内部版本号作为更新的快照。当快照的版本和索引版本一致则更新,并且递增版本号。
  • 若在对索引处理的时候若文档发生更改,将会发生版本冲突,则操作失败。但是不会回滚数据。
  • 若发生冲突而不暂停操作则需要设置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”到公众号获取相关篇
IK分词器新增词库使历史数据生效_第2张图片

你可能感兴趣的:(ElasticSearch,elasticsearch,ik,中文分词器)