2012-07-11 9 views
5

ElasticSerach를 사용하고 있으며 영어로 기본 형태소 분석을 설정하려고합니다. 그래서 기본적으로, 전투기는 싸움을하거나 싸움의 뿌리를 포함하는 단어를 반환합니다.ElasticSearch Stemming

저는 이것을 구현하는 방법이 조금 혼란 스럽습니다. 분석기, 토큰 화기 및 필터를 통해 읽었으며 ElasticSearch에서 사용할 수있는 여러 가지 형태소 분석 알고리즘이 있습니다. 나는 눈 조합, 줄기 세포, 포터 줄기 또는 동의어 필터 중 어느 조합을 사용해야할지 잘 모릅니다.

또한 매핑의 예가 실제로 도움이 될 것입니다.

답변

15

difference between stemming and lemmatisation을 기억하십시오. 스템 밍 알고리즘은 일련의 규칙 (및/또는 예를 들어 KStem의 경우와 같이 사전 검색)을 적용하고 결과가 적절한 부작용 '루트'(즉, 보조 정리)가 될 것이라고 보장하지 않습니다.

예를 들어, 'marinate'와 'marines'라는 단어는 Porter stemmer에 의해 'marin'으로 변환 될 것입니다. 이것은 상당히 'aggresive'한 것으로 간주됩니다 - 많은 수의 단어에 대해 동일한 줄기를 생성하는 경향이 있습니다 . 예를 들어 S-Stemmer는 단 복수형 (org.apache.lucene.analysis.en.EnglishMinimalStemFilter) 만 변환하는 보수적 인 형식입니다.

연구 논문에서 발견 된 형태소 분석 방법의 비교는 KSTem이 영어 텍스트에 가장 효과적이라고 생각하지만 형태소 분석기의 선택은 문서의 어휘에 크게 의존합니다. 줄기 성능을 최적화하는 것이 아니라 검색 엔진의 성능을 목표로하므로 시스템의 다른 요소 (특히 쿼리 확장)와 분리하여 측정하는 것은 실제로 좋은 생각이 아닙니다.

가장 좋은 해결책은 elasticsearch (예제 매핑은 here으로 볼 수 있음)에서 사용할 수있는 여러 형태의 스 트리머를 시도하고 결과의 정밀도와 리콜을 관찰하는 것입니다. 테스트 스위트를 가지고 있지 않다면, 가장 일반적인 방법은 '전형적인'쿼리를 수행하고 '이상한'결과 (스 메머가 너무 공격적으로 작용하는 경우) 또는 '좋은'결과가 무시되는 경우 (너무 보수적 인 경우) 줄기).