1
我正在將數據編入索引到ElasticSearch引擎服務器。我有一個名爲User的域對象。 下面是我使用的相關代碼。眼下,elasticsearch的_id
屬性設置爲該命令的增量值,如下所示:在Elasticsearch中使用java api如何在索引期間映射文檔ID
bulkRequest.add(client.prepareIndex("heros", "entry", i+"")
但我不想任意ID增加,因爲神奇女俠也將有SN_NO作爲id爲她的文件。如何將此域對象的唯一ID(SN_NO)映射到elasticsearch引擎中的_id
?我想這樣做的原因是,我可能不得不隨着時間的推移改變她的一個屬性,例如waist_size。我不希望彈性搜索引擎包含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++;
}
}
}
請正確縮進代碼,這真的很難讀這樣的... – ramseykhalaf
感謝。我已經修好了縮進。只要你有庫,這段代碼就可以正確編譯:User類是任意的,它包含一個名爲Name的嵌套類,以便我可以試驗嵌套的jsons。感謝您提供任何幫助。 –
我已經多次閱讀過你的問題,並且很努力去理解它(儘管我還沒有使用Java彈性搜索插件)。什麼是'SN_NO'?我在你的代碼中看不到它... – ramseykhalaf