본문 바로가기
ELK

elasticsearch java high level rest client에서 analyze 사용

by AndoneKwon 2020. 8. 5.

High Level Rest Client

JAVA에서 elasticsearch를 사용하기 위한 것으로 index를 생성,삭제 등의 기능을 지원하며 이것을 통해서 쿼리를 따로 작성하지 않고 간단하게 기능을 구현할 수 있다.

기본적인 레퍼런스는 아래 링크에 잘 설명되어 있지만 아무래도 영어다보니 의사소통이 잘 안될수 있어서 올린다.

참고로 High Level Rest Client가 아닌 Low Level Rest Client를 사용한다면 더 복잡한 쿼리를 직접 작성할 수 있다.

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high.html

[

Java High Level REST Client | Java REST Client [7.8] | Elastic

The Java High Level REST Client works on top of the Java Low Level REST client. Its main goal is to expose API specific methods, that accept request objects as an argument and return response objects, so that request marshalling and response un-marshalling

www.elastic.co

](https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high.html)

위의 홈페이지에 들어가면

Analyzer?

말그대로 분석기인데, 일반적으로 형태소를 분석하는데에 사용한다.

한국어를 분석하기 위한것으로는 Nori-Analyzer라는 분석기를 6.8버전 이후에는 공식적으로 지원한다.

이것을 이용하면 예를들어

{
  "tokenizer": "nori_tokenizer",
  "text": [
    "아버지가 방에 들어가신다."
  ]
}

이렇게 썼을때


{
"tokens": [
  {
    "token": "아버지",
    "start_offset": 0,
    "end_offset": 3,
    "type": "word",
    "position": 0
  }
  ,
  {
    "token": "가",
    "start_offset": 3,
    "end_offset": 4,
    "type": "word",
    "position": 1
  }
  ,
  {
    "token": "방",
    "start_offset": 5,
    "end_offset": 6,
    "type": "word",
    "position": 2
  }
  ,
  {
    "token": "에",
    "start_offset": 6,
    "end_offset": 7,
    "type": "word",
    "position": 3
  }
  ,
  {
    "token": "들어가",
    "start_offset": 8,
    "end_offset": 11,
    "type": "word",
    "position": 4
  }
  ,
  {
    "token": "시",
    "start_offset": 11,
    "end_offset": 13,
    "type": "word",
    "position": 5
  }
  ,
  {
    "token": "ᆫ다",
    "start_offset": 11,
    "end_offset": 13,
    "type": "word",
    "position": 6
  }
  ]
}

다음과 같이 형태소 분석이 완료된 것을 알 수 있다.

이제 이것을 자바에서 사용하기 위해서는 우선 dependency를 추가한다.

gradle spring-boot 기준으로는

implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'

위와 같이 작성하고

AnalyzeRequest request = AnalyzeRequest.buildCustomAnalyzer("ngram")
                .build("동해물과 백두산이");

여기서 buildCustomAnalyzer에 원하는 토크나이저(Analyze)를 쓰고 뒤에 build에 원하는 text를 집어넣으면 된다.