2013-08-22 59 views
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++; 

    } 
} 

}

+0

請正確縮進代碼,這真的很難讀這樣的... – ramseykhalaf

+0

感謝。我已經修好了縮進。只要你有庫,這段代碼就可以正確編譯:User類是任意的,它包含一個名爲Name的嵌套類,以便我可以試驗嵌套的jsons。感謝您提供任何幫助。 –

+1

我已經多次閱讀過你的問題,並且很努力去理解它(儘管我還沒有使用Java彈性搜索插件)。什麼是'SN_NO'?我在你的代碼中看不到它... – ramseykhalaf

回答

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" 
       } 
      } 
     } 
    } 
} 

}

相關問題