java 언어로 짠 multiget 슈도 코드이다. 쓸만하다. 


개발해보니, rest api와 달리 에러에 대한 처리 내용이 없는 것이 결정적인 단점이다. GetResponse의 api에 전적으로 의존하게 된다.  그래서, 잘못된 매개변수로 존재하지 않는 것인지, 진짜 데이터가 없어서 난 것인지 분간하기 어렵다는 단점이 있다. (차라리 exception이 발생하도록 설계되거나 getError() 메소드가 있었으면 좋았을 텐데..)


private TransportClient searchClient;

.... MultiGetRequestBuilder multiGetRequestBuilder = searchClient.prepareMultiGet();

MultiGetRequest.Item item1 = new MultiGetRequest.Item("myindex", "mytype", "id1"); MultiGetRequest.Item item2 = new MultiGetRequest.Item("myindex", "mytype", "id2");
multiGetRequestBuilder.add(item1); multiGetRequestBuilder.add(item2);

List<String> ids = Lists.newArrayList();
MultiGetResponse response = multiGetRequestBuilder.execute().actionGet(500);
if (response != null && response.getResponses() != null) {
MultiGetItemResponse[] multiGetItemResponse = response.getResponses();
for (MultiGetItemResponse multiGetResponse : multiGetItemResponse) {
GetResponse getResponse = multiGetResponse.getResponse();

if (getResponse != null) {

if (getResponse != null && getResponse.isExists()) {
ids.add(getResponse.getId());
}
} else {
logger.error("getResponse : null");
}
}

}



참고로 rest api는 다음과 같다.


성공 예)


$ curl -XGET 'http:/intern.google.com:9200/action_list/action/_mget' -d '{
    "ids" : ["1111"]
}'

{"_index":"action_list","_type":"action","_id":"1111","_version":1,"found":true,"_source":{}}
 

실패 예)  - json에 error 키를 발견할 수 있다.


$ curl -XGET http://intern.google.com:9200/action_list/action/_mget   -d '{
    "ids" : ["1111"]
}'

{"docs":[{"_index":"action_list","_type":"action","_id":"1111","error":"[action] missing"}]}



Posted by '김용환'

댓글을 달아 주세요