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

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "status_code": {
  6. "type": "long"
  7. },
  8. "session_id": {
  9. "type": "long",
  10. "index": False
  11. }
  12. }
  13. },
  14. )
  15. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. status_code: {
  7. type: 'long'
  8. },
  9. session_id: {
  10. type: 'long',
  11. index: false
  12. }
  13. }
  14. }
  15. }
  16. )
  17. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. status_code: {
  6. type: "long",
  7. },
  8. session_id: {
  9. type: "long",
  10. index: false,
  11. },
  12. },
  13. },
  14. });
  15. console.log(response);

Console

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "status_code": {
  6. "type": "long"
  7. },
  8. "session_id": {
  9. "type": "long",
  10. "index": false
  11. }
  12. }
  13. }
  14. }
status_codeフィールドは通常のロングフィールドです。
session_idフィールドはindexが無効になっているため、デフォルトでdoc valuesが有効なdoc-value-onlyロングフィールドです。

Disabling doc values

doc valuesをサポートするすべてのフィールドは、デフォルトで有効になっています。フィールドでソートや集計を行う必要がない、またはスクリプトからフィールド値にアクセスする必要がないと確信している場合は、ディスクスペースを節約するためにdoc valuesを無効にできます:

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "status_code": {
  6. "type": "keyword"
  7. },
  8. "session_id": {
  9. "type": "keyword",
  10. "doc_values": False
  11. }
  12. }
  13. },
  14. )
  15. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. status_code: {
  7. type: 'keyword'
  8. },
  9. session_id: {
  10. type: 'keyword',
  11. doc_values: false
  12. }
  13. }
  14. }
  15. }
  16. )
  17. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. status_code: {
  6. type: "keyword",
  7. },
  8. session_id: {
  9. type: "keyword",
  10. doc_values: false,
  11. },
  12. },
  13. },
  14. });
  15. console.log(response);

Console

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "status_code": {
  6. "type": "keyword"
  7. },
  8. "session_id": {
  9. "type": "keyword",
  10. "doc_values": false
  11. }
  12. }
  13. }
  14. }
status_codeフィールドはデフォルトでdoc_valuesが有効です。
session_iddoc_valuesが無効ですが、クエリ可能です。

wildcardフィールドのdoc valuesを無効にすることはできません。