针对词库更新后需要重建索引, 用 reindex 命令跟我查库后 upsert 全量更新有啥区别吗
Elasticsearch | 作者 yuechen323 | 发布于2019年06月25日 | 阅读数:4102
针对词库热更新我是用 ik 配合 nginx 实现的, 很好用
针对重建索引我之前一直是是先查数据库, 然后走 batch upsert 无脑更新 index 中的所有 document
而 reindex 命令最近我刚接触, 发现使用方式是结合 alias 来使用, 流程:
1 alias 指向老index
2 热更新词库
3. 创建新index的mapping/setting
4 reindex, source=老index, dest=新index (记住当前时间点 time1)
5 alias执行add/remove来指向新index (记住当前完成时间点 time2)
6 将 time2 - time1 之间的增量数据插入到新index
7 删除老index
这个方案的缺点是步骤4中 reindex 的时候是先生成一个 snapshot, 因此全部完事后还得有步骤6来导入增量数据, 真是太麻烦了, 无法一键完成
请问: 我无脑 upsert 跟 reindex 有什么区别吗? 我知道时间肯定是 reindex 快一些, 不过我全量查库的时候走的是牛逼的主键分页模式, 不存在任何性能问题, 请大佬帮忙解答下, 谢谢
针对重建索引我之前一直是是先查数据库, 然后走 batch upsert 无脑更新 index 中的所有 document
而 reindex 命令最近我刚接触, 发现使用方式是结合 alias 来使用, 流程:
1 alias 指向老index
2 热更新词库
3. 创建新index的mapping/setting
4 reindex, source=老index, dest=新index (记住当前时间点 time1)
5 alias执行add/remove来指向新index (记住当前完成时间点 time2)
6 将 time2 - time1 之间的增量数据插入到新index
7 删除老index
这个方案的缺点是步骤4中 reindex 的时候是先生成一个 snapshot, 因此全部完事后还得有步骤6来导入增量数据, 真是太麻烦了, 无法一键完成
请问: 我无脑 upsert 跟 reindex 有什么区别吗? 我知道时间肯定是 reindex 快一些, 不过我全量查库的时候走的是牛逼的主键分页模式, 不存在任何性能问题, 请大佬帮忙解答下, 谢谢
2 个回复
fanmo3yuan
赞同来自:
1. reindex比较麻烦,需要不停的追增量数据
2. reindex不一定会更快,尤其是同集群内做reindex,因为ES集群内会同时存在读写资源的消耗,读写频率控制不好会影响其他索引的读写
3. alias和reindex无关,使用其他方式重建同样可以使用
vergilyn
赞同来自:
Update By Query API
相比于`reindex`,个人觉得`_update_by_query`更加简单无脑。
但是我并不确定其效率和性能。