• -------------------------------------------------------------
  • ====================================

ElasticSearch新增IK扩展词后,让历史数据生效方法

elasticsearch dewbay 5年前 (2019-04-12) 2965次浏览 已收录 0个评论 扫描二维码

问题描述
IK是 ES 的中文分词插件。在IK新增热词后,不会去更新历史数据,即新添加的热词只对后续的数据生效。而实际上我们常常需要对历史数据进行更新。

解决办法
使用 ES 自己提供的 update_by_query 接口。

调用接口:http://127.0.0.1:9200/index/_update_by_query?conflicts=proceed 可以指定多个索引多个 type。 http://127.0.0.1:9200/index1,index2/type1,type2/_update_by_query?conflicts=proceed可以使用通配符,匹配多个索引
-返回结果示例
{
“took”: 49616, // 话费时间
“timed_out”: false,//是否超时
“total”: 123649,//数据总数
“updated”: 123649,//更新总数
“deleted”: 0,
“batches”: 124,//scroll 响应数量
“version_conflicts”: 0,//版本冲突数量
“noops”: 0,
“retries”: {
“bulk”: 0,
“search”: 0
},
“throttled_millis”: 0,
“requests_per_second”: -1,
“throttled_until_millis”: 0,
“failures”: []
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
默认批处理的大小是 1000,参数设置如下:
POST twitter/_update_by_query?scroll_size=100

  • 其他支持的参数

refresh, wait_for_completion, wait_for_active_shards, and timeout.

查询 update_by_query:http://10.120.241.194:9200/_tasks?detailed=true&actions=*byquery
取消 upate_by_query 任务:http://10.120.241.194:9200/_tasks/BmK-50kZQCuFwvObmFrLrw:27388/_cancel。
BmK-50kZQCuFwvObmFrLrw:27388 是通过第二点查询出来。

update_by_query 原理
开始时获取一个索引的快照,并且使用内部版本来号来进行更新。这意味着如果文档在获得快照后,对索引处理 过程中版本发生更改,将会发生版本冲突。当快照的版本和索引版本一直时则进行更新,并且递增文档版本号。

当遇到冲突而导致整个更新过程失败时,更新过程是不会回滚的。如果不想因为冲突导致整个更新过程终止,可以在 url 中添加参数 conflicts=proceed。或者在请求 body 中添加”conflicts”:”proceed”

效率测试
更新测试环境所有索引(14 个),文档数量 123649,耗时 49616,效率 2490 个/s。观察服务器负载在 2 左右。

测试环境 es 为单个节点。

总体上对性能影响不大。

注意点
新增IK热词后,需要等热词生效后才能掉该接口。可以使用分词分析接口来确认。
http://10.120.241.194:9200/indexname/_analyze?text=银天下&tokenizer=ik_max_word

该接口返回有对应分词即表示添加成功。

作者:Chase888
来源:CSDN
原文:https://blog.csdn.net/a314773862/article/details/78515253
版权声明:本文为博主原创文章,转载请附上博文链接!


露水湾 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:ElasticSearch新增IK扩展词后,让历史数据生效方法
喜欢 (2)
[]
分享 (0)
关于作者:
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址