숫자 필드 타입

숫자 필드 타입 (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
}
  • Unsigned long

더 알아보기 (Learn more)