Removendo dados do ElasticSearch

362

Eu sou novo no ElasticSearch . Estou tentando descobrir como remover dados do ElasticSearch. Eu apaguei meus índices. No entanto, isso não parece realmente remover os dados em si. As outras coisas que vi apontam para o recurso Excluir por consulta . No entanto, nem tenho certeza do que consultar. Eu conheço meus índices. Essencialmente, eu gostaria de descobrir como fazer um

DELETE FROM [Index]

Do PostMan no Chrome. No entanto, não estou tendo sorte. Parece que não importa o que eu faça, os dados ficam por aí. Até o momento, excluii com êxito os índices usando o DELETE HTTP Verb no PostMan e usando um URL como:

   http://localhost:9200/[indexName]

No entanto, isso não parece realmente remover os dados (também conhecidos como documentos).

user687554
fonte
Eu verifico isso com o carteiro e fui reposne como "{" reconhecido ": true}" Se você vir essa resposta reconhecida, não se preocupe. O índice é removido do elástico.
bijayk

Respostas:

428

Você pode excluir usando cURLou visualmente uma das muitas ferramentas criadas por entusiastas de código aberto para o Elasticsearch.

Usando cURL

curl -XDELETE localhost:9200/index/type/documentID

por exemplo

curl -XDELETE localhost:9200/shop/product/1

Você receberá uma resposta sobre se isso foi bem-sucedido ou não. Você pode excluir um índice ou tipos inteiros com um índice também, excluir um tipo deixando de fora o ID do documento da seguinte forma:

curl -XDELETE localhost:9200/shop/product

Se você deseja excluir um índice -

curl -XDELETE localhost:9200/shop

Se você deseja excluir mais de um índice que segue uma determinada convenção de nomenclatura (observe *um curinga), -

curl -XDELETE localhost:9200/.mar* 

Visualmente

Existem várias ferramentas, como mencionado acima, não as listarei aqui, mas irei vinculá-lo a uma que permita que você comece imediatamente, localizado aqui . Essa ferramenta é chamada KOPF. Para conectar-se ao seu host, clique no logotipo no canto superior esquerdo e digite o URL do seu cluster.

Uma vez conectado, você poderá administrar todo o cluster, excluir, otimizar e ajustar o cluster.

Opster Elasticsearch - Nathan
fonte
existe alguma maneira de excluir 3 documentos dos quais eu sei.
HIRA THAKUR
@JayeshJain ao meu conhecimento atual, não. Você pode colocar 3 comandos curl -XDELETE modificados em um script bash e executar ou executar 3 um após o outro.
Opster ElasticSearch - Nathan
@JayeshJain então enrola -XDELETE localhost: 9200 / index / type / docid1 // enrola -XDELETE localhost: 9200 / index / type / docid2 // enrola -XDELETE localhost: 9200 / index / type / docid3
Opster Elasticsearch - Nathan
Eu fiz da mesma maneira. mas eu estava pensando se existe uma maneira mais inteligente de excluir vários documentos. Eu poderia usar o termo se conhecesse o campo. Mas nesse cenário, eu só preciso excluir os documentos pelo ID. Thx anyways
HIRA THAKUR
2
Como posso excluir um índice com um caractere inválido, por exemplo, logstash-eu -% {customer} -2016.11.22. Desejo excluir TODOS os índices logstash-eu -% {customer} - * ou logstash-eu -% * #
Chris F
459

Se você precisar excluir todos os índices, isso pode ser útil:

curl -X DELETE 'http://localhost:9200/_all'

Powershell:

Invoke-WebRequest -method DELETE http://localhost:9200/_all
kha
fonte
20
isso é muito útil para o desenvolvimento e é necessário redefinir o banco de dados zero (vazio). Obrigado!!
Artistan 23/09
3
no seu bash_profile, crie um alias para esse comando e ele será útil para o desenvolvimento.
user805981
2
'Expressões curinga ou todos os índices não são permitidos'
ZurabWeb 27/04
11
Observe que isso excluirá todos os dados, incluindo suas credenciais de acesso ao x-pack.
Gajus 16/10
2
Isso também está excluindo painéis e visualizações do Kibana
nano
54

A documentação (ou o Guia definitivo ) diz que você também pode usar a próxima consulta para excluir todos os índices:

curl -XDELETE 'http://localhost:9200/*'

E há uma observação importante:

Para alguns, a capacidade de excluir todos os seus dados com um único comando é uma perspectiva muito assustadora. Se você deseja eliminar a possibilidade de exclusão em massa acidental, defina o seguinte trueem elasticsearch.yml:

