[Elasticsearch] 5.x 용 Arirang 형태소 분석기 사용 시 주의 사항.
Elastic/Elasticsearch 2017. 4. 27. 10:05Elasticsearch에서 아리랑 형태소분석기 사용 시 주의사항)
사실 주의 사항 이라기 보다 1음절 처리에 대한 고민을 해보시면 좋을 것 같다는 의견 드립니다.
2.x 에서 사용하던 arirang 과 lucene 의 버전은
- morph 1.0.x
- arirang & lucene 5.x
입니다.
5.x 에서 사용하던 arirang 과 lucene 의 버전은
- morph 1.1.0
- arirang & lucene 6.x
입니다.
여기서 arirang morph 쪽 코드가 많이 개선 또는 변경이 되었습니다.
그리고 몇 가지 default 설정 값들에 대한 변화도 있는데요.
제가 발견한 대표적인 문제는 아래와 같습니다.
'울퉁불퉁한' 이라는 source 에 대한 analysis 시 발생을 합니다.
5.x 에서 analyze 한 결과는 아래와 같습니다.
울퉁불퉁한(N)/90:2
울퉁불퉁/Z
한/N
울퉁불퉁(N),하(t),ㄴ(e)/70:2
울퉁/N
불퉁/N
2.x 에서 analyze 한 결과는 아래와 같습니다.
울퉁불퉁(N),하(t),ㄴ(e)/70:2
울퉁/N
불퉁/N
이게 무슨 문제가 되느냐고 할 수 있는데
실제 색인을 실행 하면 position 정보가 5.x 에서 뒤집혀져 색인 되지 않는 문제를 보실 수 있습니다.
5.x 에서 _analyze 한 결과는 아래와 같습니다.
{
"tokens" : [
{
"token" : "울퉁불퉁한",
"start_offset" : 0,
"end_offset" : 5,
"type" : "korean",
"position" : 0
},
{
"token" : "울퉁불퉁",
"start_offset" : 0,
"end_offset" : 4,
"type" : "korean",
"position" : 0
},
{
"token" : "울퉁",
"start_offset" : 0,
"end_offset" : 2,
"type" : "korean",
"position" : 0
},
{
"token" : "한",
"start_offset" : 4,
"end_offset" : 5,
"type" : "korean",
"position" : 1
},
{
"token" : "불퉁",
"start_offset" : 2,
"end_offset" : 4,
"type" : "korean",
"position" : 2
}
]
}
2.x 에서 _analyze 한 결과는 아래와 같습니다.
{
"tokens" : [ {
"token" : "울퉁불통",
"start_offset" : 0,
"end_offset" : 4,
"type" : "korean",
"position" : 0
}, {
"token" : "울퉁",
"start_offset" : 0,
"end_offset" : 2,
"type" : "korean",
"position" : 0
}, {
"token" : "불통",
"start_offset" : 2,
"end_offset" : 4,
"type" : "korean",
"position" : 1
} ]
}
보이시나요?
어디가 다르고 문제가 되는지?
해결 방법은 CompoundNounAnalyzer 의 setDivisibleOne 설정을 false 로 하시면 위와 같은 문제를 해결 하실 수 있습니다.
2.x 에서는 KoreanFilter 쪽에 조건문이 있었는데 5.x 에서는 주석 처리가 되어 있더라구요.
또는 이것 저것 다 귀찮다고 하시면 그냥 '한' 에 대한 불용어 처리를 하셔도 될 것 같습니다.