In my opinion, the best way to achieve this would be to leverage index templates. Index templates allow you to store a specification of your index, including settings (hence analyzers) and mappings. Then whenever you create a new index which matches your template, ES will create the index for you using the settings and mappings present in the template.
So, first create an index template called index_template
with the template pattern myindex-*
:
PUT /_template/index_template
{
"template": "myindex-*",
"settings": {
... your settings ...
},
"mappings": {
"type1": {
"properties": {
... your mapping ...
}
}
}
}
What will happen next is that whenever you want to index a new document in any index whose name matches myindex-*
, ES will use this template (+settings and mappings) to create the new index.
So say your current index is called myindex-1
and you want to reindex it into a new index called myindex-2
. You'd send a reindex query like this one
POST /_reindex
{
"source": {
"index": "myindex-1"
},
"dest": {
"index": "myindex-2"
}
}
myindex-2
doesn't exist yet, but it will be created in the process using the settings and mappings of index_template
because the name myindex-2
matches the myindex-*
pattern.
Simple as that.