[elasticsearch] java- multiget 예제 (주의사항)
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는 다음과 같다.
성공 예)
실패 예) - json에 error 키를 발견할 수 있다.