2013-09-25 20 views
19

voglio eliminare tutti i documenti indicizzati all'interno di un tipo di elasticsearch, utilizzando l'API HTTP/REST, ma io non voglio eliminare il mapping per questo tipoElimina documenti di tipo in elasticsearch

Come posso costruire la query nell'URL per fare questo?

risposta

16

Prima di comando di esecuzione, indice/mappatura stato; (Screenshot presi da elasticsearch plugin di testa interfaccia web)

enter image description here

enter image description here

enter image description here

Comando;

curl -XDELETE 'http://localhost:9200/publishercategoryeu/autocomplete/_query' -d ' 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match_all": {} 
     } 
     ] 
    } 
    } 
} 
' 

Risultato;

enter image description here

Dopo comando di esecuzione, stato index/mappatura;

enter image description here

enter image description here

enter image description here

Come possiamo vedere abbiamo eliminato tutti i documenti indicizzati all'interno di un tipo (mappatura) senza indice di cancellazione o il tipo (mappatura).

+0

questo non funziona – localhost

+0

'twitter' è il nome dell'indice e 'tweet' sta mappando il nome nel comando. Li hai sostituiti correttamente con il tuo caso? – csonuryilmaz

+0

sicuro. Penso che dipenda dalla versione di elasticsearch. Ho anche alcune domande dalla guida di elasticsearch e ottengo un'eccezione non parificabile. – localhost

7

Una semplice eliminazione per query con una query match_all dovrebbe fare il trucco. È possibile prendere maggiori informazioni qui:

delete by query api

In alternativa, è possibile eliminare il tipo di insieme e fare uso del modello di api. Basta rilasciare un file nella tua config/templates/cartella contenente il modello e non lo perderai mai. La mappatura andrà persa quando cancellerai il mapping, ma il modello verrà riutilizzato non appena indicizzerai di nuovo qualcosa. Ecco qualche informazione in più:

template api

EDIT: nuova API di cancellazione: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html

+2

Sembra deprecato – Tjorriemorrie

+0

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html –

-3

uso:

curl -XDELETE 'http://{server}/{index_name}/{type_name}/' 

(come in documentation)

+0

Anche se sembra funzionare, non fa parte della documentazione per delete_by_query. Tuttavia, ciò cancella anche la mappatura, quindi dovresti usare il file delete_by_query completo, con una query di tipo match-all. – rakensi

+4

Questo elimina l'intero tipo di documento e non solo i documenti. – Oliver

4

Con il seguente comando nel plugin testa elasticsearch ero in grado di eliminare tutti i documenti di tipo logs dall'indice logstash senza eliminare la mappatura:

{"query":{"match_all":{}}} 

Deleting documents with Elasticsearch head plugin

Per lo spazio libero sul disco è inoltre necessario ottimizzare l'indice (Azioni-> Ottimizza per l'indice logstash nel plug-in head) dopo aver eliminato i documenti.

0

Se si vuole fare questo in golang, utilizzando il "olviere/elastic" libreria, è possibile utilizzare questo codice, a patto di avere un client yourClient e yourIndex e yourType:

bq := elastic.NewBoolQuery() 
    bq.Must(elastic.NewMatchAllQuery()) 
    _, err := elastic.NewDeleteByQueryService(yourClient). 
     Index(yourIndex). 
     Type(yourType). 
     Query(bq). 
     Do() 
0
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query?q=user:kimchy' 

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

risposte precedenti non funzionerà con la versione più recente di Elasticsearch. "Elimina per query" è stato ritirato da Elasticsearch 2.0. La documentazione Elasticsearch indica che può causare un errore OutOfMemoryError durante l'indicizzazione simultanea e può causare l'incoerenza della replica primaria e della replica. Se si desidera seguire la cronologia del problema in Github.

Ora sono necessari più passaggi per eliminare tutti i documenti da type.

  1. Trova tutti gli ID del documento che è necessario eliminare. Il modo più efficiente per eseguire questa operazione è utilizzare lo scroll/scan API per trovare tutti gli ID corrispondenti per un determinato tipo.

  2. Immettere una richiesta di massa per eliminare i documenti tramite ID. Un esempio fornito di seguito.

    curl -XPOST 'http://localhost:9200/_bulk' -d ' 
        { "delete": { "_index": "index", "_type": "type", "_id": "1"} 
        { "delete": { "_index": "index", "_type": "type", "_id": "2"}' 
    

Si noti che se si sta fornendo un ingresso file di testo ad arricciarsi, è necessario utilizzare il flag --data-binary invece del semplice -d.

Problemi correlati