action.destructive_requires_name: true

skovorodkin
fonte
30

Você precisa enviar uma DELETEsolicitação para

http://[your_host]:9200/[your_index_name_here]

Você também pode excluir um único documento:

http://[your_host]:9200/[your_index_name_here]/[your_type_here]/[your_doc_id]

Eu sugiro que você use martelo elástico .

Após a exclusão, você pode procurar se o índice ainda existe com o seguinte URL: http://[your_host]:9200/_stats/

Boa sorte!

Jesper
fonte
qual é a maneira de excluir índices com mais de 10 dias? Não consigo usar o curador porque meu servidor não é compatível.
biolinh 1/09/17
17

A exclusão do índice excluirá o mapeamento e o tipo along. você pode excluir todas as linhas pela seguinte consulta

curl -XDELETE 'localhost:9200/twitter/tweet/_query?pretty' -d'
{
   "query": { 
      "match_all": 
   }
}'

No entanto, para a consulta acima, você precisa instalar o plug-in excluir por consulta a partir do 2.0.0-beta1 do Elasticsearch, a exclusão por consulta foi removida da API principal

Install delete-by-query plugin

sudo bin/plugin install delete-by-query

Para mais

http://blog.appliedinformaticsinc.com/how-to-delete-elasticsearch-data-records-by-dsl-query/

shahid ashraf
fonte
Antes e depois de instalar o plug-in e reiniciar o ES, recebo "Nenhum manipulador encontrado para uri e método".
Matthew Leia
Isso não funciona no Elasticsearch 6+. Use _delete_by_query.
Shailesh Pratapwar 5/02/19
17
#list all index:       curl -XGET http://localhost:9200/_cat/indices?v 

insira a descrição da imagem aqui

#delete index:         curl -XDELETE 'localhost:9200/index_name'
#delete all indices:   curl -XDELETE 'localhost:9200/_all'
#delete document   :   curl -XDELETE 'localhost:9200/index_name/type_name/document_id'

Instale o kibana . O Kibana possui uma ferramenta de desenvolvimento mais inteligente, que ajuda a criar consultas facilmente.

insira a descrição da imagem aqui

ysk
fonte
11
qual é a maneira de excluir índices com mais de 10 dias? Não consigo usar o curador porque meu servidor não é compatível.
biolinh 1/09/17
9
curl -X DELETE 'https://localhost:9200/_all'

Mude httppara httpsse você estiver usando o certificado SSL em seu aplicativo

Vikash Chauhan
fonte
8

Você pode excluir um índice em python da seguinte maneira

from elasticsearch import Elasticsearch

es = Elasticsearch([{'host':'localhost', 'port':'9200'}])

es.index(index='grades',doc_type='ist_samester',id=1,body={
    "Name":"Programming Fundamentals",
    "Grade":"A"
})

es.indices.delete(index='grades')
Farid ullah
fonte
7

Para exclusão em massa por consulta, você pode usar a API especial de exclusão por consulta :

$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

No histórico, a API foi excluída e reintroduzida novamente

Quem interessante tem longa história.

  1. Na primeira versão dessa resposta, refiro-me à documentação do elasticsearch versão 1.6 . Nele, a funcionalidade foi marcada como obsoleta, mas funciona bem.
  2. Na elasticsearch versão 2.0, foi movido para o plugin separado . E mesmo as razões pelas quais se tornou o plugin explicado .
  3. E apareceu novamente na API principal na versão 5.0 !
Hubbitus
fonte
3
Cuidado ao usar excluir por consulta. Está obsoleto por um motivo importante. Erro de falta de memória!
user3658423
Certo. Mas você pode espionar se isso aconteceu com você ou se você tem memória suficiente.
Hubbitus
11
Isso não é mais obsoleto: elastic.co/guide/en/elasticsearch/reference/6.4/…
Hubbitus
5

Eu queria excluir o índice do logstash e pesquisar muito sobre diferentes ferramentas como o curl. Mas encontrou a solução no final. Entre no Kibana. Vá para a guia Dev Tools, digite o DELETE /logstash-*campo de consulta e pressione o botão de seta verde. se você for "reconhecido": true em resposta, significa que os dados foram limpos.

Ashish Kumar
fonte
OBRIGADO!!! Eu tentei muitas outras opções - esta é a única que funcionou para mim.
eladyanai 30/01
5

Para listar os índices curl -L localhost:9200/_cat/indices

9200 porta padrão [altere a porta se estiver usando outra porta]

Você provavelmente encontrará todos os índices começando com logstash-yyyy-mm-dd formato (logstash- *)

Você pode ver todos os índices e usar

