@ 십질 끝에 정리 

 - Setting or Mapping 은 최초 index (table) 생성시 적용이 됩니다.

 - 중간에 끼어 넣기 안됨 , 최초 생성하면서 설정 해줘야함 .

 - spring data @Document 객체에 @Setting, @Mapping annotation을 통해서 간단하게 연결 할 수 있습니다.

 - SettingMapping 에는 "setting" or "mapping" 노드를 포함하지 않는다. <-- 포함시 세팅 안됨

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Document(indexName = "idx_es_address", createIndex = true)
@Setting(settingPath = "/elasticsearch/settings/settings.json")
@Mapping(mappingPath = "/elasticsearch/mappings/mappings.json")
public class EsAddressVO {

    //고객코드
    @Id
    private String cuscode;

    private String areacode;

    //신주소
    private String naddr;

    //구주소
    private String oaddr;
    
}

@Setting /resources/elasticsearch/settings/settings.json

 - tokenizer와 analyzer 세팅함

 

{
  "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": {
      "korean": {
        "type": "nori",
        "stopwords": "_korean_"
      }
    }
  }
}

위 tokenizer 에 대한 자세한 부분들은 기술문서 참고 할것

 

 

@Mapping /resources/elasticsearch/mappings/mappings.json

기본적으로 spring에서 mapping을 지정하지 않더라도 기본 mapping을 해주지만

nori 한글 검색을 사용하기 위해서 oaddr 필드에 setting.jsoin에서 등록해둔 korean <-- analyzer를  지정

{
    "properties": {
      "oaddr": {
        "type": "text",
        "analyzer": "korean"
      }
    }
}

 

kibana console에서 확인하는 방법

 

 

GET idx_es_addres/_settings

{
  "idx_es_address" : {
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "provided_name" : "idx_es_address",
        "creation_date" : "1606194598534",
        "analysis" : {
          "analyzer" : {
            "korean" : {
              "type" : "nori",
              "stopwords" : "_korean_"
            }
          },
          "tokenizer" : {
            "nori_discard" : {
              "type" : "nori_tokenizer",
              "decompound_mode" : "discard"
            },
            "nori_mixed" : {
              "type" : "nori_tokenizer",
              "decompound_mode" : "mixed"
            },
            "nori_none" : {
              "type" : "nori_tokenizer",
              "decompound_mode" : "none"
            }
          }
        },
        "number_of_replicas" : "1",
        "uuid" : "mxGr5zJOTrW5Gp9-n4HjHQ",
        "version" : {
          "created" : "7100099"
        }
      }
    }
  }
}

 

GET idx_es_address/_mapping

{
  "idx_es_address" : {
    "mappings" : {
      "properties" : {
        "_class" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "areacode" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "cuscode" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "naddr" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "oaddr" : {
          "type" : "text",
          "analyzer" : "korean"
        }
      }
    }
  }
}

 

반응형
블로그 이미지

visualp

c#, java

,