私はelasticsearchでインデックス化されたデータをいくつか持っています._sourceにはファイルサイズを保存するフィールドがあります: {"file_size":"25.2MB"}
現在、このフィールドのマッピングは文字列です。file_size でソートして検索したい。マッピングを整数に変更して、インデックスを再作成する必要があると思います。
サイズをバイト単位で計算し、整数として再インデックスするにはどうすればよいですか?
私はelasticsearchでインデックス化されたデータをいくつか持っています._sourceにはファイルサイズを保存するフィールドがあります: {"file_size":"25.2MB"}
現在、このフィールドのマッピングは文字列です。file_size でソートして検索したい。マッピングを整数に変更して、インデックスを再作成する必要があると思います。
サイズをバイト単位で計算し、整数として再インデックスするにはどうすればよいですか?
lucene
s インデックス内のドキュメントは不変であるため、Elasticsearch はフィールドの再インデックスをサポートしていません。したがって、内部的には、すべてのドキュメントを取得して変更し、インデックスに戻して古いコピーを削除する必要があります。実際に何が必要かは問題ではありません-マッピングを変更するか、データを変更します。
というわけで、実用的な部分について。簡単な方法:
file_size
必要なロジックに従って、フィールドを整数に変更しますそのため、アプリケーション側には、データを人間が読み取れる文字列からLong
+ 標準の ES ドライバー機能に変換するための追加のロジックが含まれます。このプロセスを高速化するにはscroll-scan
、読み取りbulk api
用と書き込み用の使用を検討してください。今後は、エイリアスを使用してデータをシームレスに移行できるようにすることをお勧めします。
何らかの理由でサーバー側の変更を行うことができない場合、適切なマッピングを使用して新しいフィールドを追加し、スクリプト化された部分的な更新で ES 側の更新を開始できる可能性があります()。または、実験的なプラグインで運試し