728x90
Keyword 데이터 타입
키워드 형태로 사용할 데이터에 적합한 데이터 타입으로, 별도의 분석기를 거치지 않고, 원문 그대로 색인하기 때문에 특정 코드나 키워드 등 정형화된 콘텐츠에 주로 사용된다.
PUT movie_search_datatype/_mapping/_doc
{
"properties": {
"multiMovieYn": {
"type": "keyword"
}
}
}
- 엘라스틱서치 일부 기능 중 형태소 분석을 하지 않아야만 사용이 가능한 기능들은 Keyword 데이터 타입이 사용된다.
- 아래 항목에서 많이 사용된다.
- 검색 시, 필터링되는 항목
- 정렬이 필요한 항목
- 집계해야 하는 항목
- 설정 가능한 주요 파라미터
- boost: 필드의 가중치, 검색 결과 정렬에 영향을 준다.(기본값은 1.0으로 1보다 크면 점수가 높게 오르고, 낮으면 점수가 낮게 오른다)
- doc_value: 필드를 메모리에 로드해 캐시로 사용한다(기본값은 true)
- index: 해당 필드를 검색에 사용할지를 설정한다(기본값은 true)
- null_value: 데이터가 없는 경우 null로 필드의 값을 대체할지를 설정한다.
- store: 필드 값을 필드와 별도로 _source에 저장하고 검색 가능하게 할지를 설정한다(기본값은 false)
Text 데이터 타입
색인 시 지정된 분석기가 칼럼의 데이터를 문자열 데이터로 인식하고 분석한다. 별도의 분석기를 정의하지 않았다면, 기본적으로 Standard Analyzer를 사용한다.
PUT movie_search_datatype/_mapping/_doc
{
"properties": {
"movieComment": {
"type": "text"
}
}
}
- Text 타입은 전문 검색이 가능해진다.(데이터를 색인하면 전체 텍스트가 토큰화되어 생성되며 특정 단어를 검색하는 것이 가능)
- Text 데이터 타입에 검색뿐 아니라 정렬, 집계 연산을 사용해야 할 경우 Text 타입과 Keyword 타입을 동시에 가지는 멀티 필드로 설정할 수 있다.
- 설정 가능한 주요 파라미터
- analyzer: 인덱스와 검색에 사용할 형태소 분석기를 선택(기본값은 Standard Analyzer)
- boost: 위와 동일
- fielddata: 정렬, 집계 스크립트 등에서 메모리에 저장된 필드 데이터를 사용할지를 설정한다(기본값은 false)
- index: 위와 동일
- norms: 유사도 점수를 산정할 때 필드 길이를 고려할지를 결정한다(기본값은 true)
- store: 위와 동일
- search_analyzer: 검색에 사용할 형태소 분석기를 선택한다.
- similarity: 유사도 점수를 구하는 알고리즘을 선택한다.(기본값은 BM25)
- term_vector: analyzed 필드에 Term 백터를 저장할지를 결정한다(기본값은 no)
Array 데이터 타입
array 타입에 저장되는 값은 모두 같은 타입으로 구성이 되어야 하며, 엘라스틱서치에서는 매핑 설정 시 Array 타입을 명시적으로 정의하지 않는다.
PUT movie_search_datatype/_doc/1
{
"title": "해리포터와 마법사의 돌",
"subtitleLang": ["ko", "en"]
}
- 정의된 인덱스 필드에 단순히 배열 값을 입력하면 자동으로 array 형태로 저장된다.
- 필드가 동적으로 추가된다면 배열의 첫번째 값이 필드의 데이터 타입을 결정하며, 이후의 데이터는 모두 같은 타입이어야 색인할 때 오류가 발생하지 않는다.
Numeric 데이터 타입
엘라스틱 서치는 여러개의 숫자 타입을 제공하며, 데이터 크기에 알맞은 타입을 제공하므로 색인과 검색을 효율적으로 처리할 수 있다.
PUT movie_text/_mapping/_doc
{
"properties": {
"year": 1
"type": "integer"
}
}
| 데이터 타입 | 설명 |
| long | 최솟값과 최댓값을 가지는 부호 있는 64비트 정수. 범위는 [-2^63 ~ 2^63-1] |
| integer | 최솟값과 최댓값을 가지는 부호 있는 32비트 정수. 범위는 [-2^31 ~ 2^31-1] |
| short | 최솟값과 최댓값을 가지는 부호 있는 16비트 정수. 범위는 [-32768 ~ 32767] |
| byte | 최솟값과 최댓값을 가지는 부호 있는 8비트 정수. 범위는 [-128 ~ 127] |
| double | 64비트 부동 소수점을 갖는 수 |
| float | 32비트 부동 소수점을 갖는 수 |
| half_float | 16비트 부동 소수점을 갖는 수 |
Date 데이터 타입
Date 타입은 JSON 포맷에서 문자열로 처리되며, 다양하게 표현될 수 있기 때문에 날짜 문자열 형식을 명시적으로 설정해야 한다(기본:yyyy-MM-ddTHH:mm:ssZ)
PUT movie_text/_mapping
{
"properties": {
"date": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
}
}
}
- 아래 3가지 어떤 것을 사용해도 내부적으로 UTC의 밀리초 단위로 변환해 저장한다.
- 문자열이 포함된 날짜 형식
- ISO_INSTANT 포맷의 날짜 형식
- 밀리초
Range 데이터 타입
범위가 있는 데이터를 저장할 때 사용하는 데이터 타입으로 데이터의 시작과 끝만 정의하면 된다.
PUT movie_search_datatype/_mapping
{
"properties": {
"showRange": {
"type": "date_range"
}
}
}
| 데이터 타입 | 비고 |
| integer_range | 최솟값과 최댓값을 갖는 부호 있는 32비트 정수 범위 |
| float_range | 부동 소수점 값을 갖는 32비트 실수 범위 |
| long_range | 최솟값과 ㄷ최댓값을 갖는 부호 있는 64비트 정수의 범위 |
| double_range | 부동 소수점을 갖는 64비트 실수 범위 |
| date_range | 64비트 정수 형태의 밀리초로 표시되는 날짜 값의 범위 |
| ip_range |
IPv4, IPV6 주소를 지원하는 IP 값 |
Boolean 데이터 타입
참과 거짓이라는 두 논리값을 가지는 데이터
PUT movie_text/_mapping
{
"properties": {
"check": {
"type": "boolean"
}
}
}
GeoPoint 데이터 타입
위도, 경도 등 위치 정보를 담은 데이터를 저장할 때 사용할 수 있으며, 위치 기반 쿼리를 이용해 반경 내 쿼리, 위치 기반 집계, 위치별 정렬 등을 사용할 수 있다.
PUT movie_search_datatype/_mapping
{
"properties": {
"filmLocation": {
"type": "geo_point"
}
}
}
IP 데이터 타입
IP 주소와 같은 데이터를 저장하는 데 사용한다.
PUT movie_search_datatype/_mapping
{
"properties": {
"ipAddr": {
"type": "ip"
}
}
}
Object 데이터 타입
값으로 문서를 가지는 필드의 데이터를 저장할 수 있다.
PUT movie_search_datatype/_mapping
{
"properties": {
"companies": {
"properties": {
"companyName": {
"type": "text"
}
}
}
}
}
- Object 타입을 정의할 때는 다른 데이터 타입과 같이 특정 키워드를 이용하지 않고, 필드값으로 다른 문서의 구조를 입력한다.
Nested 데이터 타입
Object 객체 배열을 독립적으로 색인하고 질의하는 형태의 데이터 타입이다.
PUT movie_search_datatype/_mapping
{
"properties": {
"companies_nested": {
"type": "nested"
}
}
}
- 데이터가 배열 형태로 저장되면 한 필드 내의 검색은 기본적으로 OR 조건으로 검색되며, 이러한 문제를 Nested 데이터 타입으로 해결할 수 있다.
일반 객체 배열
"companies": [
{ "companyName": "Warner Bros", "country": "US" },
{ "companyName": "Heyday Films", "country": "UK" }
]
- 쿼리 시 "companyName": "Warner Bros" AND "country": "UK" 처리가 어려움
Nested 객체
"companies_nested": [
{ "companyName": "Warner Bros", "country": "US" },
{ "companyName": "Heyday Films", "country": "UK" }
]
- Nested Query 사용 시 "companyName": "Warner Bros" AND "country": "UK" 정확히 매칭 가능
728x90
'Elastic Search' 카테고리의 다른 글
| Ch03. 데이터 모델링 - Document API 이해하기 (0) | 2025.09.13 |
|---|---|
| Ch03. 데이터 모델링 - 엘라스틱서치 분석기 (0) | 2025.09.13 |
| Ch03. 데이터 모델링 - 메타 필드 (0) | 2025.09.07 |
| Ch03. 데이터 모델링 - 매핑 API (0) | 2025.09.07 |
| Ch02. 엘라스틱서치 살펴보기 - 주요 API (0) | 2025.09.06 |