Elasticsearch cluster 업그레이드를 위해 먼저 한글형태소 분석기 업그레이드가 필요합니다.
기본적으로 한글형태소 분석기 플러그인을 만들기 위해서는 아래의 내용을 어느 정도는 잘 알고 다룰수 있어야 합니다.
- Elasticsearch
- Lucene
- Arirang
Arirang 은 아래 링크를 통해서 소스와 jar 파일을 구하실 수 있습니다.
최근에 수명님 이외 mgkaki 님이 컨트리뷰션을 해주시고 계신듯 합니다. :)
Lucene & Arirang 변경 사항)
- lucene 6.1 과 6.2 의 패키지 구조가 변경이 되고 클래스도 바뀌었습니다.
- arirang 에서 제공하던 pairmap 관련 버그가 수정되었습니다. (그전에 수정이 되었을수도 있습니다. ^^;)
- lucene 에서 제공 되던 CharacterUtils 가 refactoring 되었습니다.
- arirang 에서 KoreanTokenizer 에 선언된 CharacterUtils 를 변경된 내용에 맞게 고쳐주어야 합니다.
Remove CharacterUtils.getInstance()
CharacterUtils.codePointAt(...) to Character.codePointAt(...)
- arirang 6.2 source를 내려 받으시면 위 변경 내용이 반영 되어 있습니다.
- arirang.morph 1.1.0 을 내려 받으셔야 합니다.
Elasticsearch Plugin 변경 사항)
플러그인 개발 변경 사항은 기본 구조 변경이 많이 되었기 때문에 수정 사항이 많습니다.
보기에 따라서 적을 수도 있지만 판단은 각자의 몫으로 ^^
- arirang.lucene-analyzer 와 arirang-morph 업데이트가 되어야 합니다.
- 기존에 binding 하던 AnalysisBinderProcessor를 사용하지 않습니다.
- 이제는 Plugin, AnalysisPlugin 에서 등록을 진행 합니다.
public class AnalysisArirangPlugin extends Plugin implements AnalysisPlugin {
@Override
public Map<String, AnalysisProvider<TokenFilterFactory>> getTokenFilters() {
return singletonMap("arirang_filter", ArirangTokenFilterFactory::new);
}
@Override
public Map<String, AnalysisProvider<TokenizerFactory>> getTokenizers() {
Map<String, AnalysisProvider<TokenizerFactory>> extra = new HashMap<>();
extra.put("arirang_tokenizer", ArirangTokenizerFactory::new);
return extra;
}
@Override
public Map<String, AnalysisProvider<AnalyzerProvider<? extends Analyzer>>> getAnalyzers() {
return singletonMap("arirang_analyzer", ArirangAnalyzerProvider::new);
}
}
- AnalyzerProvider, TokenFilterFactory, TokenizerFactory 내 생성자 argument 가 바뀌었습니다.
IndexSettings indexSettings, Environment env, String name, Settings settings
- assemble 하기 위한 plugin.xml 내 outputDirectory 가 elasticsearch 로 변경이 되었습니다.
- outputDirectory 가 elasticsearch 로 작성되어 있지 않을 경우 에러가 발생 합니다.
이 정도 변경 하고 나면 이제 빌드 및 설치를 하셔도 됩니다.
이전 글 참고) [Elasticsearch] Lucene Arirang Analyzer Plugin for Elasticsearch 5.0.1
※ 플러그인을 만들면서 우선 lucene 6.1 과 6.2 가 바뀌어서 살짝 당황 했었습니다.
당연히 6.x 간에는 패키지 구조에 대한 변경은 없을거라는 기대를 했었는데 이게 잘못이였던 것 같습니다.
역시 lucene 5.x 에서 6.x 로 넘어 가기 때문에 elasticsearch 5.x 는 많이 바뀌었을 거라는 생각은 했었구요.
그래도 생각했던 것 보다 오래 걸리지는 않았지만 역시 참고할 만한 문서나 자료는 어디에도 없더라구요.
소스 보는게 진리라는건 변하지 않는 듯 싶내요. 작성하고 보니 이게 개발기인지 애매하내요. ^^;
소스코드)
https://github.com/HowookJeong/elasticsearch-analysis-arirang