본문 바로가기

Elk Stack/Elasticsearch

[Elasticsearch] 형태소 분석기 Nori 간단 설치 및 적용(2/2)

안녕하세요. Nori를 설치 후 저는 어떤 방식으로 elasticsearch에 적용하는지 예시를 보여드리고자 합니다. 우선 1편을 안보고 오신 분들은 1편을 보고 간단하게 설치 후 적용까지 해보고 오시죠!

 

https://anygyuuuu.tistory.com/13

 

저는 ubuntu 기준으로 진행할 예정입니다. 정식 버전은 ubuntu 20.04 입니다.

보통 사람들은 인덱스를 만들 때 마다 mapping을 같이 넣어줍니다. 그런데 이러한 점은 매우 귀찮습니다!!!!!

 

그래서 특정 패턴의 인덱스가 생성되면 자동으로 해당 세팅 및 매핑으로 통일되게 만들어주세요 할 수 있는 기능이 template이라는 기능입니다.

 

저는 인덱스를 바로 생성하지 않고 nori를 적용한 템플릿을 먼저 넣고 해당 네이밍으로 생성되는 인덱스들은 nori를 적용할 수 있게 했습니다. 물론 인덱스를 하나 생성하면서도 할 수 있지만 template을 먼저 생성하고 진행하는 훨씬 편합니다.

 

저는 두가지 버전을 드리겠습니다. KIBANA에서 사용할 수 있는 버전과 서버에서 사용할 수 있는 버전입니다.

키바나를 사용하는 사람들은 서버 버전도 쉽게 얻을 수 있지만, 서버에서만 elasticsearch를 사용하는 분들은 쉽지 않기 때문에 알려드릴게요~!!

 

먼저 키바나 버전입니다.

예시에서 참고되는 mapping 및 세팅은 본인이 원하시는대로 변경 가능합니다. 아래의 템플릿을 사용하면 index 이름이 noritest_ 로 시작하는 인덱스들은 아래와 같은 매핑과 세팅을 가지게 됩니다.

PUT _template/noritest_template
{
    "index_patterns" : [
      "noritest_*"
    ],
    "order": 1,
    "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 1,
        "index":{
            "analysis":{
                "tokenizer":{
                    "nori_mixed":{
                        "type":"nori_tokenizer",
                        "decompound_mode":"mixed"
                    }
                },
                "analyzer":{
                    "korean":{
                        "type":"custom",
                        "tokenizer":"nori_mixed",
                        "char_filter":["html_strip"]
                    }
                }
            }
        }
    },
    "mappings": {
		"properties": {
			"contents" : {
				"type": "text",
				"analyzer":"korean"
			},
			"title" : {
				"type" : "text",
				"fields" : {
					"keyword" : {
						"type" : "keyword",
						"ignore_above" : 256
					}
				}
			},
			"phonenumber" : {
				"type" : "long"
			},
			"usernumber" : {
				"type" : "text",
				"fields" : {
					"keyword" : {
						"type" : "keyword",
						"ignore_above" : 256
					}
				}
			}
		}
    }
}

 

서버 버전입니다.

curl -XPUT "본인elasticsearch주소/_template/noritest_template" -H 'Content-Type: application/json' -d'{
	"index_patterns" : [
      "noritest_*"
    ],
    "order": 1,
    "settings": {
		"number_of_shards": 1,
		"number_of_replicas": 1,
		"index":{
			"analysis":{
				"tokenizer":{
					"nori_mixed":{
						"type":"nori_tokenizer",
						"decompound_mode":"mixed"
					}
				},
				"analyzer":{
					"korean":{
						"type":"custom",
						"tokenizer":"nori_mixed",
						"char_filter":["html_strip"]
					}
				}	
			}	
		}
    },
    "mappings": {
		"properties": {
			"contents" : {
				"type": "text",
				"analyzer":"korean"
			},
			"title" : {
				"type" : "text",
				"fields" : {
					"keyword" : {
						"type" : "keyword",
						"ignore_above" : 256
					}
				}
			},
			"phonenumber" : {
				"type" : "long"
			},
			"usernumber" : {
				"type" : "text",
				"fields" : {
					"keyword" : {
						"type" : "keyword",
						"ignore_above" : 256
					}
				}
			}
		}
    }
}'