新しいマッピング(主に既存のフィールドのnot_analyzedバージョン)を追加しました。ここで、既存のデータのインデックスを再作成する方法を理解する必要があります。弾性検索ウェブサイトのガイドを試してみましたが、それはあまりにも混乱しすぎです。また、プラグイン(elasticsearch-reindex、allegro/elasticsearch-reindex-tool)を使用してみました。私は ElasticSearch-ダウンタイムなしでデータを再インデックスする を見てきましたが、これは同様の質問です。 (可能な場合は)外部ツールに依存せずに(元の挿入の場合と同様に)バルクAPIを使用する必要がないことを望んでいました
実際には読み取り専用のデータなので、インデックス全体を簡単に再構築できますが、運用中にフィールドなどを追加する必要がある場合、長期的には機能しません。 ESの比較的初心者のための理解しやすい/フォローしやすい解決策または手順を知っている人がいるのではないかと思いました。バージョン2でWindowsを使用しています。
バージョン2.3.4では、新しいapi _reindexが使用可能になり、それが正確にそれを実行します。基本的な使い方は
{
"source": {
"index": "currentIndex"
},
"dest": {
"index": "newIndex"
}
}
再インデックス付けとは、データを読み取り、elasticsearchでデータを削除して、再度データを取り込むことを意味します。 「既存のデータのマッピングを適切に変更する」ようなものはありません。あなたが言及したすべてのインデックス再作成ツールは、read-> delete-> ingestのラッパーにすぎません。
いつでも新しいインデックスのマッピングを調整し、後でフィールドを追加できます。このマッピングに関して、すべての新しいフィールドにインデックスが付けられます。または、新しいフィールドを制御できない場合は、動的マッピングを使用します。
Elasticsearchで文字列のデフォルトマッピングを「未分析」に変更 を見て、動的マッピングを使用して文字列のnot_analyzedフィールドを取得する方法を確認してください。
再インデックスは非常にコストがかかります。より良い方法は、新しいインデックスを作成して古いインデックスを削除することです。ダウンタイムなしでこれを実現するには、すべての顧客にインデックスエイリアスを使用します。 「data-version1」と呼ばれるインデックスを考えてください。段階的に:
常にエイリアスを使用することをお勧めします。
私も同じ問題に直面しました。しかし、現在のインデックスマッピングとアナライザーを更新するためのリソースが見つかりませんでした。私の提案は scroll and scan api を使用し、新しいマッピングと新しいフィールドでデータを新しいインデックスに再インデックスすることです。
Elasticsearch Reindex from Remote
Host to Local
Host example(Jan 2020 Update)
# show indices on this Host
curl 'localhost:9200/_cat/indices?v'
# edit elasticsearch configuration file to allow remote indexing
Sudo vi /etc/elasticsearch/elasticsearch.yml
## copy the line below somewhere in the file
>>>
# --- whitelist for remote indexing ---
reindex.remote.whitelist: my-remote-machine.my-domain.com:9200
<<<
# restart elaticsearch service
Sudo systemctl restart elasticsearch
# run reindex from remote machine to copy the index named filebeat-2016.12.01
curl -H 'Content-Type: application/json' -X POST 127.0.0.1:9200/_reindex?pretty -d'{
"source": {
"remote": {
"Host": "http://my-remote-machine.my-domain.com:9200"
},
"index": "filebeat-2016.12.01"
},
"dest": {
"index": "filebeat-2016.12.01"
}
}'
# verify index has been copied
curl 'localhost:9200/_cat/indices?v'