Rimozione dei dati da ElasticSearch


363

Sono nuovo di ElasticSearch . Sto cercando di capire come rimuovere i dati da ElasticSearch. Ho cancellato i miei indici. Tuttavia, ciò non sembra effettivamente rimuovere i dati stessi. Le altre cose che ho visto indicano la funzione Elimina per query . Tuttavia, non sono nemmeno sicuro su cosa interrogare. Conosco i miei indici. In sostanza, mi piacerebbe capire come fare un

DELETE FROM [Index]

Da PostMan in Chrome. Tuttavia, non ho fortuna. Sembra che non importa quello che faccio, i dati rimangono in sospeso. Finora, ho eliminato con successo gli indici usando il DELETE HTTP Verb in PostMan e usando un URL come:

   http://localhost:9200/[indexName]

Tuttavia, ciò non sembra effettivamente rimuovere i dati (aka documenti) stessi.


Lo controllo con Postman e sono stato reposne come "{" riconosciuto ": vero}" Se vedi questa risposta riconosciuta non preoccuparti. L'indice viene rimosso dall'elastico.
Bijayk,

Risposte:


428

Puoi eliminare usando cURLo usando visivamente uno dei tanti strumenti che gli appassionati di open source hanno creato per Elasticsearch.

Utilizzando cURL

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

per esempio

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

Riceverai quindi una risposta sull'esito positivo o meno. Puoi eliminare un intero indice o tipi anche con un indice, puoi eliminare un tipo tralasciando l'ID del documento in questo modo -

curl -XDELETE localhost:9200/shop/product

Se desideri eliminare un indice -

curl -XDELETE localhost:9200/shop

Se si desidera eliminare più di un indice che segue una determinata convenzione di denominazione (notare il *carattere jolly), -

curl -XDELETE localhost:9200/.mar* 

visivamente

Esistono vari strumenti come menzionato sopra, non li elencherò qui ma ti collegherò a uno che ti permetterà di iniziare subito, che si trova qui . Questo strumento si chiama KOPF, per connettersi al proprio host, fare clic sul logo nell'angolo in alto a sinistra e inserire l'URL del cluster.

Una volta connesso, sarai in grado di amministrare l'intero cluster, eliminare, ottimizzare e ottimizzare il cluster.


esiste un modo per eliminare 3 documenti di cui ID conosco.
HIRA THAKUR,

@JayeshJain secondo le mie attuali conoscenze, no. È possibile inserire 3 comandi curl -XDELETE modificati in uno script bash ed eseguire o eseguire 3 uno dopo l'altro.
Opster elasticsearch - Nathan

@JayeshJain so curl -XDELETE localhost: 9200 / index / type / docid1 // curl -XDELETE localhost: 9200 / index / type / docid2 // curl -XDELETE localhost: 9200 / index / type / docid3
Elasticsearch - Nathan

l'ho fatto allo stesso modo. Ma stavo solo pensando se esiste un modo più intelligente di eliminare più documenti. Potrei usare il termine se conoscessi il campo. Ma in questo scenario, ho solo bisogno di eliminare i documenti dal loro ID.
Grazie

2
Come posso eliminare un indice con un carattere non valido, ad esempio logstash-eu -% {customer} -2016.11.22. Voglio eliminare TUTTI gli indici logstash-eu -% {customer} - * o logstash-eu -% *
Chris F

459

Se hai mai bisogno di eliminare tutti gli indici, questo può tornare utile:

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

PowerShell:

Invoke-WebRequest -method DELETE http://localhost:9200/_all

20
questo è molto utile per lo sviluppo e necessita di ripristinare il database (vuoto). Grazie!!
Artistan,

3
nel tuo bash_profile crea un alias per questo comando e sarà utile per lo sviluppo.
user805981

2
"Non sono consentite espressioni jolly o tutti gli indici"
ZurabWeb,

1
Tieni presente che ciò eliminerà tutti i dati, comprese le credenziali di accesso al tuo x-pack.
Gajus,

2
Questo sta anche cancellando dashboard e visualizzazioni di Kibana
nano,

