ElasticSearch 6.4.x 노리(Nori) 형태소 분석기

ElasticSearch 는 루신을 기반으로 하는 전문 텍스트 검색 엔진이다. ElasticSearch 는 어떤 문장에 대해서 이를 분해한다. 문제는 ElasticSearch 가 외국에서 만든거라서 영어를 기반으로한 문장에 대해서는 분해하고 분석해준다. 하지만 그외에 대해서는 공백을 기반으로 문장을 분석한다.

여기서 문장에 대해서 좀 더 생각을 해봐야 한다. 문장을 분석할때에는 약간의 지식이 필요하다. 예를들어 다음과 같은게 있다고 하자.

고양이는 귀엽다

ElasticSearch 가 이 문장을 분석하면 ‘고양이는’, ‘귀엽다’ 로 분해한다. 하지만 이 문장에는 ‘고양이’ 라는 명사가 있고 ‘는’ 이라는 조사, ‘귀엽다’ 라는 동사가 존재한다. (정확한지는 나도 잘 모르겠다.)

이렇게 ElasticSearch 가 한글을 분석할 수 있도록하기 위해서는 한글이 이해시킬 수 있는 일종의 분석엔진 같은 것이 필요하게 되는데 이것이 바로 ‘한글 형태소 분석기’ 라고 한다. 몇가지 한글 형태소 분석기 엔진이 존재한다.

  • 아리랑
  • 은전한잎
  • 노리(nori)

ElasticSearch 를 제작하는 Elastic 사에서는 한글 형태소 분석기 Nori(노리) 를 내놓았다. 최신버전에 잘 설치되며 잘 동작한다.

설치

설치는 플러그인 설치로 끝난다.

설치할때는 마스터 노드, 데이터 노드에 설치를 해야 한다.

인덱스 분석에 노리 추가

ElasticSearch 는 알고 있겠지만 Index 단위로 데이터를 다룬다. Index 에는 데이터를 담기위한 그릇을 정의해야 하는데, 이것이 바로 Mapping 이다. 이 매핑에는 각 필드(Field)에 대한 데이터 타입을 정의하는데, 여기서 Index 에 대한 형태소 분석기로서 노리(Nori) 를 지정해줘야 한다. 기사를 인데싱하는 매핑에 예를 들면 다음과 같다.

analysis 에서 tokenizer 에 nori_tokenizer 를 지정하고 analyzer 에 이것을 korean 으로 지정한다.

이렇게 매핑(Mapping) 을 정의하고 다음과 같이 한글 데이터를 입력해준다.

 

테스트

먼저 인덱스 검색대신 문장에 대한 분석을 어떻게 하는지에 대해서 살펴보자.

위 내용을 보면 기본 형태소 분석기를 이용해 ‘고양이 냐옹냐옹’ 을 분석한 결과다. 공백을 기준으로만 한글을 분석했음을 알 수 있다. 그렇다면 설치한 노리 한글 형태소 분석기는 어떤 결과를 보여줄까?

기본 형태소 분석기와는 다르게 한글에 대한 형태소 분석의 결과를 보여준다. ‘고양이’가 명사임을 인식하고 있다.

한글 형태소 분석은 이런것이다. 조사와 합쳐진 명사만을 검색어로 입력하더라도 검색 결과를 보여준다.

Post a comment

You may use the following HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">