사용시 analysis-nori 플러그인 설치 필수
Elastic 가이드북 : elasticsearch-nori
Standard 토크나이저는 공백 외에 아무런 분리를 하지 못했지만, nori_tokenizer는 한국어 사전 정보를 이용해 아래와 같이 분리 가능
standard tokenizer | nori tokenizer |
---|---|
"token" : "동해물과" | "token" : "동해" |
"token" : "백두산이 | "token" : "물" |
"token" : "과" | |
"token" : "백두" | |
"token" : "산" | |
"token" : "이" |
cd /usr/share/elasticsearch
sudo bin/elasticsearch-plugin install analysis-nori
sudo service elasticsearch restart
"analysis": {
"tokenizer": {
"nori_none": {
"type": "nori_tokenizer",
"decompound_mode": "none"
},
"nori_discard": {
"type": "nori_tokenizer",
"decompound_mode": "discard"
},
"nori_mixed": {
"type": "nori_tokenizer",
"decompound_mode": "mixed"
}
}
}
}
"analyzer": {
"nori_none": {
"type": "custom",
"tokenizer": "nori_none",
"filter": ["lowercase", "nori_readingform"]
},
"nori_mixed": {
"type": "custom",
"tokenizer": "nori_mixed",
"filter": ["lowercase", "nori_readingform"]
},
"nori_discard": {
"type": "custom",
"tokenizer": "nori_discard",
"filter": ["lowercase", "nori_readingform"]
}
}
}
PUT index_name
{
"settings": {
"analysis": {
"tokenizer": {
"nori_none": {
"type": "nori_tokenizer",
"decompound_mode": "none"
},
"nori_mixed": {
"type": "nori_tokenizer",
"decompound_mode": "mixed"
},
"nori_discard": {
"type": "nori_tokenizer",
"decompound_mode": "discard"
}
},
"analyzer": {
"nori_none": {
"type": "custom",
"tokenizer": "nori_none",
"filter": ["lowercase", "nori_readingform"]
},
"nori_mixed": {
"type": "custom",
"tokenizer": "nori_mixed",
"filter": ["lowercase", "nori_readingform"]
},
"nori_discard": {
"type": "custom",
"tokenizer": "nori_discard",
"filter": ["lowercase", "nori_readingform"]
}
}
}
},
"mappings": {
"properties": {
"title" : {
type" : "text",
"analyzer": "nori_mixed",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
}
원래는 기본 토크나이저로 뛰어쓰기를 기준으로 검색 되었지만,
nori_tokenizer 적용 후 형태소 분석으로 포함된 단어에 다양한 한글 어미가 붙어있어도 검색이 가능하다.
GET index_name/_analyze
{
"analyzer": "nori_mixed",
"text": "원래는이거안돼",
"explain": false
}