Intro::
한글 검색기를 구현해보는 예제입니다.
해당 플러그인을 사용한 구현입니다.
코드
템플릿 생성
PUT /_index_template/total_search_template
{
"index_patterns": ["total_search_*"],
"template": {
"settings": {
"index.max_ngram_diff": 19,
"analysis": {
"filter": {
"ngram_filter": {
"type": "ngram",
"min_gram": 1,
"max_gram": 20
}
},
"tokenizer": {
"my_nori_tokenizer": {
"type": "nori_tokenizer",
"decompound_mode": "mixed"
}
},
"analyzer": {
"jamo_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"hanhinsam_jamo"
]
},
"ngram_jamo_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"hanhinsam_jamo",
"ngram_filter"
]
},
"chosung_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"hanhinsam_chosung"
]
},
"engtohan_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"hanhinsam_engtohan"
]
},
"hantoeng_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"hanhinsam_hantoeng"
]
},
"nori_analyzer": {
"type": "custom",
"tokenizer": "my_nori_tokenizer"
}
}
}
},
"mappings": {
"properties": {
"name": {
"type": "keyword",
"copy_to": ["name_jamo", "name_hantoeng", "name_engtohan", "name_chosung", "name_ngram", "name_nori"]
},
"name_jamo": {
"type": "text",
"analyzer": "jamo_analyzer"
},
"name_hantoeng": {
"type": "text",
"search_analyzer": "hantoeng_analyzer"
},
"name_engtohan": {
"type": "text",
"search_analyzer": "standard"
},
"name_chosung": {
"type": "text",
"analyzer": "chosung_analyzer"
},
"name_ngram": {
"type": "text",
"analyzer": "ngram_jamo_analyzer",
"search_analyzer": "jamo_analyzer"
},
"name_nori": {
"type": "text",
"analyzer": "nori_analyzer"
}
}
}
},
"priority": 100
}
JSON
복사
인덱스 생성 및 확인
PUT total_search_1
GET total_search_1/_settings
JSON
복사