티스토리 뷰

인덱스 매핑 (Mapping)

  • 동적 (dynamic) 매핑 생성
  • PUT { maappings : {}} 정적 매핑 입력

문자열 타입

  • text / keyword 타입 비교
  • match / term 쿼리 비교

숫자 타입

  • 정수 : byte, short, integer, long
  • 실수 : float, double, half_float

자동 형변환 시 주의할점

  • coerce: true 옵션으로 자동 형변환 방지

데이터 추가

PUT books/_doc/1
{
  "title": "Romeo and Juliet",
  "author": "William Shakespeare",
  "category": "Tragedies",
  "publish_date": "1562-12-01T00:00:00",
  "pages": 125
}

데이터 조회

GET books

매핑만 확인할려면
GET books/_mapping

response 에서 mappings 은 데이터 베이스의 스키마 라고 생각해주시면 됩니다. 

지정한거에따라 다양한 내용들이 생성이 됩니다.

{
  "books" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "author" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "category" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "pages" : {
          "type" : "long"
        },
        "publish_date" : {
          "type" : "date"
        },
        "title" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1667787721181",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "_0UDxTQIRmiu3ym531sOhw",
        "version" : {
          "created" : "7100299"
        },
        "provided_name" : "books"
      }
    }
  }
}

매핑은 자동으로 생성하기에는 너무 많은 데이터가 많기 때문에

자동으로 생성되기 전에 미리 먼저 인덱스 매핑을 정의 해 놓으면 정의 해 놓은 매핑에 맞춰 데이터가 입력됩니다.

필드를 추가하는건 가능하고 있는걸 바꾸는건 불가능합니다.

 

PUT books/_mapping
{
	"properties" : {
    	"content" : {
        	"type" : "text"
        }
    }
}

추가가 가능합니다.

 

만약 아래와 같은 검색이 되었다 했을때

{
  "books" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "author" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "category" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "pages" : {
          "type" : "long"
        },
        "publish_date" : {
          "type" : "date"
        },
        "title" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1667787721181",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "_0UDxTQIRmiu3ym531sOhw",
        "version" : {
          "created" : "7100299"
        },
        "provided_name" : "books"
      }
    }
  }
}

title, title.keyowrd 두개로 검색이 가능합니다.

# 검색이 가능
GET books/_search
{
  "query": {
    "match": {
      "title": "romeo"
    }
  }
}

# 정확한 값이 들어가야지 검색 가능
# Romeo and Juliet

GET books/_search
{
  "query": {
    "match": {
      "title.keyword": "romeo"
    }
  }
}

keyword 는 어디서 필요하느냐?? 나중에 집계나 통계를 할때 주로 사용을 합니다.

 

 

 

 

참고

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함