使用java api for Elasticsearch如何在索引期间映射doc id

时间:2013-08-22 19:54:56

标签: java elasticsearch elasticsearch-plugin

我正在将数据索引到ElasticSearch引擎服务器。我有一个名为User的域对象。 以下是我正在使用的相关代码。现在,elasticsearch中的_id属性设置为此命令的增量值,如下所示:

bulkRequest.add(client.prepareIndex("heros", "entry", i+"")

但是我不希望增加任意ID,因为神奇女侠也会有一个SN_NO作为她文档的id。如何将此Domain对象的唯一ID(SN_NO)映射到elasticsearch引擎中的_id?我想要这个的原因是,我可能不得不改变她的一个属性,例如腰围,例如随着时间的推移。而且我不希望弹性搜索引擎包含2个神奇女人,一个瘦腰,另一个胖子作为一个愚蠢的例子。

很抱歉这个很长的问题,我努力让它变得有趣阅读。

提前谢谢!

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

    }
}

}

1 个答案:

答案 0 :(得分:0)

您可以在类型的映射中执行此操作。 将_id字段的路径设置为指向要用作_id

的字段
{
"YourType": {
    "dynamic": "true",
    "_id": {
        "path": "new_id"
    },
    "_timestamp": {
        "enabled": true,
        "store": true
    },
    "properties": {
        "new_id": {
            "type": "string",
            "fields": {
                "raw": {
                    "index": "not_analyzed",
                    "type": "string"
                }
            }
        }
    }
}

}