[Elasticsearch] arirang analyzer offset 추출 오류.
Elastic/Elasticsearch 2015. 11. 10. 15:38[아래 문제 회피]
기본적으로 pairmap 관련 기능을 사용하지 않으면 문제를 회피 할 수 있습니다.
더 근본적으로는 관련 기능에 대한 개선이 필요 하겠지만 일단 빠르게 해결 하기 위해서 코드를 제거해 보겠습니다.
대상파일)
KoreanTokenizer.java
삭제 대상코드)
if(pairstack.size()>0 && pairstack.get(0)==c) {
pairstack.remove(0);
continue;
}
int closechar = getPairChar(c);
if(closechar!=0) {
if((pairstack.size()==0 || pairstack.get(0)!=closechar) && length>0) {
pairstack.add(0,closechar);
break;
} else {
pairstack.add(0,closechar);
continue;
}
}
▶ 위 코드를 주석 처리 후 빌드해서 배포 하시면 됩니다.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
최근에 arirang analyzer plugin을 만들어서 elasticsearch에서 사용하고 있습니다.
사용하다 발견된 버그 공유 합니다.
[색인원본문서]
(‘14.8월)의 일환으로 ’15.3.3 상반기중(행복서울대학교 등 활용)
[Arirang Analyzed]
{
"tokens": [
{
"token": "14",
"start_offset": 2,
"end_offset": 4,
"type": "word",
"position": 0
},
{
"token": "8월",
"start_offset": 5,
"end_offset": 7,
"type": "korean",
"position": 1
},
{
"token": "의",
"start_offset": 8,
"end_offset": 9,
"type": "korean",
"position": 2
},
{
"token": "일환",
"start_offset": 10,
"end_offset": 12,
"type": "korean",
"position": 3
},
{
"token": "15",
"start_offset": 16,
"end_offset": 18,
"type": "word",
"position": 4
},
{
"token": "3",
"start_offset": 19,
"end_offset": 20,
"type": "word",
"position": 5
},
{
"token": "3",
"start_offset": 21,
"end_offset": 22,
"type": "word",
"position": 6
},
{
"token": "상반기중행복서울대학교",
"start_offset": 23,
"end_offset": 34,
"type": "korean",
"position": 7
},
{
"token": "상반",
"start_offset": 23,
"end_offset": 25,
"type": "korean",
"position": 7
},
{
"token": "기중",
"start_offset": 25,
"end_offset": 27,
"type": "korean",
"position": 8
},
{
"token": "행복",
"start_offset": 27,
"end_offset": 29,
"type": "korean",
"position": 9
},
{
"token": "서울",
"start_offset": 29,
"end_offset": 31,
"type": "korean",
"position": 10
},
{
"token": "대학교",
"start_offset": 31,
"end_offset": 34,
"type": "korean",
"position": 11
},
{
"token": "등",
"start_offset": 36,
"end_offset": 37,
"type": "korean",
"position": 12
},
{
"token": "활용",
"start_offset": 38,
"end_offset": 40,
"type": "korean",
"position": 13
}
]
}
여기서 보시면 "행복"에서 부터 offset 정보가 하나씩 줄어든것을 확인 할 수 있습니다.
[원본 변경을 통한 문제해결 - 하나]
(‘14.8월)의 일환으로 15.3.3 상반기중(행복서울대학교 등 활용)
- ’15 (apostrophe) 제거
[원본 변경을 통한 문제해결 - 둘]
(‘14.8월’)의 일환으로 ’15.3.3 상반기중(행복서울대학교 등 활용)
- 8월’ (apostrophe) 추가
[원본 변경을 통한 문제해결 - 셋]
(14.8월)의 일환으로 ’15.3.3 상반기중(행복서울대학교 등 활용)
- ’14 (apostrophe) 제거
[원본 변경을 통한 문제해결 - 넷]
‘14.8월)의 일환으로 ’15.3.3 상반기중(행복서울대학교 등 활용)
- ( 제거
[해결 방법?]
- 복합 pairmap 구성에 대한 arirang analyzer 오류 수정 (tokenizer 와 filter 쪽 수정이 필요해 보입니다.)
- 원본에 대한 character normalization 작업을 통해 filter 를 합니다.