データを ElasticSearch エンジン サーバーにインデックス付けしています。User というドメイン オブジェクトがあります。以下は、私が使用している関連コードです。現在、_id
elasticsearch の属性は、以下に示すように、このコマンドからの増分値に設定されています。
bulkRequest.add(client.prepareIndex("heros", "entry", i+"")
しかし、ワンダーウーマンはドキュメントの ID として SN_NO も持つため、任意の ID を増やしたくありません。このドメイン オブジェクトの一意の ID (SN_NO) を Elasticsearch エンジンにマップするにはどうすればよい_id
ですか? これが必要な理由は、時間の経過とともに、たとえばwest_sizeなどの属性の1つを変更する必要がある場合があるためです. そして、ばかげた例として、ウエストが細い女性と太っている女性の 2 人のワンダーウーマンを含むエラスティック検索エンジンは必要ありません。
長い質問で申し訳ありませんが、私はそれを読んで面白くするために一生懸命努力しました.
前もって感謝します!
パブリック クラス TestBulkElastic {
public static void main(String [] args) throws JsonGenerationException, JsonMappingException, IOException {
// Create User object
User user1 = new User();
user1.setGender(Gender.FEMALE);
Name n = new Name();
n.setFirst("Wonder");
n.setLast("Woman");
user1.setName(n);
user1.setVerified(false);
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("user.json"), user1);
HashMap<String,Object> fileResult =
new ObjectMapper().readValue(new File("user.json"), HashMap.class);
Settings settings = ImmutableSettings.settingsBuilder()
.put("cluster.name", "MyES").build();
Client client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress("123.123.123.123", 9350));
BulkRequestBuilder bulkRequest = client.prepareBulk();
int batch = 10000;
int i = 0 ;
while(i < 10000000){
bulkRequest.add(client.prepareIndex("heros", "entry", i+"")
.setSource(fileResult));
if(i%batch == 0){
bulkRequest.execute().actionGet();
bulkRequest = null;
bulkRequest = client.prepareBulk();
}
i++;
}
}
}