Elasticsearch reindex Alterar tipo de campo

Elasticsearch reindex Alterar tipo de campo

Trabalhar com bancos de dados é muito divertido, mas às vezes pode ser desafiador, especialmente ao lidar com dados já existentes.

Por exemplo, se você deseja alterar o tipo de campo específico, pode exigir que você retire o serviço, o que pode ter graves repercussões, especialmente em serviços que processam grandes quantidades de dados.

Felizmente, podemos usar os poderosos recursos do Elasticsearch, como reindexação, nós de ingestão, oleodutos e processadores para facilitar essas tarefas.

Este tutorial mostrará como alterar um tipo de campo em um índice específico para outro, usando os nós de ingestão Elasticsearch. O uso dessa abordagem eliminará o tempo de inatividade que afeta os serviços enquanto ainda consegue executar as tarefas de mudança de tipo de campo.

Introdução aos nós de ingestão

O nó de ingestão do Elasticsearch permite que você pré-processo documentos antes da indexação.

Um nó Elasticsearch é uma instância específica do Elasticsearch; nós conectados (mais de um) fazem um único cluster.

Você pode visualizar os nós disponíveis no cluster em execução com a solicitação:

Get /_Nodes /

O comando Curl para este é:

Curl -xget “http: // localhost: 9200/_nodes/”

A execução deste comando deve fornecer informações enormes sobre os nós, como mostrado abaixo (saída truncada):


"_nodes":
"Total": 3,
"bem -sucedido": 3,
"falhou": 0
,
"Cluster_name": "22E0Bee6EF91461D82D9B0F1B4B13B4A",
"nós":
"GslmjtkyTemoox-eO7EM4W":
"Nome": "Instância-0000000003",
"Transport_address": "172.28.86.133: 19925 ",
"Host": "172.28.86.133 ",
"IP": "172.28.86.133 ",
"versão": "7.10.2 ",
"Build_flavor": "Padrão",
"Build_type": "Docker",
"Build_hash": "747E1CC71DEF077253878A59143C1F785AFA92B9",
"Total_indexing_buffer": 214748364,
"Funções": [
"dados",
"Data_cold",
"Data_Content",
"Data_hot",
"Data_warm",
"ingerir",
"mestre",
"Remote_cluster_client",
"transformar"
],
"atributos" :
"Logical_availability_zone": "Zone-0",
"Server_name": "Instância-0000000003.22E0BEE6EF91461D82D9B0F1B4B13B4A ",
"Disponibilidade_zone": "US-West-1C",
"Xpack.instalado ":" true ",
"Instância_configuration": "AWS.dados.HIGHIO.i3 ",
"transformar.nó ":" verdadeiro ",
"Região": "US-West-1"
,
"configurações" :
"S3":
"cliente" :
"Elastic-Internal-22E0be":
"endpoint": "s3-us-west-1.Amazonaws.com "


,
--------------------------------saída truncada---------------------

Por padrão, todos os nós do Elasticsearch permitem ingerir e são capazes de lidar com operações de ingestão. No entanto, para operações de ingestão pesada, você pode criar um único nó dedicado a ingerir apenas.

Para lidar com pre_process, antes de indexar os documentos, precisamos definir um pipeline que indique a série de pré -processadores.

Os pré -processadores são conjuntos de instruções envolvidas em torno de um oleoduto e são executadas uma de cada vez.

A seguir, a sintaxe geral de como definir um pipeline:


"Descrição": "me converte",
"Processadores": [
"convert":
"Campo": "ID",
"Tipo": "Inteiro"
]

A propriedade Descrição diz o que o pipeline deve alcançar. O próximo parâmetro são os pré -processadores, passados ​​como uma lista na ordem de sua execução.

Crie um pipeline de convertido

Para criar um pipeline que usaremos para converter um tipo, use a solicitação de put com o ponto de extremidade da API mais _ing como:

Coloque _ingest/pipeline/convert_pipeline

“Descrição”: “Converte o campo de campo de campo em um tempo inteiro”,
"Processadores": [

"convert":
"Campo": "DayofWeek",
"Tipo": "Long"


]

Para Curl, use o comando:

Curl -xput "http: // localhost: 9200/_ingest/pipeline/convert_piPeline" -h 'content -type: Application/json' -d '"description": "converte o campo Dayofek em um longo de inteiro", " Processadores ": [" convert ": " campo ":" DayofWeek "," Type ":" Long "] ''

Reindex e converter Tipo

Depois de termos o oleoduto no nó de ingestão, tudo o que precisamos fazer é chamar a API de indexação e passar no oleoduto como um argumento no Dest do órgão de solicitação como:

Post _reindex

"fonte":
"Index": "Kibana_sample_data_flights"
,
"dest":
"Index": "Kibana_sample_type_diff",
"pipeline": "convert_pipline"

Para Curl:

Curl -xpost "http: // localhost: 9200/_reindex" -h 'content -type: Application/json' -d '"fonte": "index": "kibana_sample_data_flights", "destin": " ":" kibana_sample_type_diff "," pipeline ":" convert_pipline " ''

Verifique a conversão

Para verificar se o oleoduto foi aplicado corretamente, use a solicitação GET para buscar esse campo específico como:

Get/kibana_sample_data_flights/_mapping/field/DayofWeek
Get/kibana_sample_type_diff/_mapping/field/DayofWeek

Isso deve retornar os dados como:

-----------------------ÍNDICE ORIGINAL---------------------------

"Kibana_sample_data_flights":
"Mapeamentos":
"dia da semana" :
"Full_name": "DayOfWeek",
"mapeamento" :
"dia da semana" :
"Tipo": "Inteiro"






-------------------------Dados reindexados-------------------------------

"Kibana_sample_type_diff":
"Mapeamentos":
"dia da semana" :
"Full_name": "DayOfWeek",
"mapeamento" :
"dia da semana" :
"Tipo": "Long"





Conclusão

Neste guia, analisamos como trabalhar com os nós de ingestão ElasticSearch para documentos pré-processo antes da indexação, convertendo um campo de um tipo para outro.

Considere a documentação para saber mais.

https: // www.elástico.CO/guia/pt/elasticsearch/reference/mestre/ingestão.html