Elasticsearch reindex

来自ling
跳转至: 导航搜索

干货 | 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肯定是要修改的吧

https://blog.csdn.net/qq_36762677/article/details/97244174?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

重新索引 游标查出,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"
  }
}