[elasticsearch] Java API : Client
Elastic/Elasticsearch 2013. 4. 5. 19:01본 문서는 개인적인 테스트와 elasticsearch.org 그리고 community 등을 참고해서 작성된 것이며,
정보 교환이 목적입니다.
잘못된 부분에 대해서는 지적 부탁 드립니다.
(예시 코드는 성능 및 보안 검증이 되지 않았습니다.)
[elasticsearch java api 리뷰]
원문 링크 : http://www.elasticsearch.org/guide/reference/java-api/client/
Java API 를 이용해서 elasticsearch 로 연결하는 두 가지 방법을 설명 하고 있습니다.
1. Node Client
2. Transport Client
※ 커뮤니티에서 관련 글들을 찾다 보면 kimchy 가 추천 하는 방식은 "TransportClient" 를 이용하는 것입니다.
원문에서 보면 elasticsearch 를 사용하면 주의 해야 하는 부분이 나와 있습니다.
사용하시면서 꼭 숙지 하시면 한번 쯤 실수 할 수 있는 오류를 범하지 않을 수 있습니다.
Important:
Please note that you are encouraged to use the same version on client and cluster sides. You may hit some incompatibilities issues when mixing major versions.
※ 요점은 버전을 혼합해서 사용하지 말라는 것입니다. (No Node Available Exception 의 이유가 됩니다.)
원문에 예제 코드가 잘 나와 있기 때문에 제가 테스트 한 코드를 아래 공유 합니다.
ClientConfig clientConfig = ClientConfig.getInstance();
// cluster.name 을 안 줄 경우 NoNodeAvailable 에러 발생.
settings = ImmutableSettings
.settingsBuilder()
.put("cluster.name", clientConfig.getProperty("cluster.name"))
.build();
client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(clientConfig.getProperty("cluster.host1")
, Integer.parseInt(clientConfig.getProperty("cluster.host1.port"))))
.addTransportAddress(new InetSocketTransportAddress(clientConfig.getProperty("cluster.host2")
, Integer.parseInt(clientConfig.getProperty("cluster.host2.port"))));
- ClientConfig : elasticsearch 를 사용하기 위해 필요한 환경설정 값을 구성
elasticsearch client 가 가지는 properties 와 attributes 테스트를 위한 코드
@Test
public void testClientProperties() throws Exception {
clientManager.openClient();
Client client = clientManager.getClient();
AdminClient admin = client.admin();
ClusterAdminClient cluster = admin.cluster();
IndicesAdminClient indices = admin.indices();
ClusterStateRequestBuilder request = cluster.prepareState();
ClusterStateResponse response = request.execute().actionGet();
ClusterState state = response.state();
AllocationExplanation allocation = state.allocationExplanation();
ClusterBlocks block = state.blocks();
MetaData meta = state.metaData();
RoutingNodes routingNode = state.routingNodes();
RoutingTable routingTable = state.routingTable();
ImmutableSettings settings = (ImmutableSettings) meta.persistentSettings();
log.debug("{}", response.clusterName()); // Cluster [test.gruter.es.cluster]
log.debug("{}", response.getClusterName());
log.debug("{}", response.getHeaders());
log.debug("{}", response.getState());
log.debug("{}", response.state());
log.debug("{}", state.allocationExplanation());
log.debug("{}", state.blocks());
log.debug("{}", state.metaData());
log.debug("{}", state.nodes()); // {[test.gruter.es.cluster2.node][sIj29f-KQziaIbccn_jndg][inet[/127.0.0.1:9301]]{master=true},[test.gruter.es.cluster1.node][kWNDF8SLTxS_axatGmImIg][inet[/127.0.0.1:9300]]{master=true},}
log.debug("{}", state.routingNodes());
log.debug("{}", state.routingTable());
log.debug("{}", state.version());
log.debug("{}", allocation.explanations());
log.debug("{}", block.indices());
log.debug("{}", meta.concreteAllIndices());
log.debug("{}", meta.concreteAllOpenIndices());
log.debug("{}", meta.getTotalNumberOfShards());
log.debug("{}", meta.persistentSettings());
log.debug("{}", meta.settings());
log.debug("{}", routingNode.getMetaData());
log.debug("{}", routingNode.getNodesToShards());
log.debug("{}", routingNode.getRoutingTable());
log.debug("{}", routingNode.getUnassigned());
log.debug("{}", routingNode.prettyPrint());
log.debug("{}", routingTable.getIndicesRouting());
log.debug("{}", routingTable.prettyPrint());
log.debug("{}", settings.getAsMap());
log.debug("{}", state.nodes().dataNodes());
log.debug("{}", state.nodes().getSize());
for ( int i=0; i<state.nodes().getSize(); i++ ) {
log.debug("{}", state.nodes().dataNodes().keySet().toArray()[i]);
}
Set entries = state.nodes().dataNodes().entrySet();
Iterator entryIter = entries.iterator();
while (entryIter.hasNext()) {
Map.Entry entry = (Map.Entry)entryIter.next();
Object key = entry.getKey();
Object value = entry.getValue();
log.debug("key : {}", key);
log.debug("value : {}", value);
}
}
※ 단순히 테스트 및 각 속성들을 보기 위한 코드 입니다.