54

La documentazione (o la Guida definitiva ) afferma che è possibile utilizzare anche la query successiva per eliminare tutti gli indici:

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

E c'è una nota importante:

Per alcuni, la possibilità di eliminare tutti i tuoi dati con un singolo comando è una prospettiva molto spaventosa. Se si vuole eliminare la possibilità di un accidentale mass-eliminazione, è possibile impostare la seguente a truenella vostra elasticsearch.yml:

action.destructive_requires_name: true


30

Devi inviare una DELETErichiesta a

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

Puoi anche eliminare un singolo documento:

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

Ti consiglio di usare il martello elastico .

Dopo aver eliminato puoi cercare se l'indice esiste ancora con il seguente URL: http://[your_host]:9200/_stats/

In bocca al lupo!


qual è il modo per eliminare gli indici più vecchi di 10 giorni? Non posso usare il curatore perché il mio server non è supportato.
biolinh,

17

L'eliminazione dell'indice eliminerà la mappatura e il tipo lungo. puoi eliminare tutte le righe con la seguente query

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

Tuttavia, per le query precedenti è necessario installare il plug-in di eliminazione per query a partire dalla 2.0.0-beta1 eliminazione per query di Elasticsearch è stata rimossa dall'API principale

Install delete-by-query plugin

sudo bin/plugin install delete-by-query

Per più

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


Sia prima che dopo l'installazione del plug-in e il riavvio di ES, ottengo "Nessun gestore trovato per uri e metodo".
Matteo Leggi il

Questo non funziona in Elasticsearch 6+. Utilizzare invece _delete_by_query.
Shailesh Pratapwar,

17
#list all index:       curl -XGET http://localhost:9200/_cat/indices?v 

inserisci qui la descrizione dell'immagine

#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'

Installa Kibana . Kibana ha uno strumento di sviluppo più intelligente che aiuta a creare query facilmente.

inserisci qui la descrizione dell'immagine


1
qual è il modo per eliminare gli indici più vecchi di 10 giorni? Non posso usare il curatore perché il mio server non è supportato.
biolinh,

9
curl -X DELETE 'https://localhost:9200/_all'

Passare httpa httpsse si utilizza il certificato SSL nella propria applicazione


8

È possibile eliminare un indice in Python come segue

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')


7

Per l'eliminazione di massa tramite query è possibile utilizzare l'API di eliminazione speciale per query :

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

Nella storia quell'API è stata eliminata e quindi reintrodotta di nuovo

Chi è interessante ha una lunga storia.

  1. Nella prima versione di quella risposta mi riferisco alla documentazione di elasticsearch versione 1.6 . In esso tale funzionalità è stata contrassegnata come obsoleta ma funziona bene.
  2. Nella versione 2.0 di elasticsearch è stato spostato in un plug-in separato . E anche i motivi per cui è diventato plugin spiegato .
  3. Ed è apparso di nuovo nell'API principale nella versione 5.0 !

3
Fai attenzione usando Elimina per query. È deprecato per un motivo importante. OutOfMemoryError!
user3658423

Sicuro. Ma potresti spiare se è successo per te o hai un altro ricordo.
Hubbitus,


5

Volevo eliminare l'indice del logstash e ho cercato molto riguardo a diversi strumenti come il ricciolo. Ma ho trovato la soluzione alla fine. Accedi a Kibana. Vai alla scheda Strumenti di sviluppo e digita il DELETE /logstash-*campo della query e premi il pulsante freccia verde. se ricevi "riconosciuto": true in risposta significa che i dati sono stati cancellati.


GRAZIE!!! ho provato molte altre opzioni, questa è l'unica che ha funzionato per me.
eladyanai,

5

Per elencare gli indici curl -L localhost:9200/_cat/indices

