例: 値を範囲に一致させてデータを豊かにする
range
enrich policy は、term
query を使用して、受信文書内の数値、日付、またはIPアドレスを、enrich index内の同じタイプの範囲に一致させます。範囲を範囲に一致させることはサポートされていません。
次の例では、IPアドレスに基づいて受信文書に説明的なネットワーク名と責任部門を追加する range
enrich policy を作成します。その後、enrich policy をインジェストパイプライン内のプロセッサに追加します。
適切なマッピングを使用して、create index API を使用してソースインデックスを作成します。
Python
resp = client.indices.create(
index="networks",
mappings={
"properties": {
"range": {
"type": "ip_range"
},
"name": {
"type": "keyword"
},
"department": {
"type": "keyword"
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'networks',
body: {
mappings: {
properties: {
range: {
type: 'ip_range'
},
name: {
type: 'keyword'
},
department: {
type: 'keyword'
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "networks",
mappings: {
properties: {
range: {
type: "ip_range",
},
name: {
type: "keyword",
},
department: {
type: "keyword",
},
},
},
});
console.log(response);
Console
PUT /networks
{
"mappings": {
"properties": {
"range": { "type": "ip_range" },
"name": { "type": "keyword" },
"department": { "type": "keyword" }
}
}
}
次のインデックスAPIリクエストは、そのインデックスに新しい文書をインデックスします。
Python
resp = client.index(
index="networks",
id="1",
refresh="wait_for",
document={
"range": "10.100.0.0/16",
"name": "production",
"department": "OPS"
},
)
print(resp)
Ruby
response = client.index(
index: 'networks',
id: 1,
refresh: 'wait_for',
body: {
range: '10.100.0.0/16',
name: 'production',
department: 'OPS'
}
)
puts response
Js
const response = await client.index({
index: "networks",
id: 1,
refresh: "wait_for",
document: {
range: "10.100.0.0/16",
name: "production",
department: "OPS",
},
});
console.log(response);
Console
PUT /networks/_doc/1?refresh=wait_for
{
"range": "10.100.0.0/16",
"name": "production",
"department": "OPS"
}
[create enrich policy API]を使用して、range
ポリシータイプのenrich policyを作成します。このポリシーには次のものが含まれている必要があります:
- 1つ以上のソースインデックス
- 受信文書と一致させるために使用されるソースインデックスからのフィールドである
match_field
- 受信文書に追加したいソースインデックスからのenrichフィールド
IPアドレスに基づいて文書を豊かにする予定なので、ポリシーのmatch_field
はip_range
フィールドである必要があります。
Python
resp = client.enrich.put_policy(
name="networks-policy",
range={
"indices": "networks",
"match_field": "range",
"enrich_fields": [
"name",
"department"
]
},
)
print(resp)
Ruby
response = client.enrich.put_policy(
name: 'networks-policy',
body: {
range: {
indices: 'networks',
match_field: 'range',
enrich_fields: [
'name',
'department'
]
}
}
)
puts response
Js
const response = await client.enrich.putPolicy({
name: "networks-policy",
range: {
indices: "networks",
match_field: "range",
enrich_fields: ["name", "department"],
},
});
console.log(response);
Console
PUT /_enrich/policy/networks-policy
{
"range": {
"indices": "networks",
"match_field": "range",
"enrich_fields": ["name", "department"]
}
}
[execute enrich policy API]を使用して、ポリシーのためのenrich indexを作成します。
Console
POST /_enrich/policy/networks-policy/_execute?wait_for_completion=false
[create or update pipeline API]を使用して、インジェストパイプラインを作成します。パイプライン内で、次のものを含む[enrich processor]を追加します:
- あなたのenrich policy。
- enrich indexからの文書と一致させるために使用される受信文書の
field
。 - 受信文書のために追加されたenrichデータを格納するために使用される
target_field
。このフィールドには、あなたのenrich policyで指定されたmatch_field
とenrich_fields
が含まれます。
Python
resp = client.ingest.put_pipeline(
id="networks_lookup",
processors=[
{
"enrich": {
"description": "Add 'network' data based on 'ip'",
"policy_name": "networks-policy",
"field": "ip",
"target_field": "network",
"max_matches": "10"
}
}
],
)
print(resp)
Js
const response = await client.ingest.putPipeline({
id: "networks_lookup",
processors: [
{
enrich: {
description: "Add 'network' data based on 'ip'",
policy_name: "networks-policy",
field: "ip",
target_field: "network",
max_matches: "10",
},
},
],
});
console.log(response);
Console
PUT /_ingest/pipeline/networks_lookup
{
"processors" : [
{
"enrich" : {
"description": "Add 'network' data based on 'ip'",
"policy_name": "networks-policy",
"field" : "ip",
"target_field": "network",
"max_matches": "10"
}
}
]
}
インジェストパイプラインを使用して文書をインデックスします。受信文書には、あなたのenrich processorで指定されたfield
が含まれている必要があります。
Python
resp = client.index(
index="my-index-000001",
id="my_id",
pipeline="networks_lookup",
document={
"ip": "10.100.34.1"
},
)
print(resp)
Js
const response = await client.index({
index: "my-index-000001",
id: "my_id",
pipeline: "networks_lookup",
document: {
ip: "10.100.34.1",
},
});
console.log(response);
Console
PUT /my-index-000001/_doc/my_id?pipeline=networks_lookup
{
"ip": "10.100.34.1"
}
enrich processorが適切なフィールドデータを一致させて追加したことを確認するには、get APIを使用してインデックスされた文書を表示します。
Python
resp = client.get(
index="my-index-000001",
id="my_id",
)
print(resp)
Ruby
response = client.get(
index: 'my-index-000001',
id: 'my_id'
)
puts response
Js
const response = await client.get({
index: "my-index-000001",
id: "my_id",
});
console.log(response);
Console
GET /my-index-000001/_doc/my_id
Console-Result
{
"_index" : "my-index-000001",
"_id" : "my_id",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"ip" : "10.100.34.1",
"network" : [
{
"name" : "production",
"range" : "10.100.0.0/16",
"department" : "OPS"
}
]
}
}