加载中

IP 字段类型

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

 PUT my-index-000001 {
  "mappings": {
    "properties": {
      "ip_addr": {
        "type": "ip"
      }
    }
  }
}

PUT my-index-000001/_doc/1
{
  "ip_addr": "192.168.1.1"
}

GET my-index-000001/_search
{
  "query": {
    "term": {
      "ip_addr": "192.168.0.0/16"
    }
  }
}
注意

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

ip 字段接受以下参数:

doc_values
字段是否应以列式存储方式存储在磁盘上,以便稍后用于排序、聚合或脚本?接受 true(默认值)或 false
ignore_malformed
如果为 true,格式错误的 IP 地址将被忽略。如果为 false(默认值),格式错误的 IP 地址将抛出异常并拒绝整个文档。请注意,如果使用了 script 参数,则无法设置此项。
index
字段是否应快速可搜索?接受 true(默认值)和 false。仅启用了 doc_values 的字段仍然可以使用词项或范围查询进行查询,尽管速度较慢。
null_value
接受 IPv4 或 IPv6 值,用于替换任何显式的 null 值。默认为 null,这意味着该字段被视为缺失。请注意,如果使用了 script 参数,则无法设置此项。
on_script_error
定义如果由 script 参数定义的脚本在索引时抛出错误时应执行的操作。接受 reject(默认值),这将导致整个文档被拒绝;以及 ignore,这将把字段注册到文档的 _ignored 元数据字段中并继续索引。此参数仅在也设置了 script 字段时才能设置。
script
如果设置了此参数,则该字段将索引由该脚本生成的值,而不是直接从源读取值。如果在输入文档中为此字段设置了值,则文档将被拒绝并报错。脚本的格式与其运行时等效项相同,并且应发出包含 IPv4 或 IPv6 格式地址的字符串。
store
字段值是否应与_source 字段分开存储和检索。接受 truefalse(默认值)。
time_series_dimension

(可选,布尔值)

将字段标记为时间序列维度。默认为 false

index.mapping.dimension_fields.limit 索引设置限制了索引中的维度数量。

维度字段有以下约束:

  • doc_valuesindex 映射参数必须为 true

查询 IP 地址最常见的方法是使用 CIDR 表示法:[ip_address]/[prefix_length]。例如:

 GET my-index-000001/_search {
  "query": {
    "term": {
      "ip_addr": "192.168.0.0/16"
    }
  }
}

 GET my-index-000001/_search {
  "query": {
    "term": {
      "ip_addr": "2001:db8::/48"
    }
  }
}

另请注意,冒号对于 query_string 查询来说是特殊字符,因此 IPv6 地址需要进行转义。最简单的方法是在搜索值周围加上引号:

 GET my-index-000001/_search {
  "query": {
    "query_string" : {
      "query": "ip_addr:\"2001:db8::/48\""
    }
  }
}
重要提示

合成 _source 目前仅对 TSDB 索引(将 index.mode 设置为 time_series 的索引)正式发布 (Generally Available)。对于其他索引,合成 _source 处于技术预览阶段 (technical preview)。技术预览中的功能可能会在未来版本中更改或移除。Elastic 将努力修复任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 的约束。

合成源可能会对 ip 字段值进行排序并移除重复项。例如:

 PUT idx {
  "settings": {
    "index": {
      "mapping": {
        "source": {
          "mode": "synthetic"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "ip": { "type": "ip" }
    }
  }
}
PUT idx/_doc/1
{
  "ip": ["192.168.0.1", "192.168.0.1", "10.10.12.123",
         "2001:db8::1:0:0:1", "::afff:4567:890a"]
}

将变为

{
  "ip": ["::afff:4567:890a", "10.10.12.123", "192.168.0.1", "2001:db8::1:0:0:1"]
}
注意

IPv4 地址被视为前缀为 ::ffff:0:0:0/96 的 IPv6 地址进行排序,如 rfc6144 所指定。

© . All rights reserved.