Elastic Search

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 um 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 recursos poderosos do Elasticsearch, como reindexação, ingerir nós, pipelines e processadores para tornar essas tarefas muito fáceis.

Este tutorial mostrará como alterar um tipo de campo em um índice específico para outro, usando nós de ingestão Elasticsearch. Usar esta abordagem irá eliminar o tempo de inatividade que afeta os serviços enquanto ainda gerencia a execução das 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é-processe documentos antes de sua indexação.

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

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

GET / _nodes /

O comando cURL para isso é:

curl -XGET “http: // localhost: 9200 / _nodes /”

A execução deste comando deve fornecer informações massivas sobre os nós, conforme 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": "default",
"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": "instance-0000000003.22e0bee6ef91461d82d9b0f1b4b13b4a ",
"disponibilidade_zone": "us-west-1c",
"xpack.instalado ":" verdadeiro ",
"instance_configuration": "aws.dados.Highio.i3 ",
"transformar.nó ":" verdadeiro ",
"região": "us-west-1"
,
"definições" :
"s3":
"cliente" :
"elastic-internal-22e0be":
"endpoint": "s3-us-west-1.amazonas.com "


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

Por padrão, todos os nós do Elasticsearch permitem a ingestão 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 apenas à ingestão.

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

Pré-processadores são conjuntos de instruções enroladas em um pipeline e são executadas uma de cada vez.

A seguir está a sintaxe geral de como definir um pipeline:


"descrição": "Converta-me",
"processadores": [
"convert":
"campo": "id",
"tipo": "inteiro"
]

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

Criar um pipeline de conversão

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

PUT _ingest / pipeline / convert_pipeline

“Descrição”: “converte o campo dayOfWeek em um longo de inteiro”,
"processadores": [

"convert":
"campo": "dayOfWeek",
"tipo": "longo"


]

Para cURL, use o comando:

curl -XPUT "http: // localhost: 9200 / _ingest / pipeline / convert_pipeline" -H 'Content-Type: application / json' -d '"description": "converte o campo dayOfWeek em um long from integer", " processadores ": [" convert ": " field ":" dayOfWeek "," type ":" long "] '

Reindexar e converter Modelo

Assim que tivermos o pipeline no nó de ingestão, tudo o que precisamos fazer é chamar a API de indexação e passar o pipeline como um argumento no destino do corpo da solicitação como:

POST _reindex

"fonte":
"index": "kibana_sample_data_flights"
,
"dest":
"index": "kibana_sample_type_diff",
"pipeline": "convert_pipeline"

Para 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 " '

 Verificar conversão

Para verificar se o pipeline 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": "longo"





Conclusão

Neste guia, vimos como trabalhar com nós de ingestão Elasticsearch para pré-processar documentos antes da indexação, convertendo assim um campo de um tipo para outro.

Considere a documentação para aprender mais.

https: // www.elástico.co / guide / en / elasticsearch / reference / master / ingest.html

Top 5 cartas de captura de jogos
Todos nós vimos e amamos streaming de jogos no YouTube. PewDiePie, Jakesepticye e Markiplier são apenas alguns dos melhores jogadores que ganharam mil...
Como desenvolver um jogo no Linux
Uma década atrás, poucos usuários de Linux preveriam que seu sistema operacional favorito um dia seria uma plataforma de jogos popular para videogames...
Portas de código aberto para motores de jogos comerciais
Recriações gratuitas, de código aberto e de mecanismo de jogo de plataforma cruzada podem ser usadas para jogar jogos antigos, bem como alguns dos tít...