이번 글에서는 2가지를 정리해 보려고 합니다.
- 노리(nori) 설치
- 노리(nori) 설정
노리(nori)가 필요한 이유를 간단히 설명드리면, Elasticsearch에서는 한글을 단어단위로 나눌때 복합어, 합성어 등 정확하게 단어를 나누기가 쉽지 않습니다. 그래서 한글을 형태소 분석을 하기위해서는 Elastic사에서 직접 개발한 한글 형태소 분석기인 노리(nori)가 필요합니다.
노리(Nori) 설치
노리(Nori)를 사용하기 위해서는 "bin/elasticsearch-plugin install analysis-nori" 명령어를 통해 설치를 진행해야 합니다.
아래와 같이 진행이 되었다면 설치가 완료된 것입니다. 설치가 완료되면 Elastic서버를 내렷다가 다시 올려줍니다.

이제 노리(Nori)를 사용 할 수 있게되었습니다.
그럼 기존 standartd 토크나이저와 nori 토크나이저의 차이를 알아보도록 하겠습니다.
아래 그림과 같이 standard 토크나이저는 단순 띄어쓰기 단위로만 단어를 분리 할 수 있었지만, nori 토크나이저는 "물", "산"과 같은 단어도 분리한 것을 확인 할 수 있습니다.
![]() |
![]() |
![]() |
![]() |
노리(nori) 설정
노리(Nori) 토크나이저에는 여러가지 옵션들이 있습니다.
- user_dictionary : 사용자 사전이 저장된 파일의 경로를 입력합니다.
- user_dictionary_rules : 사용자 정의 사전을 배열로 입력합니다.
- decompound_mode : 합성어의 저장 방식을 결정합니다.
먼저, user_dictionary와 user_dictionary_rules을 사용하여 사용자 정의 사전을 통한 검색방법을 알아보도록 하겠습니다. 아래와 같이 my_nori인덱스에 해물 사전을 포함한 토크나이저를 생성하였습니다.

그리고 검색을 하게 되면 "uesr_dictionary_rules"에 해물이라는 배열을 넣어두어서 가중치가 높아지게 됩니다.
아래를 보면 해물이라는 단어의 순위가 위로올라온 것을 알 수 있습니다.
하지만, "동", "해물", "과"와 같이 단어가 나뉘게 된다면 사용자가 "동해", "물"과 같은 단어로 검색하였을 때, 검색이 되지 않습니다. 이러한 점을 주의하여 사용하셔야 합니다.
![]() |
![]() |
그럼에도 불구하고 사용자 사전 검색방식은 특정 상황에서 자주 사용된다고 합니다. 예를들면, Youtube에는 많은 BJ들이 존재하는데 BJ명이 일반적인 사전에 등록되어 있지 않은경우가 많습니다. 그럴경우 BJ명을 검색한다 할지라고 그 BJ는 검색이 되지 않을 것입니다. 이러한 경우 사용자 사전 검색방식을 사용하여 검색을 가능하게 할 수 있는 방법입니다.
마지막으로 decompound_mode을 알아보도록 하겠습니다.
decompound_mode는 다음 3개의 값을 사용 할 수 있습니다.
- none : 어근을 분리하지 않고 완성된 합성어만 저장합니다.
- discard (디폴트) : 합성어를 분리하여 각 어근만 저장합니다.
- mixed : 어근과 합성어를 모두 저장합니다.
먼저 decompound_mode를 각각의 옵션으로 설정한 토크나이저를 my_nori인덱스에 저장합니다.

아래는 decompound_mode를 변경하여 검색한 예제입니다.
"none", "discard", "mixed"옵션에 따라 검색되는 단어가 달라지게 되므로 상황에 맞게 잘 사용하는 것이 좋을 것이라고 생각이 됩니다.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
'ELK스택' 카테고리의 다른 글
[Elasticsearch] Logstash 설치 및 실행 (0) | 2021.11.05 |
---|---|
[Elasticsearch] 데이터 색인과 텍스트 분석 (0) | 2021.10.27 |
[Elasticsearch] Query DSL : Bool Range (0) | 2021.10.23 |
[Elasticsearch] Query DSL : 풀텍스트(Full Text) (0) | 2021.10.17 |
[Elasticsearch] CRUD(입력, 조회, 수정, 삭제, 검색) (0) | 2021.10.11 |