20150514

Elasticsearch 1.5 한글 분석기

검색 엔진 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으로 런칭 예정.

댓글 없음: