![](/img/trans.png)
[英]ElasticSearch: Java High Level API - Index doc with dynamic ID
[英]Using the java api for Elasticsearch how can I map the doc id during indexing
我正在將數據索引到ElasticSearch引擎服務器。 我有一個名為User的域對象。 以下是我正在使用的相關代碼。 現在, _id
中的_id
屬性設置為該命令的增量值,如下所示:
bulkRequest.add(client.prepareIndex("heros", "entry", i+"")
但是我不希望增加任意ID,因為“神奇女俠”也將使用SN_NO作為其文檔的ID。 如何在Elasticsearch引擎中將此Domain對象的唯一ID(SN_NO)映射到_id
? 我想要這樣做的原因是,例如,隨着時間的推移,我可能不得不更改她的屬性之一,例如腰圍大小。 我不希望Elasticsearch引擎包含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++;
}
}
}
您可以在類型的映射中執行此操作。 設置_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"
}
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.