숫자 필드 타입
숫자 필드 타입 (Numeric field types)
OpenSearch가 지원하는 모든 숫자 필드 타입은 다음 표와 같아요.
출처: 문서
본문
| 필드 데이터 타입 | 설명 |
|---|---|
byte |
부호 있는 8비트 정수예요. 최솟값은 −128, 최댓값은 127이에요. |
double |
배정밀도 64비트 IEEE 754 부동소수점 값이에요. 최소 크기는 2⁻¹⁰⁷⁴, 최대 크기는 (2 − 2⁻⁵²)·2¹⁰²³이에요. 유효 비트 수는 53, 유효 자릿수는 15.95예요. |
float |
단정밀도 32비트 IEEE 754 부동소수점 값이에요. 최소 크기는 2⁻¹⁴⁹, 최대 크기는 (2 − 2⁻²³)·2¹²⁷이에요. 유효 비트 수는 24, 유효 자릿수는 7.22예요. |
half_float |
반정밀도 16비트 IEEE 754 부동소수점 값이에요. 최소 크기는 2⁻²⁴, 최대 크기는 65504예요. 유효 비트 수는 11, 유효 자릿수는 3.31이에요. |
integer |
부호 있는 32비트 정수예요. 최솟값은 −2³¹, 최댓값은 2³¹ − 1이에요. |
long |
부호 있는 64비트 정수예요. 최솟값은 −2⁶³, 최댓값은 2⁶³ − 1이에요. |
unsigned_long |
부호 없는 64비트 정수예요. 최솟값은 0, 최댓값은 2⁶⁴ − 1이에요. |
short |
부호 있는 16비트 정수예요. 최솟값은 −2¹⁵, 최댓값은 2¹⁵ − 1이에요. |
scaled_float |
double 스케일 인자만큼 곱해져 long 값으로 저장되는 부동소수점 값이에요. |
integer, long, float, double 필드 타입에는 대응하는 range 필드 타입이 있어요.
숫자 필드에 ID 같은 식별자가 들어 있다면, 더 빠른 term-level 쿼리를 위해 이 필드를 keyword로 매핑할 수 있어요. 이 필드에 range 쿼리를 사용해야 한다면 keyword 필드 타입에 더해 숫자 필드 타입으로도 매핑할 수 있어요.
예시
integer_value가 integer 필드인 매핑을 만들어 볼게요.
PUT testindex
{
"mappings" : {
"properties" : {
"integer_value" : {
"type" : "integer"
}
}
}
}
정수 값을 가진 문서를 색인해요.
PUT testindex/_doc/1
{
"integer_value" : 123
}
예시: Skip list
더 나은 쿼리 성능을 위해 skip_list 파라미터를 사용해요. skip_list 파라미터는 쿼리 엔진이 쿼리 기준과 일치하지 않는 문서 범위를 건너뛸 수 있게 해주므로, range 쿼리에 자주 사용되는 필드에 특히 유용해요.
skip list 색인이 활성화된 매핑을 만들어요.
PUT /testindex_skiplist
{
"mappings" : {
"properties" : {
"price" : {
"type" : "double",
"skip_list" : true
}
}
}
}
숫자 값을 포함한 문서를 색인해요.
PUT testindex_skiplist/_doc/1
{
"price" : 19.99
}
Scaled float 필드 타입
scaled float 필드 타입은 스케일 인자만큼 곱해져 long 값으로 저장되는 부동소수점 값이에요. number 필드 타입이 받는 모든 선택 파라미터를 받으며, 추가로 scaling_factor 파라미터를 받아요. 스케일 인자는 scaled float을 만들 때 필수예요.
scaled float은 디스크 공간을 절약하는 데 유용해요. scaling_factor 값이 클수록 정확도는 좋아지지만 공간 오버헤드는 높아져요.
Scaled float 예시
scaled가 scaled_float 필드인 매핑을 만들어 볼게요.
PUT testindex
{
"mappings" : {
"properties" : {
"scaled" : {
"type" : "scaled_float",
"scaling_factor" : 10
}
}
}
}
scaled_float 값을 가진 문서를 색인해요.
PUT testindex/_doc/1
{
"scaled" : 2.3
}
스케일된 값은 23으로 저장돼요.
파라미터 (Parameters)
숫자 필드 타입이 받는 파라미터는 다음 표와 같아요. 모든 파라미터는 선택 사항이에요.
| 파라미터 | 설명 |
|---|---|
boost |
관련성 점수에 대한 이 필드의 가중치를 지정하는 부동소수점 값이에요. 1.0보다 큰 값은 필드의 관련성을 높이고, 0.0과 1.0 사이의 값은 관련성을 낮춰요. 기본값은 1.0이에요. 동적으로 업데이트 가능해요. |
coerce |
정수 값에 대해 소수를 잘라내고 문자열을 숫자 값으로 변환하도록 신호를 보내는 불리언 값이에요. 기본값은 true예요. 동적으로 업데이트 가능해요. |
doc_values |
집계, 정렬, 스크립팅에 사용할 수 있도록 필드를 디스크에 저장할지 여부를 지정하는 불리언 값이에요. 기본값은 true예요. |
ignore_malformed |
잘못된 형식의 값을 무시하고 예외를 던지지 않도록 지정하는 불리언 값이에요. 기본값은 false예요. 동적으로 업데이트 가능해요. |
index |
필드를 검색 가능하게 할지 여부를 지정하는 불리언 값이에요. 기본값은 true예요. |
meta |
이 필드에 대한 메타데이터를 받아요. |
null_value |
null 대신 사용할 값이에요. 필드와 같은 타입이어야 해요. 이 파라미터를 지정하지 않으면 값이 null일 때 필드가 없는 것으로 처리돼요. 기본값은 null이에요. |
skip_list |
doc values에 대해 skip list 색인을 활성화할지 여부를 지정하는 불리언 값이에요. 활성화되면 쿼리 엔진이 관련 없는 문서 범위를 건너뛸 수 있게 되어 range 쿼리 성능이 개선될 수 있는 인덱스된 doc values를 만들어요. 기본값은 false예요. |
store |
필드 값을 저장하고 _source 필드와 별도로 검색할 수 있게 할지 여부를 지정하는 불리언 값이에요. 기본값은 false예요. |
Scaled float은 추가로 필수 파라미터 scaling_factor가 있어요.
| 파라미터 | 설명 |
|---|---|
scaling_factor |
필드 값에 곱해지고 가장 가까운 long으로 반올림되는 double 값이에요. 필수예요. |
skip_list |
doc values에 대해 skip list 색인을 활성화할지 여부를 지정하는 불리언 값이에요. 활성화되면 OpenSearch는 쿼리 엔진이 관련 없는 문서 범위를 건너뛰는 것을 허용해 range 쿼리 성능을 개선할 수 있는 인덱스된 doc values를 만들어요. 기본값은 false예요. |
파생 소스 (Derived source)
인덱스가 derived source를 사용하면, OpenSearch는 소스 재구성 중에 다중 값 필드의 숫자 값을 정렬할 수 있어요. 또한 특정 숫자 필드 타입에서는 정밀도 손실이 발생할 수 있어요.
derived source를 활성화하고 number 필드를 구성한 인덱스를 만들어요.
PUT sample-index1
{
"settings": {
"index": {
"derived_source": {
"enabled": true
}
}
},
"mappings": {
"properties": {
"number": {
"type": "integer"
}
}
}
}
여러 정수 값이 있는 문서를 인덱스에 색인해요.
PUT sample-index1/_doc/1
{
"number": [1, 0, -1, 0]
}
OpenSearch가 _source를 재구성한 뒤의 파생 _source는 값을 숫자순으로 정렬해요.
{
"number": [-1, 0, 0, 1]
}
half_float 필드를 사용하면 필드에 저장된 정밀도에 따라 정밀도 손실이 발생할 수 있어요. hf 필드가 있는 인덱스를 만들어요.
PUT sample-index2
{
"settings": {
"index": {
"derived_source": {
"enabled": true
}
}
},
"mappings": {
"properties": {
"hf": {
"type": "half_float"
}
}
}
}
정밀한 소수 값이 있는 문서를 인덱스에 색인해요.
PUT sample-index2/_doc/1
{
"hf": 1234.56
}
OpenSearch가 _source를 재구성한 뒤의 파생 _source는 정밀도 손실을 보여줘요.
{
"hf": 1235.0
}
scaled_float 필드를 사용하면 스케일 인자 때문에 정밀도 손실이 발생할 수 있어요. sf 필드가 있는 인덱스를 만들어요.
PUT sample-index3
{
"settings": {
"index": {
"derived_source": {
"enabled": true
}
}
},
"mappings": {
"properties": {
"sf": {
"type": "scaled_float",
"scaling_factor": 100
}
}
}
}
소수 값이 있는 문서를 인덱스에 색인해요.
PUT sample-index3/_doc/1
{
"sf": 12.345
}
OpenSearch가 _source를 재구성한 뒤의 파생 _source는 정밀도 손실을 보여줘요.
{
"sf": 12.34
}
관련 문서 (Related documentation)
- Unsigned long