2013-08-22 3 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와 같은 그녀의 속성 중 하나를 변경해야 할 수도 있기 때문입니다. 그리고 나는 원더걸스 (Wonder Women) 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

제대로 코드를 들여하십시오로 사용할 수있는 필드를 가리 키도록 _id 필드의 경로를 설정, 그것은 ... 같은 – ramseykhalaf

+0

감사를 읽고 정말 어렵다. 들여 쓰기를 수정했습니다. 이 코드는 라이브러리가있는 한 올바르게 컴파일해야합니다. User 클래스는 Name이라는 중첩 클래스를 포함하는 임의의 클래스이므로 중첩 된 jsons를 실험 할 수 있습니다. 제공 할 수있는 도움에 감사드립니다. –

+1

나는 당신의 질문을 여러 번 읽었으며 그것을 이해하는 데 어려움을 겪고 있습니다 (비록 Java elasticsearch 플러그인을 사용하지 않았지만). 'SN_NO' 란 무엇입니까? 나는 당신의 코드에서 그것을 볼 수 없다 ... – ramseykhalaf

답변

0

당신은 유형의 매핑에이 작업을 수행 할 수 있습니다. 이 _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" 
       } 
      } 
     } 
    } 
} 

}