본문 바로가기
Elastic Seaerch

ElasticSearch 사용자 사전, 동의어, 불용어 적용

by yang sing 2023. 6. 9.

안녕하세요.

이번 포스팅은 검색엔진 중 하나인 ElasticSearch 줄여서 ES에서 사용자 사전, 동의어, 불용어를 작성하는 방법을 포스팅 하려고 합니다. 

검색 엔진에서 색인 작업을 하면서 사용자가 원하는 특정 단어로 검색, 비슷한 단어에 대해서 검색 또는 검색이 되면 안되는 단어를 구분하여 색일을 할 수 있는 ElasticSearch의 기능입니다.

 

1. 사용자 사전

- 사용자 사전이란 등록해둔 단어로 색인을 진행하며 해당 단어로 검색을 할 수 있게 해주는 사전이다. 
- 복합 명사와 같이 두가지 이상의 단어가 합쳐져서 하나의 단어로 사용되는 단어들에 대한 정의를 해준다. 
- 사전을 작성할 때에는 단일어와 복합어를 구분해서 작성을 한다.
- 단일어의 경우 단일어 하나만 작성, 복합어의 경우 복합어를 작성 후 띄어쓰기 구분으로 단어 원형을 작성

- 아래와 같이 텍스트 파일 형식으로 사전을 정의 후 elasticsearch가 설치 되어있는 디렉토리 하위에 있는 elasticsearch/config에 복사

custom_dictionary.txt

아버지
어머니
엄마
아빠
책가방 책 가방
삼성전자 삼성 전자
서울대
서울대학교 서울 대학교
...

 

2. 동의어 (유의어)

- 동의어 사전은 외래어 또는 사람들이 자주 실수하는 단어 또는 약어 등을 정의를 하는 사전이다.

- 사전을 작성을 할 때에는 단어를 ,(쉼표) 단위로 나열을 하며 작성한다. 

- 특정 단어를 치환을 하여 색인을 할 수 있는데 치환은 => 기로를 이용하여 작성한다. 

custom_synonym.txt

Elastcisearch, 엘라스틱서치
떡볶이, 덕뽁이, 떡복이
짜장면, 자장면
Hi => 안녕
...

 

3. 불용어

- 불용어는 검색 엔진에 색인을 할 때 특정 단어가 포함이 되면 색인을 하지 않게 해주는 사전이다 

- 불용어에는 의미가 없는 조사,접속사 등을 제외

- 줄개행 단위로 단어를 작성한다. 

stopwords.txt

바보
멍청이
기타 욕설
...

 

 

4. 인덱스 적용하기

{
    "settings": {
        "analysis": {
            "tokenizer": {
                "custom_nori": {
                    "type": "nori_tokenizer",
                    "decompound_mode": "mixed",
                    "user_dictionary": "custom_dictionary.txt"
                }
            },
            "filter": {
                "custom_stop": {
                    "type": "stop",
                    "stopwords_path": "stopwords.txt"
                },
                "suctom_synonym": {
                    "type": "synonym",
                    "synonyms_path": "custom_synonym"
                }
            },
            "analyzer": {
                "stop_filter_korean": {
                    "tokenizer": "custom_nori",
                    "decompound_mode": "none",
                    "filter": [
                        "custom_stop",
                        "suctom_synonym"
                    ]
                }
            }
        }
    },
    "mappings":{
    	"properties":{
        	...
        }
	}
}

- 검색 엔진 인덱스 도큐먼트를 생성 할 때 setting 값을 위와 같이 설정한다. 

- tokenizer에서 nori 토큰나이저를 사용하면서 위에서 작성한 사용자 사전을 추가로 설정한다. 

- filter에서 불용어와 동의어를 위에서 작성한 각각의 사전을 설정한다.

- analyzer에서 위에서 설정한 필터와 토큰나이저를 설정한다. 

 

참고 

 

https://icarus8050.tistory.com/49

https://codezip.tistory.com/684

'Elastic Seaerch' 카테고리의 다른 글

ElasticSearch Mapping 구조 추가 및 Reindex  (0) 2022.06.16
ElasticSearch mapping  (0) 2022.05.20
ElasticSearch란?  (0) 2022.05.20