В Elasticsearch поля могут быть индексированными или неиндексированными в зависимости от условий использования и требований. Неиндексированные поля - это те поля, которые присутствуют в документах, но не доступны для поиска или агрегирования. В этой статье мы рассмотрим работу с неиндексированными полями в Elasticsearch, включая сценарии использования, способы их настройки и запросы к документам, содержащим неиндексированные поля.
Примеры использования неиндексированных полей
Существует несколько причин, по которым вы можете захотеть использовать неиндексированные поля в Elasticsearch:
- Оптимизация хранения: Неиндексированные поля позволяют сэкономить место в хранилище, поскольку Elasticsearch не нужно хранить инвертированный индекс для этих полей.
- Повышение производительности: Не индексируя определенные поля, вы можете сократить время индексирования и повысить общую производительность кластера Elasticsearch.
- Чувствительные данные: У вас могут быть поля, содержащие конфиденциальные данные, которые не должны быть доступны для поиска или агрегирования.
Настройка неиндексированных полей
Чтобы настроить поле как неиндексируемое, необходимо установить свойство "index" в мапинге полей в значение "false". Вот пример того, как создать индекс с неиндексированным полем:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | PUT /my_index { "mappings": { "properties": { "title": { "type": "text" }, "description": { "type": "text" }, "not_indexed_field": { "type": "keyword", "index": false } } } } |
В этом примере поле "not_indexed_field" имеет тип "keyword" и не индексируется.
Запрос документов с неиндексированными полями
Поскольку неиндексированные поля не доступны для поиска, вы не можете использовать их в запросах типа "match" или "term". Однако вы все равно можете получить эти поля при выборке документов с помощью параметра "_source". Вот пример того, как получить документ с неиндексированным полем:
1 2 3 4 5 6 7 8 9 10 11 12 13 | GET /my_index/_search { "_source": [ "title", "description", "not_indexed_field" ], "query": { "match": { "title": "example" } } } |
В этом примере поисковый запрос сопоставляет документы по полю "title", а ответ включает неиндексированное поле в объекте "_source".
Обновление неиндексированных полей
Вы можете обновить неиндексированные поля с помощью API Update или Bulk API. Вот пример того, как обновить неиндексированное поле с помощью API Update:
1 2 3 4 5 6 | POST /my_index/_update/1 { "doc": { "not_indexed_field": "new_value" } } |
В этом примере "not_indexed_field" документа с идентификатором "1" обновляется до "new_value".
Заключение
Неиндексированные поля в Elasticsearch могут быть полезны в определенных сценариях, таких как оптимизация хранения и производительности или работа с конфиденциальными данными. Настроив мапинг полей и используя соответствующие API, вы сможете эффективно управлять и извлекать неиндексированные поля в кластере Elasticsearch.