Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Отображение ›Параметры отображения

doc_values

По умолчанию большинство полей индексируются, что делает их доступными для поиска. Обратный индекс позволяет запросам искать термин поиска в отсортированном списке уникальных терминов и сразу получать список документов, содержащих этот термин.

Для сортировки, агрегаций и доступа к значениям полей в скриптах требуется другой шаблон доступа к данным. Вместо поиска термина и нахождения документов, нам нужно найти документ и найти в нём термины, присутствующие в поле.

Поле doc_values — это структура данных на диске, созданная во время индексирования, которая обеспечивает эффективный доступ к данным. Она хранит те же значения, что и _source, но в формате, ориентированном на столбцы, что эффективнее для сортировки и агрегаций.

Поддержка doc values доступна для большинства типов полей, за исключением полей text и annotated_text. См. также Отключение doc values.

Поля только с doc values

Числовые типы, типы дат, булевый тип, тип ip, тип geo_point и тип keyword также могут быть запрошены, если они не индексированы, но только с включенными doc values. Производительность запросов к doc values значительно ниже, чем к индексным структурам, но предлагает интересный компромисс между использованием дискового пространства и производительностью запросов для полей, которые редко используются для фильтрации, например, для измерителей или счётчиков метрических данных.

Поля только с doc values можно настроить следующим образом:

resp = client.indices.create(
    index="my-index-000001",
    mappings={
        "properties": {
            "status_code": {
                "type": "long"
            },
            "session_id": {
                "type": "long",
                "index": False
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        status_code: {
          type: 'long'
        },
        session_id: {
          type: 'long',
          index: false
        }
      }
    }
  }
)
puts response
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);
PUT my-index-000001
{
  "mappings": {
    "properties": {
      "status_code": { 
        "type":  "long"
      },
      "session_id": { 
        "type":  "long",
        "index": false
      }
    }
  }
}

Поле status_code — это обычное поле long.

У поля session_id отключено index, поэтому это поле long только с doc values, так как doc values включены по умолчанию.

Отключение doc values

Для всех полей, которые их поддерживают, doc_values включены по умолчанию. В некоторых типах полей, таких как search_as_you_type, doc_values отображаются в ответах API, но не могут быть настроены. Установка doc_values для этих полей может привести к ошибке или не иметь никакого эффекта.

Если вы уверены, что вам не нужно сортировать или агрегировать поле или получать его значения из скрипта, вы можете отключить doc_values, чтобы сохранить дисковое пространство:

resp = client.indices.create(
    index="my-index-000001",
    mappings={
        "properties": {
            "status_code": {
                "type": "keyword"
            },
            "session_id": {
                "type": "keyword",
                "doc_values": False
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        status_code: {
          type: 'keyword'
        },
        session_id: {
          type: 'keyword',
          doc_values: false
        }
      }
    }
  }
)
puts response
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);
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 отключено, но его всё равно можно запросить.

Вы не можете отключить doc values для полей wildcard.

© 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/doc-values.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API