티스토리 뷰

인덱스 매핑 (Mapping)

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

문자열 타입

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

숫자 타입

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

자동 형변환 시 주의할점

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

숫자 - long, double...

Elasticsearch는 자바에서 기본으로 사용되는 숫자 타입들을 지원합니다. 그리고 half_float, scaled_float 과 같이 Elasticsearch에서만 사용되는 타입들도 있습니다.
  • long : 64비트 정수 (-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)
  • integer : 32비트 정수 (-2147483648 ~ 2147483647)short : 16비트 정수 (-32768 ~ 32767)
  • byte : 8비트 정수 (-128 ~ 127)
  • double : 64비트 실수
  • float : 32비트 실수
  • half_float : 16비트 실수
  • scaled_float : 실수형이지만 부동소수점이 아니라 long 형태로 저장하고 옵션으로 소수점 위치를 지정합니다. 통화 (예: $19.99) 같이 소수점 자리가 고정된 값을 표시할 때 유용합니다.

 

# integer 등으로 하면은 소수점이 저장이 안되기 때문에
# float, double 등으로 지정해줘야지 소수점이 정상적으로 저장됨

PUT number_test 
{
	"mappings" : {
    	"properties" : {
        	"value" : {
            	"type" : "integer"
            }
        }
    }
}

PUT number_test 
{
	"mappings" : {
    	"properties" : {
        	"value" : {
            	"type" : "float"
            }
        }
    }
}

# coerce 는 자동 형변환 막는 기능
PUT number_test 
{
	"mappings" : {
    	"properties" : {
        	"value" : {
            	"type" : "integer",
                "coerce" : false
            }
        }
    }
}
# 인덱스 조회
GET number_test

# _id : 1 에 데이터 저장
PUT number_test/_doc/1
{
	"value" : 1
}

# _id : 2 에 데이터 저장
PUT number_test/_doc/2
{
	"value" : "2"
}

# _id : 3 에 데이터 저장
PUT number_test/_doc/3
{
	"value" : 3.4
}


# 범위가 3.1 < 기준 <= 3.9 range 검색
GET number_test/_search
{
	"query" : {
    	"range" : {
    		"value" : {
            	"gt" : 3.1,
                "lte" : 3.9
            }
        }
    }
}
 
결론 : 데이터 mapping 다 지정하고가거나 데이터 정상적으로 왔는지 반드시 확인해야한다..!

 

참고

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함