Como faço para mudar o tipo de campo em elasticsearch?

Como faço para mudar o tipo de campo em elasticsearch?
Usando a API de mapeamento _, você pode atualizar os campos existentes ou adicionar novos campos a um índice existente.

OBSERVAÇÃO: Para realizar alterações em um índice, verifique se você tem os privilégios de gerenciamento no índice de destino.

Uso básico

Para modificar um tipo de campo, envie uma solicitação de put para a API _Mapping seguida pelo corpo da solicitação. O corpo de solicitação inclui o parâmetro de propriedades e o mapeamento do campo de destino. Ao criar um novo campo, verifique se você inclui o nome do campo, tipo e parâmetros de mapeamento.

Por exemplo, a solicitação a seguir altera o tipo de campo de inteiro para longo.

Put /my-index /_mapping

"Propriedades":
"preço base":
"Tipo": "Long"


Após a conclusão bem -sucedida, você deve ver uma saída como:


"Reconhecido": verdadeiro

REINIDEXO Método

Na maioria dos casos, o Elasticsearch impedirá que você atualize o tipo de campo de um índice existente. Fazer isso pode levar os dados atuais a se tornarem inválidos e causar erros no índice.

Se você ainda deseja atualizar o tipo de campo existente, pode fazê -lo em algumas etapas simples.

  1. Crie um novo índice com as informações de mapeamento corretas, onde o tipo de campo é alterado para o tipo desejado.
  2. Reinicie os dados do seu antigo índice para o novo índice.
  3. Remova o índice antigo

O uso deste método permite reduzir o tempo mínimo de inatividade para o seu índice.

Criando um índice antigo

Vamos começar criando um índice com o tipo de campo incorreto.

Put /mude-me

"Mapeamentos":
"Propriedades":
"eu ia":
"Tipo": "Inteiro"
,
"nome de usuário":
"Tipo": "texto"



No exemplo acima, temos um índice simples com os dois campos: ID e nome de usuário. Os tipos de campo são inteiros e texto, respectivamente.

Vamos assumir que o campo contém dados, como mostrado na consulta a seguir:

Post /alteração-me /_doc


"ID": 1000,
"Nome de usuário": "raiz"

Post /alteração-me /_doc

"ID": 1001,
"Nome de usuário": "outro"

As duas consultas acima criarão um documento com os dados conforme fornecido no corpo de solicitação.

Verifique se os dados existem:

Get /Change-Me /_Search?bonito

"consulta":
"Match_all":

Devemos ver os dois registros como mostrado:

Crie um novo índice

Digamos que queremos mudar o campo de identificação de um número inteiro para uma palavra -chave. Começaremos criando um novo índice com o tipo como palavras -chave.

Put /Change-Me-Reindex

"Mapeamentos":
"Propriedades":
"eu ia":
"Tipo": "palavra -chave"
,
"nome de usuário":
"Tipo": "texto"



Na solicitação acima, criamos um novo índice e definimos o tipo de identificação como uma palavra -chave.

Reiniciar os dados antigos

A próxima etapa é reiniciar os dados do índice antigo para o novo usando a API _ reindex. O pedido para isso está abaixo:

Post /_reindex

"fonte":
"Índice": "Mudar-me"
,
"dest":
"Índice": "mudança-me-reindex"

A solicitação acima copiará os documentos do índice antigo para o novo, onde o tipo de campo muda de um número inteiro para uma palavra -chave.

Saída da consulta acima:


"Take": 8,
"timed_out": false,
"Total": 4,
"Atualizado": 0,
"Criado": 4,
"Excluído": 0,
"Lotes": 1,
"Version_conflicts": 0,
"Noops": 0,
"EXTIEIRAS":
"Bulk": 0,
"Pesquisa": 0
,
"Throttled_millis": 0,
"requests_per_second": -1.0,
"Totão_until_millis": 0,
"Falhas": []

Exclua o índice antigo

Agora que temos um índice atualizado com o mapeamento correto, é hora de remover o índice antigo. Podemos fazer isso enviando uma solicitação de exclusão ao índice como:

Exclua /altere-me

Após a remoção bem -sucedida, você deve ver uma saída como:


"Reconhecido": verdadeiro

Crie alias de índice

Se você tivesse aplicativos usando o índice antigo, eles podem parar de funcionar, pois não existe mais.

Podemos resolver isso criando um alias para o novo índice com o nome do antigo índice.

Put/alteração-me-reindex/_alias/alteração-me

A solicitação acima deve criar um alias para o novo índice.

Conclusão

Neste guia, você descobriu como alterar o tipo de campo existente em um índice Elasticsearch.