Elastic 가이드북
  • Elastic 가이드 북
  • 1. 서문
    • 1.1 Elastic Stack 소개
      • 1.1.1 Elasticsearch
      • 1.1.2 Logstash
      • 1.1.3 Kibana
      • 1.1.4 Beats
  • 2. Elasticsearch 시작하기
    • 2.1 데이터 색인
    • 2.2 설치 및 실행
      • 2.2.1 다운로드 설치 및 실행
      • 2.2.2 Unix RPM (yum) 설치 및 실행
      • 2.2.3 윈도우 운영체제에서 MSI 파일로 설치
    • 2.3 elasticsearch 환경 설정
      • 2.3.1 jvm.options
      • 2.3.2 elasticsearch.yml
      • 2.3.3 노드의 역할 : master, data, ingest, ml
      • 2.3.4 커맨드 라인 설정
  • 3. Elasticsearch 시스템 구조
    • 3.1 클러스터 구성
    • 3.2 인덱스와 샤드 - Index & Shards
    • 3.3 마스터 노드와 데이터 노드 - Master & Data Nodes
  • 4. Elasticsearch 데이터 처리
    • 4.1 REST API
    • 4.2 CRUD - 입력, 조회, 수정, 삭제
    • 4.3 벌크 API - _bulk API
    • 4.4 검색 API - _search API
  • 5. 검색과 쿼리 - Query DSL
    • 5.1 풀 텍스트 쿼리 - Full Text Query
    • 5.2 Bool 복합 쿼리 - Bool Query
    • 5.3 정확도 - Relevancy
    • 5.4 Bool : Should
    • 5.5 정확값 쿼리 - Exact Value Query
    • 5.6 범위 쿼리 - Range Query
  • 6. 데이터 색인과 텍스트 분석
    • 6.1 역 인덱스 - Inverted Index
    • 6.2 텍스트 분석 - Text Analysis
    • 6.3 애널라이저 - Analyzer
      • 6.3.1 _analyze API
      • 6.3.2 Term 쿼리
      • 6.3.3 사용자 정의 애널라이저 - Custom Analyzer
      • 6.3.4 텀 벡터 - _termvectors API
    • 6.4 캐릭터 필터 - Character Filter
      • 6.4.1 HTML Strip
      • 6.4.2 Mapping
      • 6.4.3 Pattern Replace
    • 6.5 토크나이저 - Tokenizer
      • 6.5.1 Standard, Letter, Whitespace
      • 6.5.2 UAX URL Email
      • 6.5.3 Pattern
      • 6.5.4 Path Hierarchy
    • 6.6 토큰 필터 - Token Filter
      • 6.6.1 Lowercase, Uppercase
      • 6.6.2 Stop
      • 6.6.3 Synonym
      • 6.6.4 NGram, Edge NGram, Shingle
      • 6.6.5 Unique
    • 6.7 형태소 분석 - Stemming
      • 6.7.1 Snowball
      • 6.7.2 노리 (nori) 한글 형태소 분석기
  • 7. 인덱스 설정과 매핑 - Settings & Mappings
    • 7.1 설정 - Settings
    • 7.2 매핑 - Mappings
      • 7.2.1 문자열 - text, keyword
      • 7.2.2 숫자 - long, double ...
      • 7.2.3 날짜 - date
      • 7.2.4 불리언 - boolean
      • 7.2.5 Object 와 Nested
      • 7.2.6 위치 정보 - Geo
      • 7.2.7 기타 필드 타입 - IP, Range, Binary
    • 7.3 멀티 (다중) 필드 - Multi Field
  • 8. 집계 - Aggregations
    • 8.1 메트릭 - Metrics Aggregations
    • 8.2 버킷 - Bucket Aggregations
    • 8.3 하위 - sub-aggregations
    • 8.4 파이프라인 - Pipeline Aggregations
Powered by GitBook
On this page
  • IP
  • 범위(Range)
  • Binary

Was this helpful?

  1. 7. 인덱스 설정과 매핑 - Settings & Mappings
  2. 7.2 매핑 - Mappings

7.2.7 기타 필드 타입 - IP, Range, Binary

이 문서의 허가되지 않은 무단 복제나 배포 및 출판을 금지합니다. 본 문서의 내용 및 도표 등을 인용하고자 하는 경우 출처를 명시하고 김종민(kimjmin@gmail.com)에게 사용 내용을 알려주시기 바랍니다.

지금까지 문자열, 숫자, 날짜, 불리언, 객체, 위치정보 들을 저장하는 필드 타입들을 살펴보았습니다. 이 외에도 Elasticsearch에는 다음과 같은 추상화 된 데이터 타입들이 있습니다.

