原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/ip.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/ip.html

IP 数据类型

ip字段可以索引/存储IPv4IPv6地址。

PUT my_index
{
  "mappings": {
    "properties": {
      "ip_addr": {
        "type": "ip"
      }
    }
  }
}

PUT my_index/_doc/1
{
  "ip_addr": "192.168.1.1"
}

GET my_index/_search
{
  "query": {
    "term": {
      "ip_addr": "192.168.0.0/16"
    }
  }
}

还可以使用 ip_range 数据类型 在单个字段中存储 IP 范围。

ip字段的参数

ip字段接受以下参数:

boost

映射字段级查询时提升,默认值为 1.0

doc_values

是否应该以列跨度(column-stride)的方式将字段存储在磁盘上,以便以后用于排序、聚合或编写脚本? 接受true(默认) 或false

index

该字段应该是可搜索的吗?接受 true (默认) 和 false

null_value

接受替换任何显式null的 IPv4 值。 默认值为 null,这意味着该字段被视为缺失。

store

字段值是否应该与_source字段分开存储和检索。 接受truefalse (默认)。

ip字段的查询

查询ip地址最常用的方法是使用CIDR符号:[ip_address]/[prefix_length]。例如:

GET my_index/_search
{
  "query": {
    "term": {
      "ip_addr": "192.168.0.0/16"
    }
  }
}

或者

GET my_index/_search
{
  "query": {
    "term": {
      "ip_addr": "2001:db8::/48"
    }
  }
}

还要注意,冒号在query_string查询中是特殊字符,因此 ipv6 地址需要转义。 最简单的方法是用引号将搜索的值括起来:

GET my_index/_search
{
  "query": {
    "query_string" : {
      "query": "ip_addr:\"2001:db8::/48\""
    }
  }
}