[웹] Elastic Search 설치 및 JAVA 에서 사용하기

elasticsearch  사용시 주의할 점 / elasticsearch 의 java driver / java client / java api




ElasticSearch 설치

elasticsearch는 무설정 설치가 가능하다. 홈페이지에서 다운로드 받아서 압축을 풀고 바로 실행하면 된다.


Java API 사용

client / server elastic version

되도록이면 major 버전을 맞추라고 한다. elasticSearch 의  client 와 elasticSearch server 의 major 버전을 맞추라고 한다.

Node node = NodeBuilder.nodeBuilder().client(true).node();
     Client client = node.client();

        SearchResponse sr = client.prepareSearch("logstash-2015.03.16")
                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                .setQuery(QueryBuilders.matchAllQuery())
                .execute()
                .actionGet();





        node.close();


JVM 버전 문제

아래 글에서 얘기 하듯이 JVM 의 버전이 달라도 exception 이 발생하는데, 댓글에 보면 java 가 InetAddress 를 serialized 할 때 생기는 버그인데 이것을 elasticsearch 가  이용하기 때문이란다.

node 간 jvm 버전

node 들끼리 jvm 버전도 맞춰야 한다

그래서 아래의 case 에 대한 버전을 맞춰야 한다.
  • elasticsearch server 버전 ---- client elasticsearch library version(1.5.0)
  • client jvm 버전(1.7.0_51) ---- elasticsearch server jvm 버전(??)
그렇지 않으면 아래같은 exception 을 볼 수 있다.
RemoteTransportException[Failed to deserialize exception response from stream]; nested: TransportSerializationException[Failed to deserialize exception response from stream]; nested: EOFException;


target node

위처럼 node 를 사용하는 경우에는 host ip 등을 직접 적어줄 필요가 없다. cluster name 만 설정해 주면 알아서 retrieve 할 target host(node) 를 찾아간다.


cluster name 설정

/src/main/resources/elasticsearch.yml 을 만들고
cluster.name: myclustername
만 적어줘도 clustername 이 변경된다.

TransportClient 가 NodeBuilder 보다 나은 점, NodeBuilder 가 TransportClient 보다 나은 점을 이야기 해 준다. 그리고 spring 에 spring-elasticsearch 가 있다고 이야기 해 준다.


Node, Transport Client As a Singleton



Node 나 Transport Client 는 singleton 으로 사용하면 된다고 한다. 위의 글의 kimchy 의 답변을 확인하자.



References

  1. Client, Java API, ElasticSearch
  2. ElasticSearch: Java API | Javalobby




댓글 없음:

댓글 쓰기