Тип поля IP
Поле типа ip может индексировать/хранить адреса IPv4 или IPv6.
resp = client.indices.create(
index="my-index-000001",
mappings={
"properties": {
"ip_addr": {
"type": "ip"
}
}
},
)
print(resp)
resp1 = client.index(
index="my-index-000001",
id="1",
document={
"ip_addr": "192.168.1.1"
},
)
print(resp1)
resp2 = client.search(
index="my-index-000001",
query={
"term": {
"ip_addr": "192.168.0.0/16"
}
},
)
print(resp2) response = client.indices.create(
index: 'my-index-000001',
body: {
mappings: {
properties: {
ip_addr: {
type: 'ip'
}
}
}
}
)
puts response
response = client.index(
index: 'my-index-000001',
id: 1,
body: {
ip_addr: '192.168.1.1'
}
)
puts response
response = client.search(
index: 'my-index-000001',
body: {
query: {
term: {
ip_addr: '192.168.0.0/16'
}
}
}
)
puts response const response = await client.indices.create({
index: "my-index-000001",
mappings: {
properties: {
ip_addr: {
type: "ip",
},
},
},
});
console.log(response);
const response1 = await client.index({
index: "my-index-000001",
id: 1,
document: {
ip_addr: "192.168.1.1",
},
});
console.log(response1);
const response2 = await client.search({
index: "my-index-000001",
query: {
term: {
ip_addr: "192.168.0.0/16",
},
},
});
console.log(response2); 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-адресов в одном поле, используя тип данных 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 - Если этот параметр установлен, поле будет индексировать значения, сгенерированные этим скриптом, а не считывать значения напрямую из источника. Если для этого поля установлено значение в документе-входе, документ будет отклонен с ошибкой. Скрипты имеют тот же формат, что и их эквиваленты runtime, и должны выводить строки с адресами в формате IPv4 или IPv6.
-
store - Необходимо ли хранить значение поля отдельно от поля
_source. Принимает значенияtrueилиfalse(по умолчанию). -
time_series_dimension -
(Необязательный, булевый)
Помечает поле как измерение временного ряда. По умолчанию
false.Настройка индекса
index.mapping.dimension_fields.limitограничивает количество измерений в индексе.Поля-измерения имеют следующие ограничения:
- Параметры отображения
doc_valuesиindexдолжны бытьtrue.
- Параметры отображения
Запрос к полям ip
Наиболее распространённый способ запроса IP-адресов — использование нотации CIDR: [ip_address]/[prefix_length]. Например:
resp = client.search(
index="my-index-000001",
query={
"term": {
"ip_addr": "192.168.0.0/16"
}
},
)
print(resp) response = client.search(
index: 'my-index-000001',
body: {
query: {
term: {
ip_addr: '192.168.0.0/16'
}
}
}
)
puts response const response = await client.search({
index: "my-index-000001",
query: {
term: {
ip_addr: "192.168.0.0/16",
},
},
});
console.log(response); GET my-index-000001/_search
{
"query": {
"term": {
"ip_addr": "192.168.0.0/16"
}
}
} или
resp = client.search(
index="my-index-000001",
query={
"term": {
"ip_addr": "2001:db8::/48"
}
},
)
print(resp) response = client.search(
index: 'my-index-000001',
body: {
query: {
term: {
ip_addr: '2001:db8::/48'
}
}
}
)
puts response const response = await client.search({
index: "my-index-000001",
query: {
term: {
ip_addr: "2001:db8::/48",
},
},
});
console.log(response); GET my-index-000001/_search
{
"query": {
"term": {
"ip_addr": "2001:db8::/48"
}
}
} Также имейте в виду, что двоеточие — это специальный символ для запроса query_string, поэтому адреса ipv6 необходимо экранировать. Самый простой способ — заключить искомое значение в кавычки:
resp = client.search(
index="my-index-000001",
query={
"query_string": {
"query": "ip_addr:\"2001:db8::/48\""
}
},
)
print(resp) response = client.search(
index: 'my-index-000001',
body: {
query: {
query_string: {
query: 'ip_addr:"2001:db8::/48"'
}
}
}
)
puts response const response = await client.search({
index: "my-index-000001",
query: {
query_string: {
query: 'ip_addr:"2001:db8::/48"',
},
},
});
console.log(response); GET my-index-000001/_search
{
"query": {
"query_string" : {
"query": "ip_addr:\"2001:db8::/48\""
}
}
} Синтетические поля _source
Синтетические поля _source доступны только для индексов TSDB (индексов, у которых параметр index.mode имеет значение time_series). Для других индексов синтетические поля _source находятся в техническом предварительном просмотре. Возможности в техническом предварительном просмотре могут быть изменены или удалены в будущих релизах. Elastic будет работать над исправлением любых проблем, но функции в техническом предварительном просмотре не подпадают под SLA поддержки официальных функций GA.
Синтетический источник может сортировать значения поля ip и удалять дубликаты. Например:
resp = client.indices.create(
index="idx",
settings={
"index": {
"mapping": {
"source": {
"mode": "synthetic"
}
}
}
},
mappings={
"properties": {
"ip": {
"type": "ip"
}
}
},
)
print(resp)
resp1 = client.index(
index="idx",
id="1",
document={
"ip": [
"192.168.0.1",
"192.168.0.1",
"10.10.12.123",
"2001:db8::1:0:0:1",
"::afff:4567:890a"
]
},
)
print(resp1) const response = await client.indices.create({
index: "idx",
settings: {
index: {
mapping: {
source: {
mode: "synthetic",
},
},
},
},
mappings: {
properties: {
ip: {
type: "ip",
},
},
},
});
console.log(response);
const response1 = await client.index({
index: "idx",
id: 1,
document: {
ip: [
"192.168.0.1",
"192.168.0.1",
"10.10.12.123",
"2001:db8::1:0:0:1",
"::afff:4567:890a",
],
},
});
console.log(response1); 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-адреса сортируются так, как если бы они были IPv6-адресами с префиксом ::ffff:0:0:0/96, как указано в rfc6144.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/ip.html