Определение схемы данных
Определение схемы данных — это процесс определения того, как документ и содержащиеся в нём поля хранятся и индексируются.
Каждый документ представляет собой набор полей, каждое из которых имеет свой тип данных. При определении схемы данных вы создаёте определение схемы, которое содержит список полей, относящихся к документу. Определение схемы также включает метаданные полей, например, поле _source, которое настраивает обработку метаданных, связанных с документом.
Для определения данных используйте динамическое определение схемы и явное определение схемы. Каждый метод предоставляет различные преимущества в зависимости от этапа работы с данными. Например, явно определите поля, для которых вы не хотите использовать значения по умолчанию или для получения большего контроля над созданием полей. Затем вы можете разрешить Elasticsearch добавлять другие поля динамически.
До версии 7.0.0 определение схемы включало имя типа. Elasticsearch 7.0.0 и более поздние версии больше не принимают значение по умолчанию для схемы. См. Удаление типов схемы данных.
Динамическое определение схемы
При использовании динамического определения схемы, Elasticsearch автоматически пытается определить тип данных полей в ваших документах. Это позволяет быстро начать работу, просто добавив данные в индекс. Если вы индексируете дополнительные документы с новыми полями, Elasticsearch автоматически добавит эти поля. Вы можете добавлять поля в верхний уровень схемы и во вложенные поля object и nested.
Используйте динамические шаблоны для определения пользовательских схем, которые применяются к динамически добавляемым полям на основе условия соответствия.
Явное определение схемы
Используйте явное определение схемы, чтобы точно определить, как типы данных сопоставляются с полями, настраивая их под конкретный случай использования.
Определение собственной схемы позволяет:
- Определить, какие строковые поля следует обрабатывать как поля полнотекстового поиска.
- Определить, какие поля содержат числа, даты или геолокации.
- Использовать типы данных, которые нельзя автоматически определить (например,
geo_pointиgeo_shape). - Выбрать форматы значений дат, включая пользовательские форматы дат.
- Создать пользовательские правила для управления схемой для динамически добавляемых полей.
- Оптимизировать поля для частичного соответствия.
- Выполнять анализ текста, специфичный для языка.
Зачастую полезно индексировать одно и то же поле различными способами для разных целей. Например, вы можете индексировать строковое поле как поле полнотекстового поиска для полнотекстового поиска и как ключевое поле для сортировки или агрегирования данных. Или вы можете использовать более одного анализатора языка для обработки содержимого строкового поля, содержащего пользовательский ввод.
Используйте поля во время выполнения, чтобы вносить изменения в схему без повторной индексации. Вы можете использовать поля во время выполнения совместно с индексированными полями, чтобы сбалансировать использование ресурсов и производительность. Индекс будет меньше, но поиск будет медленнее.
Управление и обновление схемы данных
Явное определение схемы должно быть задано при создании индекса для полей, которые известны заранее. Вы по-прежнему можете добавлять новые поля к схеме в любое время по мере развития данных.
Используйте API для обновления схемы данных, чтобы обновить существующую схему.
В большинстве случаев вы не можете изменять схему данных для полей, которые уже имеют схему. Эти изменения требуют повторной индексации.
Однако вы можете обновить схему данных при определенных условиях:
- Вы можете добавить новые поля к существующей схеме в любое время, явно или динамически.
-
Вы можете добавить новые многопольные поля для существующих полей.
- Документы, индексированные до обновления схемы, не будут содержать значений для новых многопольных полей, пока они не будут обновлены или повторно индексированы. Документы, индексированные после изменения схемы, автоматически будут содержать значения для новых многопольных полей.
- Некоторые параметры схемы данных могут быть обновлены для существующих полей определённых типов данных.
Предотвращение взрыва схемы данных
Определение слишком большого количества полей в индексе может привести к взрыву схемы данных, что может вызвать ошибки недостатка памяти и трудности с восстановлением.
Рассмотрите ситуацию, когда каждый новый вставляемый документ вводит новые поля, например, при использовании динамического определения схемы. Каждое новое поле добавляется в схему индекса, что может стать проблемой по мере роста схемы.
Используйте настройки лимитов схемы данных, чтобы ограничить количество определений полей (созданных вручную или динамически) и предотвратить создание документов, вызывающих взрыв схемы данных.
© 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/mapping.html