An ip field can index/store either IPv4 or
IPv6 addresses.
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"
}
}
}You can also store ip ranges in a single field using an ip_range datatype.
The following parameters are accepted by ip fields:
|
Mapping field-level query time boosting. Accepts a floating point number, defaults
to | |
|
Should the field be stored on disk in a column-stride fashion, so that it
can later be used for sorting, aggregations, or scripting? Accepts | |
|
Should the field be searchable? Accepts | |
|
Accepts an IPv4 value which is substituted for any explicit | |
|
Whether the field value should be stored and retrievable separately from
the |
The most common way to query ip addresses is to use the
CIDR
notation: [ip_address]/[prefix_length]. For instance:
GET my_index/_search
{
"query": {
"term": {
"ip_addr": "192.168.0.0/16"
}
}
}or
GET my_index/_search
{
"query": {
"term": {
"ip_addr": "2001:db8::/48"
}
}
}Also beware that colons are special characters to the
query_string query, so ipv6 addresses will
need to be escaped. The easiest way to do so is to put quotes around the
searched value:
GET my_index/_search
{
"query": {
"query_string" : {
"query": "ip_addr:\"2001:db8::/48\""
}
}
}