레이블이 Elasticsearch인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Elasticsearch인 게시물을 표시합니다. 모든 게시물 표시

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으로 런칭 예정.