1.在mapping中加入分词器的问题

如果需要在Elasticsearch中使用IK中文分词器,不仅仅是安装和配置,还需要在mapping中对需要使用分词器的字段进行定义,这就意味着需要修改mapping结构。
如图所示,mapping是用来定义Elasticsearch中索引结构的文件,所有的索引文档都会根据mapping的定义存放到Elasticsearch中。因此,在Elasticsearch中一旦创建了mapping就不允许修改,如果进行更改之前的索引就无法生效了。也就是说,我们不能将新增分词器加入到mapping中。
73740500_1629705455.png

2.如何针对新的mapping进行数据迁移

创建新索引的mapping,同时将新增分词器加入到里面。这个时候mapping是全新的,所以没有对应的索引文档加入进来。接下来就需要将老的mapping中对应的索引文档数据同步到新的mapping中来。
7146100_1629705456.png
有了上面的思路,我们需要使用Elasticseach中的reindex完成数据的迁移。
reindex的核心功能就是做跨索引、跨集群的数据迁移。reindex的底层是scroll实现,借助scroll并行优化方式,提升效率。
reindex做的是从老的mapping数据copy到新的mapping中,而不会帮助我们创建新的索引(index)。所以在做数据迁移之前我们需要做好新索引(index)的创建和设置,包括mapping、shard、replica的创建和设置。reindex是以batch(批量)的方式来执行的。默认的批量大小为1000。也可以根据条件拷贝老的index中一部分数据,可以通过加入query到source中和定义max_docs参数进行控制。
如下图所示,定义了老的index是twiter2,新的index是twitter3。拷贝的条件是来自“北京”的数据,拷贝的数量是100个文档。
32164200_1629705456.png