2

データを ElasticSearch エンジン サーバーにインデックス付けしています。User というドメイン オブジェクトがあります。以下は、私が使用している関連コードです。現在、_idelasticsearch の属性は、以下に示すように、このコマンドからの増分値に設定されています。

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++;

    }
}

}

4

1 に答える 1