9200 porta predefinita [cambia la porta se usi un'altra porta]

Probabilmente troverai tutti gli indici che iniziano con logstash-yyyy-mm-dd formato (logstash- *)

Puoi vedere tutti gli indici e usare

Per cancellare gli indici e i dati attivano il comando seguente.

curl -XDELETE localhost:9200/index_name (Che rimuoverà entrambi i dati e gli indici).


4

Ci sono molte buone risposte qui, ma c'è anche qualcosa che vorrei aggiungere:

  • Se stai eseguendo il servizio AWS ElasticSearch , non puoi eliminare / eliminare gli indici . Invece di eliminare gli indici, è necessario reindicizzarli .

Ho appena eliminato un indice su AWS ElasticSearch, il mio dominio esegue ES 5.1.
Gazarsgo,

2
Su AWS ES non puoi aprire / chiudere gli indici, il che richiede la reindicizzazione. È possibile, tuttavia, eliminare gli indici. L'ho fatto solo attraverso la console di Kibana, ma sicuramente funziona.
Tom Dufall,

4

È possibile eliminare l'intero indice, il tipo di documento o un dato ID perticolare. questi sono i tre modi:

  1. curl -XDELETE localhost: 9200 / nome_indice

  2. curl -XDELETE localhost: 9200 / nome_indice / tipo-doc

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

e se si desidera eliminare tutto l'indice, selezionare il carattere jolly.


Ciao, spero prima di eseguire le query hai iniziato la tua ricerca elastica e assicurati che, per impostazione predefinita, si leghi a tutti gli indirizzi locali. e invece di localhost puoi anche usare il tuo indirizzo IP. come 10.80.15.45:9200 E una volta verificata l'impostazione ES, posso pensare di controllare network.bind_host e assicurarmi che non sia impostato o impostato su 0.0.0.0 o :: 0 o sull'indirizzo IP corretto per la tua rete.
Gaurav

3

Puoi anche eliminare l'indice usando l'azione ELIMINA in "testa elasticsearch" ( plug-in Chrome ). Aggiungilo al tuo Chrome e connettilo al tuo host. Lì troverai tutti i tuoi indici e se fai clic sul pulsante delle azioni sotto l'indice che desideri eliminare, troverai un'opzione DELETE nel menu a discesa. fai clic su di esso e inserisci ELIMINA nel popup. Il tuo indice verrà eliminato. L'estensione 'Elasticsearch head' è un modo semplice per visualizzare e gestire i tuoi indici e dati.


2

È possibile utilizzare l'estensione chrome elasticsearch-head per eliminare l'indice


2

Puoi eliminare l'indice dalla console di Kibana:

Icona console

Per ottenere tutto l'indice:

GET /_cat/indices?v

Per eliminare un indice specifico:

DELETE /INDEX_NAME_TO_DELETE

1

Puoi eliminare uno o più indici, il che elimina davvero i loro file dal disco . Per esempio:

curl -XDELETE localhost:9200/$INDEXNAME

Dove $INDEXNAMEpuò essere un nome indice (ad es. users_v2), N indici separati da virgola (ad es users_v2,users_v3.). Un modello di indice (ad esempio users_*) o _all, funziona anche, a meno che non sia bloccato nella configurazione tramite action.destructive_requires_name: true.

L'eliminazione di singoli documenti è possibile, ma ciò non li eliminerà immediatamente . Un'eliminazione è solo un'eliminazione graduale e i documenti vengono realmente rimossi durante l' unione dei segmenti . In questa presentazione troverai molti dettagli sui segmenti e sulle fusioni . Si tratta di Solr, ma le fusioni provengono da Lucene, quindi hai le stesse opzioni in Elasticsearch.

Di nuovo all'API, è possibile eliminare singoli documenti per ID (fornire un valore di routing se si indicizza con routing):

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

O per query:

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

0

Supponiamo di dover eliminare un indice filebeat-7.6.2-2020.04.30-000001e l'ho eseguito utilizzando un'opzione DELETE ( curl -X DELETE "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty") arricciata e si traduce in un problema di autenticazione come di seguito;

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

Qui è necessario autenticare la richiesta di arricciatura utilizzando il nome utente e la password forniti per Elasticsearch. Prova allora

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

si tradurrà in {"riconosciuto": vero} .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.