IP

IP 주소 형식을 저장합니다. 매핑은 "type": "ip" 으로 선언합니다. 값은 "192.168.1.1" 같은 IPv4 형식과 "0:0:0:0:0:ffff:c0a8:105" 같은 IPv6 형식을 문자열 처럼 입력합니다.

범위(Range)

숫자나 날짜, IP 등을 시작과 끝이 있는 2차원의 범위 형태로 저장합니다. 매팽의 "type" 에 선언 가능한 값은 integer_range, float_range, long_range, double_range, date_range, ip_range 들이 있습니다. 데이터의 범위는 다음과 같이 gt, gte, lt, lte 를 사용해서 지정합니다.

integer_range 와 date_range 타입의 필드 선언
PUT my_range
{
  "mappings": {
    "properties": {
      "amount": {
        "type": "integer_range"
      },
      "days": {
        "type": "date_range"
      }
    }
  }
}

쿼리를 테스트 하기 위해 먼저 다음 도큐먼트를 입력하겠습니다.

integer_range, date_range 타입의 값을 가진 도큐먼트 입력
PUT my_range/_doc/1
{
  "amount": {
    "gte": 19,
    "lt": 28
  },
  "days": {
    "gt": "2019-06-01T09:00:00",
    "lt": "2019-06-20"
  }
}

Range 필드의 쿼리는 일반적인 숫자나 날짜 처럼 range 쿼리를 사용합니다. 다만 범위 데이터를 range 쿼리로 검색 할 때는 추가로 relation 옵션의 값을 입력해야 하며 입력하지 않으면 오류가 납니다. relation 옵션에 지정 가능한 값은 within, contains, intersects 3가지가 있습니다.

  • within : 도큐먼트 범위 값이 쿼리한 범위 안에 완전히 포함되는 도큐먼트들을 가져옵니다.

  • contains : within과 반대로 쿼리 범위가 도큐먼트 범위 값 안에 완전히 포함되는 도큐먼트들을 가져옵니다.

  • Intersects : 도큐먼트 범위 값과 쿼리 범위에 공통적인 부분이 있는 도큐먼트들을 가져옵니다.

사용 예제는 다음과 같습니다.

"relation": "intersects" 으로 range 쿼리
GET my_range/_search
{
  "query": {
    "range": {
      "amount": {
        "gte": "16",
        "lte": "25",
        "relation": "intersects"
      }
    }
  }
}
"relation": "intersects" 으로 range 쿼리 결과
{
  "took" : 950,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "my_range",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "amount" : {
            "gte" : 19,
            "lt" : 28
          },
          "days" : {
            "gt" : "2019-06-01T09:00:00",
            "lt" : "2019-06-20"
          }
        }
      }
    ]
  }
}

다른 값을 가진 도큐먼트를 더 입력하고 relation 값을 contains, within 으로 변경 해 가면서 더 실습 해 보시기 바랍니다.

여행이나 출장 정보를 담은 도큐먼트가 있다면 시작일, 종료일 두 필드를 지정하는 대신 출장기간 이라는 date_range 타입의 단일 필드로 값을 저장해서 더욱 편하고 유용하게 사용할 수 있습니다.

Binary

"type": "binary" 로 지정해서 시스템 파일이나 이미지 정보 같은 바이너리 값을 저장할 수 있습니다. binary 필드는 기본적으로 색인이 되지 않아 검색이나 집계가 불가능하고 _source에만 남아 있습니다.

바이너리 정보들은 일반적으로 용량이 크기 때문에 elasticsearch 도큐먼트에 저장하는 것은 불필요한 저장소와 통신 데이터의 낭비가 될 수 있습니다. 가능하면 바이너리 데이터의 저장은 S3 또는 HDFS 같은 저렴한 저장소를 이용하고 elasticsearch 도큐먼트에는 해당 자원에 접근 가능한 키 또는 URL 등만 저장해서 따로 가져오도록 하는 것이 바람직합니다.

지금까지 설명한 필드 외에도 수많은 종류의 필드 타입들이 있습니다. 새 버전이 나올 때 마다 새로운 필드 타입들이 추가되거나 기존에 있던 타입들의 사용이 만료되고 있기 때문에 항상 공식 도큐먼트를 잘 참고하시기 바랍니다.

Previous7.2.6 위치 정보 - GeoNext7.3 멀티 (다중) 필드 - Multi Field

Last updated 5 years ago

Was this helpful?