Elasticsearch reindex
干货 | Elasticsearch Reindex性能提升10倍+实战
https://www.elastic.co/guide/en/elasticsearch/reference/5.4/docs-reindex.html
https://www.cnblogs.com/fstimers/articles/11163855.html elasticsearch更改mapping(不停服务重建索引)
https://blog.csdn.net/yexiaomodemo/article/details/97979376
2、重建索引场景 情况一:某一天,突然我们的搜索引擎需要加一个字段,而且这个字段是需要直接做分词的,此时我们就要重建索引了。
原因一:需要新加一列
原因二:新加的列需要做分词
情况二:分词器自定义词库扩展
原因一:每一个使用分词器分完的词均进入了倒排索引,我们更新了自定义词库,则老的文本就使用不了新的自定义词库作为关键字查询。
情况三:修改新的分词器
原因一:修改分词器后,查询词就会按照新的分词器分词,与老的倒排索引里面的词肯定不一致
原因二:修改了分词器后,mapping肯定是要修改的吧
重新索引 游标查出,bluk更新 重建索引
reindex 当数据的mapping需要修改,但是大量的数据已经导入到索引中了,重新导入数据到新的索引太耗时;但是在ES中,一个字段的mapping在定义并且导入数据之后是不能再修改的, 所以这种情况下也可以考虑尝试使用Reindex。实测速度大概是bulk导入数据的5-10倍。
POST _reindex
{
"source": {
"index": "old_index"
},
"dest": {
"index": "new_index"
}
}
curl _XPOST 'localhost:9200/_reindex' -d '{"source":{"index":"old_index"},"dest":{"index":"new_index"}}'
但是,当我们发现我们需要迁移的数据量过大时,我们会发现reindex的速度会变得很慢 原因分析: reindex的核心做跨索引、跨集群的数据迁移。 慢的原因及优化思路无非包括: 1)批量大小值可能太小。需要结合堆内存、线程池调整大小; 2)reindex的底层是scroll实现,借助scroll并行优化方式,提升效率; 3)跨索引、跨集群的核心是写入数据,考虑写入优化角度提升效率。
可行方案:
1)提升批量写入大小值 默认情况下,_reindex使用1000进行批量操作,您可以在source中调整batch_size。
POST _reindex
{
"source": {
"index": "source",
"size": 5000
},
"dest": {
"index": "dest",
"routing": "=cat"
}
}
原文参考 再优化
POST _reindex?slices=5&refresh
{
"source": {
"index": "twitter"
},
"dest": {
"index": "new_twitter"
}
}