검색 엔진 Sphinx에서 Elasticsearch로 교체중. 한글 형태소 분석기 어떻게 붙일지 한참 헤맸는데 정리.
버전: Elasticsearch 1.5.2
후보:
- arirang — 가장 많이 보임. 명사 추출 잘됨. 루씬 한국어 분석기 포팅
- seunjeon — mecab 기반. 은전한닢 프로젝트
- open-korean-text (트위터) — scala/java 호환. 트위터 한국어 처리에서 분기
일단 arirang으로 붙여봄. plugin으로 설치:
./bin/plugin --install http://.../elasticsearch-analysis-arirang-1.5.2.zip
index 만들때 analyzer 설정:
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"korean": {
"type": "custom",
"tokenizer": "arirang_tokenizer",
"filter": ["arirang_filter", "lowercase"]
}
}
}
}
},
"mappings": {
"product": {
"properties": {
"name": { "type": "string", "analyzer": "korean" }
}
}
}
}
"아이폰6 플러스 케이스" 로 분석 돌리면 → [아이폰, 6, 플러스, 케이스]. 꽤 잘 잘림. Sphinx는 bigram으로 쪼개놔서 "아이" 같은 걸로도 hit했는데, 형태소 방식이 정밀도는 훨씬 높음.
트레이드오프:
- 재현율 낮아질 수 있음. 신조어/오타에 약함 ("갤럭시S6" 같은거 분해 잘못하면 안맞음)
- dict 사용자 정의 추가 필요 ("아이폰6s" 등 최신 모델명)
- 인덱싱 속도는 bigram보다 살짝 느림
사용자 사전은 arirang.properties에 경로 지정. 매일 신상품명 뽑아서 사전에 반영하는 스크립트 따로 만듦.
seunjeon도 테스트해보고 싶은데 지금 일정상 일단 arirang으로 런칭 예정.
댓글 없음:
댓글 쓰기