Para excluir os índices e gatilhos de dados, siga o comando.

curl -XDELETE localhost:9200/index_name (O que removerá os dados e os índices).

rajdeepbs29
fonte
4

Há muitas boas respostas aqui, mas há também algo que eu gostaria de adicionar:

  • Se você estiver executando no serviço AWS ElasticSearch , não poderá excluir / excluir índices . Em vez de excluir índices, você deve reindexá-los .
Facundo La Rocca
fonte
Acabei de excluir um índice no AWS ElasticSearch, meu domínio está executando o ES 5.1.
gazarsgo
2
No AWS ES, você não pode abrir / fechar índices - isso requer reindexação. Você pode, no entanto, excluir índices. Eu só fiz isso através do console Kibana, mas definitivamente funciona.
precisa saber é o seguinte
4

Você pode excluir o índice inteiro, o tipo de documento ou os dados de identificação perticular. estas são as três maneiras:

  1. curl -XDELETE localhost: 9200 / index_name

  2. curl -XDELETE localhost: 9200 / index_name / doc-type

  3. curl -XDELETE localhost: 9200 / index_name / doc-type / documentId

e se você deseja excluir todo o índice, vá para o curinga.

Gaurav
fonte
Oi, espero que, antes de executar as consultas, você tenha iniciado sua pesquisa elástica e verifique se, por padrão, está vinculado a todos os endereços locais. e, em vez de localhost, você também pode usar seu endereço IP. como 10.80.15.45:9200 E depois de verificar sua configuração de ES, penso em verificar network.bind_host e verifique se ela não está definida ou está definida como 0.0.0.0 ou :: 0 ou no endereço IP correto para sua rede.
Gaurav # 03
3

Você também pode excluir o índice usando a ação DELETE em 'elasticsearch head' ( plug-in do Chrome ). Adicione-o ao seu chrome e conecte-o ao seu host. Lá você encontrará todos os seus índices e, se clicar no botão de ações abaixo do índice que deseja excluir, encontrará uma opção DELETE no menu suspenso. clique nele e digite DELETE no pop-up. Seu índice será excluído. A extensão 'Elasticsearch head' é uma maneira fácil de visualizar e gerenciar seus índices e dados.

prateek kumar
fonte
2

Você pode usar a extensão chrome elasticsearch-head para excluir o índice

ssh
fonte
2

Você pode excluir o índice pelo Kibana Console:

Ícone do console

Para obter todo o índice:

GET /_cat/indices?v

Para excluir um índice específico:

DELETE /INDEX_NAME_TO_DELETE
FChiri
fonte
1

Você pode excluir um ou mais índices, o que realmente exclui seus arquivos do disco . Por exemplo:

curl -XDELETE localhost:9200/$INDEXNAME

Onde $INDEXNAMEpode haver um nome de índice (por exemplo users_v2), N índices separados por vírgula (por exemplo users_v2,users_v3). Um padrão de índice (por exemplo users_*) ou _alltambém funciona, a menos que esteja bloqueado na configuração via action.destructive_requires_name: true.

É possível excluir documentos individuais, mas isso não será eliminado imediatamente . Uma exclusão é apenas uma exclusão virtual e os documentos são realmente removidos durante a mesclagem de segmentos . Você encontrará muitos detalhes sobre segmentos e mesclagens nesta apresentação . É sobre o Solr, mas as mesclagens são do Lucene, então você tem as mesmas opções no Elasticsearch.

De volta à API, é possível excluir documentos individuais por ID (forneça um valor de roteamento se você indexar com roteamento):

curl -XDELETE localhost:9200/users_v2/_doc/user1

Ou por consulta:

curl -XPOST -H 'Content-Type: application/json' localhost:9200/users_v2/_delete_by_query -d '{
  "query": {
    "match": {
      "description_field": "bad user"
    }
  }
}'
Radu Gheorghe
fonte
0

Digamos que eu precise excluir um índice filebeat-7.6.2-2020.04.30-000001e o executei usando uma opção curl DELETE ( curl -X DELETE "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty") e resulte em um problema de autenticação, conforme abaixo;

{
  "error" : {
    "type" : "security_exception",
    "reason" : "missing authentication credentials for REST request [/filebeat-7.6.2-2020.04.30-000001?pretty]"
  },
  "status" : 401
}

Aqui, você deve autenticar a solicitação de ondulação usando o nome de usuário e a senha que você forneceu para o Elasticsearch. Tente então

curl -X DELETE -u myelasticuser:myelasticpassword "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty"

resultará em {"reconhecido": verdadeiro} .

kisHoR
fonte