IPフィールドタイプ
ip
フィールドは、IPv4 または IPv6 アドレスをインデックス/ストアできます。
Python
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)
Ruby
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
Js
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
- 明示的な
null
値の代わりにIPv4またはIPv6値を受け入れます。 デフォルトはnull
で、これはフィールドが欠落していると見なされることを意味します。script
パラメータが使用されている場合、これは設定できないことに注意してください。 on_script_error
script
パラメータで定義されたスクリプトがインデックス作成時にエラーをスローした場合の処理を定義します。reject
(デフォルト) を受け入れ、これによりドキュメント全体が拒否され、ignore
はドキュメントの_ignored
メタデータフィールドにフィールドを登録し、インデックス作成を続行します。このパラメータは、script
フィールドも設定されている場合にのみ設定できます。script
- このパラメータが設定されている場合、フィールドはこのスクリプトによって生成された値をインデックスし、ソースから直接値を読み取るのではありません。 入力ドキュメントでこのフィールドに値が設定されている場合、ドキュメントはエラーで拒否されます。 スクリプトはその ランタイム相当 と同じ形式であり、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]
。例えば:
Python
resp = client.search(
index="my-index-000001",
query={
"term": {
"ip_addr": "192.168.0.0/16"
}
},
)
print(resp)
Ruby
response = client.search(
index: 'my-index-000001',
body: {
query: {
term: {
ip_addr: '192.168.0.0/16'
}
}
}
)
puts response
Js
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"
}
}
}
または
Python
resp = client.search(
index="my-index-000001",
query={
"term": {
"ip_addr": "2001:db8::/48"
}
},
)
print(resp)
Ruby
response = client.search(
index: 'my-index-000001',
body: {
query: {
term: {
ip_addr: '2001:db8::/48'
}
}
}
)
puts response
Js
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アドレスはエスケープする必要があります。 最も簡単な方法は、検索する値の周りに引用符を付けることです:
Python
resp = client.search(
index="my-index-000001",
query={
"query_string": {
"query": "ip_addr:\"2001:db8::/48\""
}
},
)
print(resp)
Ruby
response = client.search(
index: 'my-index-000001',
body: {
query: {
query_string: {
query: 'ip_addr:"2001:db8::/48"'
}
}
}
)
puts response
Js
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は問題を修正するために作業しますが、技術プレビューの機能は公式GA機能のサポートSLAの対象ではありません。
ip
フィールドは、デフォルト設定で 合成 _source
をサポートします。合成 _source
は、copy_to
または doc_values
が無効な場合、一緒に使用できません。
合成ソースは常に ip
フィールドをソートし、重複を削除します。例えば:
Python
resp = client.indices.create(
index="idx",
mappings={
"_source": {
"mode": "synthetic"
},
"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)
Ruby
response = client.indices.create(
index: 'idx',
body: {
mappings: {
_source: {
mode: 'synthetic'
},
properties: {
ip: {
type: 'ip'
}
}
}
}
)
puts response
response = client.index(
index: 'idx',
id: 1,
body: {
ip: [
'192.168.0.1',
'192.168.0.1',
'10.10.12.123',
'2001:db8::1:0:0:1',
'::afff:4567:890a'
]
}
)
puts response
Js
const response = await client.indices.create({
index: "idx",
mappings: {
_source: {
mode: "synthetic",
},
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
{
"mappings": {
"_source": { "mode": "synthetic" },
"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アドレスは、rfc6144 で指定されたように、IPv6アドレスの前に ::ffff:0:0:0/96
が付けられているかのようにソートされます。