Эластичный поиск

Elasticsearch Reindex Изменить тип поля

Elasticsearch Reindex Изменить тип поля

Работать с базами данных очень весело, но иногда может быть сложно, особенно при работе с уже существующими данными.

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

К счастью, мы можем использовать мощные функции Elasticsearch, такие как переиндексирование, узлы приема, конвейеры и процессоры, чтобы упростить такие задачи.

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

Введение в узлы загрузки

Узел приема Elasticsearch позволяет предварительно обрабатывать документы перед их индексированием.

Узел Elasticsearch - это конкретный экземпляр Elasticsearch; подключенные узлы (более одного) составляют единый кластер.

Вы можете просмотреть узлы, доступные в работающем кластере, с помощью запроса:

GET / _nodes /

Команда cURL для этого:

curl -XGET «http: // localhost: 9200 / _nodes /»

Выполнение этой команды должно дать вам обширную информацию об узлах, как показано ниже (усеченный вывод):


"_nodes":
«всего»: 3,
«успешно»: 3,
"не удалось": 0
,
"имя_кластера": "22e0bee6ef91461d82d9b0f1b4b13b4a",
"узлы":
"gSlMjTKyTemoOX-EO7Em4w":
"имя": "экземпляр-0000000003",
"transport_address": "172.28 год.86.133: 19925 ",
"host": "172.28 год.86.133 ",
"ip": "172.28 год.86.133 ",
"версия": "7.10.2 ",
"build_flavor": "по умолчанию",
"build_type": "докер",
"build_hash": "747e1cc71def077253878a59143c1f785afa92b9",
"total_indexing_buffer": 214748364,
"роли": [
"данные",
"data_cold",
"data_content",
"data_hot",
"data_warm",
"глотать",
"владелец",
"удаленный_кластер_клиент",
«Преобразовать»
],
"attributes":
"logical_availability_zone": "зона-0",
"server_name": "instance-0000000003.22e0bee6ef91461d82d9b0f1b4b13b4a ",
"availability_zone": "us-west-1c",
"xpack.установлено ":" истина ",
"instance_configuration": "aws.данные.Highio.i3 ",
"преобразовать.узел ":" истина ",
"регион": "us-west-1"
,
"настройки" :
"s3":
"client":
"elastic-internal-22e0be":
"endpoint": "s3-us-west-1.амазонки.com "


,
--------------------------------вывод усечен---------------------

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

Чтобы обрабатывать pre_process, перед индексированием документов нам нужно определить конвейер, который устанавливает серию препроцессоров.

Препроцессоры - это наборы инструкций, обернутых вокруг конвейера и выполняемые по одной за раз.

Ниже приводится общий синтаксис определения конвейера:


"description": "Преобразуйте меня",
"процессоры": [
"перерабатывать" :
"поле": "идентификатор",
"тип": "целое число"
]

Свойство description говорит, чего должен достичь конвейер. Следующий параметр - это препроцессоры, передаваемые списком в порядке их выполнения.

Создать конвейер преобразования

Чтобы создать конвейер, который мы будем использовать для преобразования типа, используйте запрос PUT с конечной точкой API _ingest как:

PUT _ingest / pipeline / convert_pipeline

«Description»: «преобразует поле dayOfWeek в длинное из целого числа»,
"процессоры": [

"перерабатывать" :
"field": "dayOfWeek",
"тип": "длинный"


]

Для cURL используйте команду:

curl -XPUT "http: // localhost: 9200 / _ingest / pipeline / convert_pipeline" -H 'Content-Type: application / json' -d '"description": "преобразует поле dayOfWeek в длинное из целого числа", " процессоры ": [" convert ": " field ":" dayOfWeek "," type ":" long "] '

Переиндексировать и конвертировать Тип

Когда у нас есть конвейер в узле приема, все, что нам нужно сделать, это вызвать API индексирования и передать конвейер в качестве аргумента в dest тела запроса как:

POST _reindex

"источник":
"index": "kibana_sample_data_flights"
,
"dest":
"index": "kibana_sample_type_diff",
"pipeline": "convert_pipeline"

Для cURL:

curl -XPOST "http: // localhost: 9200 / _reindex" -H 'Content-Type: application / json' -d '"source": "index": "kibana_sample_data_flights", "dest": "index ":" kibana_sample_type_diff "," pipeline ":" convert_pipeline " '

 Проверить конверсию

Чтобы убедиться, что конвейер применен правильно, используйте запрос GET, чтобы получить это конкретное поле как:

GET / kibana_sample_data_flights / _mapping / field / dayOfWeek
GET / kibana_sample_type_diff / _mapping / field / dayOfWeek

Это должно вернуть данные как:

-----------------------ОРИГИНАЛЬНЫЙ ИНДЕКС---------------------------

"kibana_sample_data_flights":
"mappings":
"день недели" :
"full_name": "dayOfWeek",
"mapping":
"день недели" :
"тип": "целое число"






-------------------------ПЕРЕИНДЕКСИРУЕМЫЕ ДАННЫЕ-------------------------------

"kibana_sample_type_diff":
"mappings":
"день недели" :
"full_name": "dayOfWeek",
"mapping":
"день недели" :
"тип": "длинный"





Заключение

В этом руководстве мы рассмотрели, как работать с узлами Elasticsearch Ingest для предварительной обработки документов перед индексированием, тем самым преобразовывая поле из одного типа в другой.

Изучите документацию, чтобы узнать больше.

https: // www.эластичный.co / руководство / en / elasticsearch / ссылка / мастер / захват.html

Лучшие дистрибутивы Linux для игр в 2021 году
Операционная система Linux прошла долгий путь от своего первоначального простого серверного вида. Эта ОС значительно улучшилась за последние годы и те...
Как записать и транслировать игровую сессию в Linux
В прошлом игры считались только хобби, но со временем игровая индустрия увидела огромный рост с точки зрения технологий и количества игроков. Игровая ...
Лучшие игры с отслеживанием рук
Oculus Quest недавно представил отличную идею отслеживания рук без контроллеров. С постоянно растущим числом игр и действий, которые осуществляются фо...