ElasticSearch 학습노트 16Range 데이터 유형 및 검색

17100 단어

ElasticSearch 학습노트 16Range 데이터 유형 및 검색

  • Range 데이터 유형
  • 데이터와 날짜
  • IP 범위

  • Range 데이터 유형


    Elasticsearch는 다음과 같은 범위 데이터 유형을 지원합니다.
    데이터 유형
    설명
    integer_range
    기호 32비트 정수 범위 있음 2-32~232-1
    float_range
    단일 정밀도 32비트 IEEE 754 부동 소수점 범위
    long_range
    기호 64비트 정수 범위 2-64~264-1
    double_range
    이중 정밀도 64비트 IEEE 754 부동 소수점 범위
    date_range
    64비트 정수 범위에서 밀리초 범위의 기호 없음
    ip_range
    IPv4 또는 IPv6(or mixed) 주소를 지원하는 IP 범위

    데이터 및 날짜


    만약 우리가 회의실 관련 범위의 요구를 기록하는 색인을 가지고 있다면
    PUT range_index
    {
      "mappings": {
        "metting": {
          "properties": {
            "expected_attendees_age_range": {
              "type": "integer_range"
            },
            "time_frame_range": {
              "type": "date_range", 
              "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
            }
          }
        }
      }
    }
    

    예를 들어 만약에 우리가 10세에서 20세까지만 참가할 수 있도록 요구한다면 회의에 참가하는 시간은 11월 31일 낮 12시부터 새벽까지이다.
    PUT range_index/metting/1?refresh
    {
      "expected_attendees_age_range" : { 
        "gte" : 10,
        "lte" : 20
      },
      "time_frame_range" : { 
        "gte" : "2015-10-31 12:00:00", 
        "lte" : "2015-11-01"
      }
    }
    

    이때 또 열다섯 살짜리 학우가 달려와서 내가 참가할 만한 회의가 있는지 물었다. 우리는 어떻게 조회해야 합니까?
    GET range_index/metting/_search?
    {
      "query" : {
        "term" : {
          "expected_attendees_age_range" : {
            "value": 12
          }
        }
      }
    }
    

    결과는 다음과 같다.
    {
      "took": 0,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 1,
        "max_score": 1,
        "hits": [
          {
            "_index": "range_index",
            "_type": "metting",
            "_id": "1",
            "_score": 1,
            "_source": {
              "expected_attendees_age_range": {
                "gte": 10,
                "lte": 20
              },
              "time_frame_range": {
                "gte": "2015-10-31 12:00:00",
                "lte": "2015-11-01"
              }
            }
          }
        ]
      }
    }
    

    이때 우리는 시간 범위를 판단해야 하는데, 회의가 전개되었습니까?
    GET range_index/metting/_search
    {
      "query" : {
        "range" : {
          "time_frame_range" : { 
            "gte" : "2015-10-31",
            "lte" : "2015-11-01",
            "relation" : "within" 
          }
        }
      }
    }
    

    결과는 다음과 같습니다.
    {
      "took": 3,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 1,
        "max_score": 1,
        "hits": [
          {
            "_index": "range_index",
            "_type": "metting",
            "_id": "1",
            "_score": 1,
            "_source": {
              "expected_attendees_age_range": {
                "gte": 10,
                "lte": 20
              },
              "time_frame_range": {
                "gte": "2015-10-31 12:00:00",
                "lte": "2015-11-01"
              }
            }
          }
        ]
      }
    }
    

    IP 범위


    지금 만약 우리가 일련의 IP 화이트리스트를 기록해야 한다면
    PUT ip_range_index
    {
      "mappings":{
        "_doc":{
          "properties": {
            "ip_whitelist": {
            "type": "ip_range"
            }
          }
        }
      }
    }
    

    가입 기록:
    PUT ip_range_index/_doc/2
    {
      "ip_whitelist" : "192.168.0.0/16"
    }
    

    IP가 화이트리스트에 있는지 확인하기
    GET ip_range_index/_doc/_search
    {
      "query" : {
        "term" : {
          "ip_whitelist" : {
            "value": "192.168.0.12"
          }
        }
      }
    }
    

    좋은 웹페이지 즐겨찾기