Elasticsearch: 기타 필드 타입 (IP, Range, Binary) 완벽 정리
Elasticsearch는 기본적인 문자열, 숫자, 날짜, 불리언, 위치 정보 외에도
✔ IP 주소 저장 (ip 타입)
✔ 범위 데이터 저장 (range 타입)
✔ 바이너리 데이터 저장 (binary 타입)
을 지원합니다. 이번 글에서는 각 필드 타입의 특성, 매핑 설정, 검색 방식, 그리고 실전 활용 예제까지 상세히 알아보겠습니다.
1. 기타 필드 타입 개요
타입 | 특징 | 사용 예시 |
IP (ip) | IPv4, IPv6 주소 저장 | "192.168.1.1" |
Range (range) | 숫자, 날짜, IP 범위 저장 | { "gte": 10, "lt": 20 } |
Binary (binary) | 바이너리 데이터 저장 (검색 불가능) | "U29tZSBiaW5hcnkgZGF0YQ==" |
2. IP (ip) 타입
🔹 IP 타입이란?
✔ IPv4 및 IPv6 주소를 저장할 수 있는 데이터 타입
✔ 쿼리를 활용해 특정 IP 대역 검색 가능
📌 예제 1: IP 필드 매핑 설정
PUT my_ip_index
{
"mappings": {
"properties": {
"client_ip": {
"type": "ip"
}
}
}
}
✅ IPv4, IPv6 주소를 문자열처럼 저장 가능
📌 예제 2: IP 데이터 저장
PUT my_ip_index/_doc/1
{
"client_ip": "192.168.1.1"
}
PUT my_ip_index/_doc/2
{
"client_ip": "2001:db8::ff00:42:8329"
}
✅ IPv4, IPv6 모두 저장 가능
📌 예제 3: 특정 IP 검색
GET my_ip_index/_search
{
"query": {
"term": {
"client_ip": "192.168.1.1"
}
}
}
✅ 특정 IP 주소를 기준으로 검색 가능
📌 예제 4: 특정 IP 범위 검색 (range 쿼리)
GET my_ip_index/_search
{
"query": {
"range": {
"client_ip": {
"gte": "192.168.1.0",
"lte": "192.168.1.255"
}
}
}
}
✅ 지정된 IP 범위 내에 포함된 데이터 검색 가능
3. 범위 (range) 타입
🔹 Range 타입이란?
✔ 숫자, 날짜, IP 등의 범위를 저장할 수 있는 데이터 타입
✔ 쿼리를 활용해 특정 범위의 데이터를 검색 가능
📌 예제 5: Range 필드 매핑 설정
PUT my_range
{
"mappings": {
"properties": {
"amount": {
"type": "integer_range"
},
"days": {
"type": "date_range"
}
}
}
}
✅ 정수 범위(integer_range), 날짜 범위(date_range) 모두 저장 가능
📌 예제 6: Range 데이터 저장
PUT my_range/_doc/1
{
"amount": {
"gte": 19,
"lt": 28
},
"days": {
"gt": "2019-06-01T09:00:00",
"lt": "2019-06-20"
}
}
✅ gte, gt, lte, lt 연산자를 사용하여 범위 지정 가능
📌 예제 7: 특정 범위 검색 (range 쿼리)
GET my_range/_search
{
"query": {
"range": {
"amount": {
"gte": 16,
"lte": 25,
"relation": "intersects"
}
}
}
}
✅ 16~25 범위에 겹치는(intersects) 데이터를 검색 가능
📌 Range 쿼리의 relation 옵션
값 설명
within | 도큐먼트의 범위가 쿼리 범위 안에 완전히 포함되는 경우 |
contains | 쿼리 범위가 도큐먼트 범위 안에 완전히 포함되는 경우 |
intersects | 도큐먼트 범위와 쿼리 범위가 겹치는 경우 |
📌 예제 8: 특정 날짜 범위 검색
GET my_range/_search
{
"query": {
"range": {
"days": {
"gte": "2019-06-05",
"lte": "2019-06-15",
"relation": "within"
}
}
}
}
✅ 2019-06-05 ~ 2019-06-15 범위에 완전히 포함된 데이터 검색
4. 바이너리 (binary) 타입
🔹 Binary 타입이란?
✔ 파일, 이미지 등의 바이너리 데이터를 저장 가능
✔ 색인이 불가능하며, source에서만 조회 가능
✔ 보통 Elasticsearch에 직접 저장하기보다는 S3, HDFS 등 외부 저장소 활용 추천
📌 예제 9: Binary 필드 매핑 설정
PUT my_binary_index
{
"mappings": {
"properties": {
"file_data": {
"type": "binary"
}
}
}
}
✅ 바이너리 데이터는 검색 및 집계 불가능 (색인 X)
📌 예제 10: 바이너리 데이터 저장
PUT my_binary_index/_doc/1
{
"file_data": "U29tZSBiaW5hcnkgZGF0YQ=="
}
✅ Base64 인코딩된 바이너리 데이터 저장 가능
📌 Binary 데이터는 가능하면 외부 저장소에 저장하고, Elasticsearch에는 URL 또는 키만 저장하는 것이 효율적
5. 정리
IP (ip) | IPv4, IPv6 주소 저장 가능 | "192.168.1.1" |
IP 검색 (range) | 특정 IP 범위 검색 가능 | 192.168.1.0 ~ 192.168.1.255 |
Range (range) | 숫자, 날짜, IP 범위 저장 가능 | { "gte": 10, "lt": 20 } |
Range 검색 (relation) | within, contains, intersects 옵션 활용 | "relation": "intersects" |
Binary (binary) | 바이너리 데이터 저장 가능 (검색 불가) | "U29tZSBiaW5hcnkgZGF0YQ==" |
6. 학습 가이드
1️⃣ IP 주소(ip 타입) 데이터를 저장하고 특정 IP 범위 검색 실습
2️⃣ Range 데이터(range 타입)에서 within, contains, intersects 차이 이해
3️⃣ Binary 데이터(binary 타입)를 활용한 효율적인 데이터 저장 전략 고민
7. 마무리
Elasticsearch는 IP, 범위 데이터, 바이너리 데이터까지 다양한 데이터 타입을 지원하며
✔ IP 데이터 검색 (특정 IP 및 범위 검색)
✔ Range 데이터 활용 (숫자·날짜·IP 범위 저장 및 검색)
✔ Binary 데이터 관리 (외부 저장소 연동 추천)
을 효과적으로 활용할 수 있습니다.
다음 학습에서는 Elasticsearch에서 필드 타입 최적화 및 성능 개선 방법을 다루겠습니다! 🚀
'Elastic Search > 인덱스 설정과 매핑' 카테고리의 다른 글
[Elasticsearch] 멀티 필드 (Multi Field) 완벽 정리 (0) | 2025.02.03 |
---|---|
[Mappings] 위치 정보 (Geo Point & Geo Shape) 완벽 정리 (0) | 2025.02.03 |
[Mappings] Object vs Nested 타입 완벽 정리 (0) | 2025.02.03 |
[Mappings] Boolean(불리언) 타입 완벽 정리 (0) | 2025.02.03 |
[Mappings] 날짜(Date) 타입 완벽 정리 (0) | 2025.02.03 |