Elasticsearch 한글 형태소 분석기 적용 및 검색 품질 개선
문제 상황
서비스에 Elasticsearch 7.8을 도입했는데, 기본 standard analyzer로는 한글 검색이 제대로 동작하지 않았다. "개발자 채용"을 검색했을 때 "개발"만 입력해도 원하는 결과가 나오지 않는 문제가 있었다.
nori 형태소 분석기 적용
Elasticsearch에 기본 포함된 nori 분석기를 사용하기로 했다. 별도 플러그인 설치 없이 바로 사용할 수 있는 것이 장점이었다.
{
"settings": {
"analysis": {
"analyzer": {
"korean": {
"type": "custom",
"tokenizer": "nori_tokenizer",
"filter": ["nori_posfilter"]
}
},
"filter": {
"nori_posfilter": {
"type": "nori_part_of_speech",
"stoptags": ["E", "IC", "J", "MAG", "MM", "SP", "SSC", "SSO", "SC", "SE", "XPN", "XSA", "XSN", "XSV", "UNA", "NA", "VSV"]
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "korean"
}
}
}
}
조사, 어미 등 불필요한 품사를 제거하는 필터를 추가했다. 검색 시 핵심 명사만 남겨 정확도를 높였다.
동의어 처리
업무 도메인 특성상 "프론트엔드", "프론트엔드", "front-end" 등 다양한 표기가 혼재했다.
{
"filter": {
"synonym": {
"type": "synonym",
"synonyms": [
"프론트엔드, 프론트엔드, frontend, front-end",
"백엔드, 백엔드, backend, back-end"
]
}
}
}
동의어 필터를 추가하여 다양한 표기를 통일했다.
결과
재인덱싱 후 검색 품질이 눈에 띄게 개선되었다. "개발" 검색 시 "개발자", "개발팀" 등 관련 문서가 모두 조회되었고, 영문 표기 혼용 문제도 해결되었다.
형태소 분석기 선택 시 은전한닢, Komoran 등도 고려했지만, 운영 편의성을 위해 기본 제공되는 nori를 선택한 것이 적절했다고 판단된다.