mapping 설정시, 하나의 필드에 두 개 이상의 analyzer를 설정하는 방법이 궁금합니다.

878 views
Skip to first unread message

Senaz1029

unread,
Jun 9, 2016, 1:01:27 AM6/9/16
to 은전한닢 프로젝트
"settings" : {
        "number_of_shards" : 8,
        "number_of_replicas" : 0,
        "index":{
            "analysis" : {
                "analyzer" : {
                    "korean" : {
                        "type":"custom",
                        "tokenizer":"seunjeon_default_tokenizer"
                    },
            "edge_ngram_analyzer" : {
"type" : "custom",
"tokenizer" : "edge_ngram_tokenizer",
"filter" : ["lowercase", "trim"]
            },
            "edge_ngram_analyzer_back" : {
 "type" : "custom",
 "tokenizer" : "edge_ngram_tokenizer",
 "filter" : ["lowercase", "trim", "edge_ngram_filter_back"]
   }
                },
                "tokenizer": {
                    "seunjeon_default_tokenizer": {
                        "type": "seunjeon_tokenizer",
"index_poses":["UNK","EP","E","I","J","M","N","S","SL","SH","SN","V","VCP","XP","XS","XR"],
"pos_tagging": "false",
                        "user_words": ["SDS", "SAMSUNG", "에스코어","S-CORE"]
                    },
                    "edge_ngram_tokenizer" : {
                        "type" : "edgeNGram",
                        "min_gram" : "1",
                        "max_gram" : "5",
                        "token_chars": [ "letter", "digit", "punctuation", "symbol" ]
                    }      
                }
        }
}

저는 세팅에 세 개의 애널라이저가 있습니다. 
은전한닢 korean , 그리고 엣지 애널라이저가 있는데요. 

아래와 같이 mapping 설정 시 한 필드에 두 개 이상의 애널라이저를 설정할 수 있는 방법이 있는지요? 아니면 
 각각의 애널라이저마다 각각 필드를 다른이름으로 중복 등록해야하는지.... 
혹시 아시는분 계신가요? ㅠㅠ

저는 아래의 title, smrtText, text 필드에 korean analyzer (은전한닢) 외에도 e

"mappings" : {
        "kns" : {
            "_timestamp" : { "enabled" : true },
"properties" : {
"knTypeId" : {"type" : "string"},
                                "title" : {"type": "string", "index" : "analyzed", "analyzer" : "korean", "store": true, "term_vector": "with_positions_offsets", "boost": 4},
                                "smryText" : { "type" : "string", "index" : "analyzed", "analyzer" : "korean", "store":true,  "term_vector": "with_positions_offsets", "boost": 3},
                                "text" : { "type" : "string",  "index" : "analyzed", "analyzer" : "korean", "store":true,  "term_vector": "with_positions_offsets", "boost": 2},
"unifiedText": { "analyzer" : "edge_ngram_analyzer", "type" : "string", "store" :"no", "index" : "analyzed", "omit_norms" : true, "index_options" : "offsets", 
                                "knAttrValList" : {
                                "properties":{
                                     "knAttrId" : {"type":"string" },
                                     "knAttrVal": {"type":"string", "index" : "analyzed", "analyzer" : "korean", "store":true, "term_vector": "with_positions_offsets" }
                          }
                },
                "knRelList" : {
                    "properties":{
                        "knTypeRelId" : {"type":"string" },
                        "trgtKnId": {"type":"string"},
                        "trgtKnTitle": {"type":"string", "index" : "analyzed", "analyzer" : "korean", "store":true, "term_vector": "with_positions_offsets"},
                        "trgtKnTypeId": {"type":"string"}
                    }
                }
            }
        }
    }

Senaz1029

unread,
Jun 9, 2016, 1:06:59 AM6/9/16
to 은전한닢 프로젝트
원문에 내용이 빠진걸 수정하려는데 안되네요..



저는 아래의 title, smrtText, text 필드에 korean analyzer (은전한닢) 외에도 edge_ngram analyzer 를 설정하고 싶고 또 반대로
 unifiedText 필드에도 korean analyzer( 은전한닢)을 적용하고 싶은데....

만약 두개 애널라이저를 설정하지 못한다면, 
title, smryText, text 필드를 똑같이 새로 edge_ngram analyer 를 매핑한 새로운 필드를 중복으로 생성해서 같은 데이터를 인덱싱해야할지 고민입니다..찾아봐도 잘 나오지 않아서...(방법이 잘못됐는지..) 고민끝에 여기 올려봅니다.

도와주세용

Senaz1029

unread,
Jun 9, 2016, 1:25:02 AM6/9/16
to 은전한닢 프로젝트
찾아보니 https://www.elastic.co/guide/en/elasticsearch/reference/2.2/search-analyzer.html

를 참고하면, ( 저는 2.2.0를 쓰고있기에 ) 



mapping 설정에 

analyzer, search_analyzer 이렇게 두개 설정할 수가 있네요..

그럼  analyzer 에는 은전한닢 korean 분석기를, search_analyzer 에는 edge_ngram_analyzer 를 설정하는게 맞겟죠?....


Senaz1029

unread,
Jun 9, 2016, 1:37:36 AM6/9/16
to 은전한닢 프로젝트
결국 또 비슷한 원점 질문인데... 

그러면 korean 분석기 (은전한닢)을 anlayer = "korean" 으로 설정한 뒤 

search_anaylzer 를 edge_ngram_analyzer 와 edge_ngram_analyzer_back 을 동시에 설정하려면, 또 난감하네요...

멀티 필드 또는 다른 필드를 두고 똑같은 데이터를 인덱싱하고, analyzer 만 각각 다르게 세팅해야할지..

Yong-woon Lee

unread,
Jun 9, 2016, 1:45:39 AM6/9/16
to 은전한닢 프로젝트
위 문서에 있는 내용은 index 타임과 query 타임에 analyzer를 분리하는 것이지 두개의 analyzer가 동시에 적용되는 것은 아닙니다.
원하시는 바를 하시려면 각각의 analyzer가 할당된 다른 필드를 만드셔야합니다.

감사합니다.

유영호

unread,
Jun 9, 2016, 2:06:26 AM6/9/16
to 은전한닢 프로젝트
Yong-woon 님의 말에 동의합니다.
Reply all
Reply to author
Forward
0 new messages