doc_values
ほとんどのフィールドはデフォルトでインデックス化されており、検索可能です。逆インデックスは、検索用語をユニークなソート済みの用語リストで検索し、そこからその用語を含むドキュメントのリストに即座にアクセスできるようにします。
ソート、集計、およびスクリプト内でのフィールド値へのアクセスには、異なるデータアクセスパターンが必要です。用語を検索してドキュメントを見つけるのではなく、ドキュメントを検索してそのフィールドにある用語を見つける必要があります。
Doc valuesは、ドキュメントインデックス時に構築されるディスク上のデータ構造であり、このデータアクセスパターンを可能にします。これらは、_source
と同じ値を格納しますが、列指向の形式で格納されており、ソートや集計に対してはるかに効率的です。Doc valuesは、text
およびannotated_text
フィールドを除いて、ほぼすべてのフィールドタイプでサポートされています。
Doc-value-only fields
数値型、日付型、ブール型、IP型、geo_point型、およびキーワード型は、インデックス化されていない場合でもクエリ可能ですが、doc valuesのみが有効になっています。Doc valuesのクエリパフォーマンスはインデックス構造よりもはるかに遅いですが、ディスク使用量とクエリパフォーマンスの間で興味深いトレードオフを提供します。これは、通常フィルタリングに使用されることが期待されないフィールド、たとえばメトリックデータのゲージやカウンターに適しています。
Doc-value-onlyフィールドは、次のように構成できます:
Python
resp = client.indices.create(
index="my-index-000001",
mappings={
"properties": {
"status_code": {
"type": "long"
},
"session_id": {
"type": "long",
"index": False
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
mappings: {
properties: {
status_code: {
type: 'long'
},
session_id: {
type: 'long',
index: false
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
mappings: {
properties: {
status_code: {
type: "long",
},
session_id: {
type: "long",
index: false,
},
},
},
});
console.log(response);
Console
PUT my-index-000001
{
"mappings": {
"properties": {
"status_code": {
"type": "long"
},
"session_id": {
"type": "long",
"index": false
}
}
}
}
status_code フィールドは通常のロングフィールドです。 |
|
session_id フィールドはindex が無効になっているため、デフォルトでdoc valuesが有効なdoc-value-onlyロングフィールドです。 |
Disabling doc values
doc valuesをサポートするすべてのフィールドは、デフォルトで有効になっています。フィールドでソートや集計を行う必要がない、またはスクリプトからフィールド値にアクセスする必要がないと確信している場合は、ディスクスペースを節約するためにdoc valuesを無効にできます:
Python
resp = client.indices.create(
index="my-index-000001",
mappings={
"properties": {
"status_code": {
"type": "keyword"
},
"session_id": {
"type": "keyword",
"doc_values": False
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
mappings: {
properties: {
status_code: {
type: 'keyword'
},
session_id: {
type: 'keyword',
doc_values: false
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
mappings: {
properties: {
status_code: {
type: "keyword",
},
session_id: {
type: "keyword",
doc_values: false,
},
},
},
});
console.log(response);
Console
PUT my-index-000001
{
"mappings": {
"properties": {
"status_code": {
"type": "keyword"
},
"session_id": {
"type": "keyword",
"doc_values": false
}
}
}
}
status_code フィールドはデフォルトでdoc_values が有効です。 |
|
session_id はdoc_values が無効ですが、クエリ可能です。 |
wildcard
フィールドのdoc valuesを無効にすることはできません。