1

私はelasticsearchでインデックス化されたデータをいくつか持っています._sourceにはファイルサイズを保存するフィールドがあります: {"file_size":"25.2MB"}

現在、このフィールドのマッピングは文字列です。file_size でソートして検索したい。マッピングを整数に変更して、インデックスを再作成する必要があると思います。

サイズをバイト単位で計算し、整数として再インデックスするにはどうすればよいですか?

4

2 に答える 2

0

lucenes インデックス内のドキュメントは不変であるため、Elasticsearch はフィールドの再インデックスをサポートしていません。したがって、内部的には、すべてのドキュメントを取得して変更し、インデックスに戻して古いコピーを削除する必要があります。実際に何が必要かは問題ではありません-マッピングを変更するか、データを変更します。

というわけで、実用的な部分について。簡単な方法:

  1. 適切なマッピングで新しいインデックスを作成する
  2. 古いインデックスからすべてのドキュメントを取得する
  3. file_size必要なロジックに従って、フィールドを整数に変更します
  4. 文書を新しい索引に索引付けする
  5. 完全移行後に古いインデックスを削除する

そのため、アプリケーション側には、データを人間が読み取れる文字列からLong+ 標準の ES ドライバー機能に変換するための追加のロジックが含まれます。このプロセスを高速化するにはscroll-scan、読み取りbulk api用と書き込み用の使用を検討してください。今後は、エイリアスを使用してデータをシームレスに移行できるようにすることをお勧めします。

何らかの理由でサーバー側の変更を行うことができない場合、適切なマッピングを使用して新しいフィールドを追加し、スクリプト化された部分的な更新で ES 側の更新を開始できる可能性があります()。または、実験的なプラグインで運試し

于 2015-04-10T14:06:37.253 に答える