영어는 띄어쓰기로 단어가 명확하게 구분되다보니 standard tokenizer(공백 또는 ,, ., !, ?와 같은 문장 부호를 기준으로 자름)로도 잘 나눌 수 있다.
GET /boards/_analyze
{
"field": "content",
"text": "I like bananas"
}
응답값
{
"tokens": [
{
"token": "i",
"start_offset": 0,
"end_offset": 1,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "like",
"start_offset": 2,
"end_offset": 6,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "banana",
"start_offset": 7,
"end_offset": 14,
"type": "<ALPHANUM>",
"position": 2
}
]
}
하지만 한글은 좀 다르다. 조사(-는, -를), 어미(-다, -해요)를 붙여서 쓰는 말이 많다. 그리고 띄어쓰기가 비교적 자유롭다. 그러다보니 standard tokenizer로 단어를 나눠보면 제대로 잘 나누지 못하는 문제가 생긴다.
POST /boards/_analyze
{
"field": "content",
"text": "백화점에서 쇼핑을 하다가 친구를 만났다."
}
응답값
{
"tokens": [
{
"token": "백화점에서",
"start_offset": 0,
"end_offset": 5,
"type": "<HANGUL>",
"position": 0
},
{
"token": "쇼핑을",
"start_offset": 6,
"end_offset": 9,
"type": "<HANGUL>",
"position": 1
},
{
"token": "하다가",
"start_offset": 10,
"end_offset": 13,
"type": "<HANGUL>",
"position": 2
},
{
"token": "친구를",
"start_offset": 14,
"end_offset": 17,
"type": "<HANGUL>",
"position": 3
},
{
"token": "만났다",
"start_offset": 18,
"end_offset": 21,
"type": "<HANGUL>",
"position": 4
}
]
}
위와 같이 토큰이 나뉘기 때문에 백화점, 쇼핑, 친구로 검색하더라도 검색이 안 되는 문제가 발생한 것이다. 이 문제를 해결하려면 한글에 맞는 전용 Analyzer인 Nori(노리) Analyzer를 써야 한다.