unsigned_long 필드 타입
unsigned_long 필드 타입
unsigned_long 필드 타입은 0부터 2^64 − 1까지의 값을 표현하는 부호 없는 64비트 정수형 필드 타입이에요. 아래 예시에서는 counter를 unsigned_long 필드로 매핑하고 있어요.
출처: 문서
본문
2.8 버전에서 도입되었어요.
unsigned_long 필드 타입은 최솟값 0, 최댓값 2^64 − 1을 가지는 부호 없는 64비트 정수형 숫자 필드 타입이에요. 다음 예시에서는 counter를 unsigned_long 필드로 매핑합니다.
PUT testindex
{
"mappings" : {
"properties" : {
"counter" : {
"type" : "unsigned_long"
}
}
}
}
인덱싱 (Indexing)
unsigned_long 값을 가진 문서를 인덱싱하려면 다음 요청을 사용하세요.
PUT testindex/_doc/1
{
"counter" : 10223372036854775807
}
또는 다음과 같이 Bulk API를 사용할 수도 있어요.
POST _bulk
{ "index": { "_index": "testindex", "_id": "1" } }
{ "counter": 10223372036854775807 }
unsigned_long 타입 필드에서 store 파라미터가 true로 설정된 경우(즉 저장 필드인 경우) 그 값은 문자열로 저장되고 반환돼요. unsigned_long 값은 소수 부분을 지원하지 않으므로, 소수 부분이 제공되면 잘려 나가요.
쿼리하기 (Querying)
unsigned_long 필드는 다른 숫자 타입이 지원하는 대부분의 쿼리를 지원해요. 예를 들어 unsigned_long 필드에 term 쿼리를 사용할 수 있어요.
POST _search
{
"query": {
"term": {
"counter": {
"value": 10223372036854775807
}
}
}
}
range 쿼리도 사용할 수 있어요.
POST _search
{
"query": {
"range": {
"counter": {
"gte": 10223372036854775807
}
}
}
}
정렬 (Sorting)
unsigned_long 필드에 정렬 값을 사용해 검색 결과의 순서를 정할 수 있어요. 예를 들면 다음과 같아요.
POST _search
{
"sort" : [
{
"counter" : {
"order" : "asc"
}
}
],
"query": {
"range": {
"counter": {
"gte": 10223372036854775807
}
}
}
}
unsigned_long 필드는 인덱스 정렬 필드(sort.field 인덱스 설정)로는 사용할 수 없어요.
집계 (Aggregations)
다른 숫자 필드와 마찬가지로 unsigned_long 필드는 집계를 지원해요. terms와 multi_terms 집계에서는 unsigned_long 값이 그대로 사용되지만, 다른 집계 타입에서는 값이 double 타입으로 변환돼요(정밀도 손실이 발생할 수 있어요). 다음은 terms 집계의 예시예요.
POST _search
{
"query": {
"match_all": {}
},
"aggs": {
"counters": {
"terms": {
"field": "counter"
}
}
}
}
스크립트 (Scripting)
스크립트에서 unsigned_long 필드는 BigInteger 클래스의 인스턴스로 반환돼요.
POST _search
{
"query": {
"bool": {
"filter": {
"script": {
"script": "BigInteger amount = doc['counter'].value; return amount.compareTo(BigInteger.ZERO) > 0;"
}
}
}
}
}
제한 사항 (Limitations)
unsigned_long 필드 타입에는 다음 제한 사항이 있어요.
- 서로 다른 숫자 타입 간에 집계를 수행할 때 그중 하나가
unsigned_long이면 값이double타입으로 변환되고 double 연산이 사용되어 정밀도 손실이 발생할 가능성이 높아요. unsigned_long필드는 인덱스 정렬 필드(sort.field인덱스 설정)로 사용할 수 없어요. 이 제한은 여러 인덱스에 대해 검색할 때 그중 하나 이상의 인덱스에서 해당 필드가unsigned_long타입이고 다른 인덱스에서는 다른 숫자 타입(들)인 필드를 기준으로 결과를 정렬하는 경우에도 적용돼요.