2014-07-19 11 views
12

Alcuni dei record sono duplicati nel mio indice identificato da un campo numerico recordid.Elasticsearch elimina i duplicati

C'è un comando delete-by-query in elasticsearch, Posso usarlo per cancellare uno qualsiasi dei record duplicati?

O un altro modo per raggiungere questo obiettivo?

risposta

0

La prima sfida qui sarebbe quello di identificare i documenti duplicati. Per questo è necessario eseguire un'aggregazione dei termini nei campi che definisce l'unicità del documento. Al secondo livello di aggregazione usa top_hits per ottenere anche l'ID del documento. Una volta che sei lì, riceverai l'ID dei documenti con duplicati.

Ora è possibile rimuoverli in modo sicuro, potrebbe utilizzare l'API di massa.

È possibile leggere altri approcci per rilevare e rimuovere documenti duplicati here.

1

Sì, è possibile trovare il documento duplicato con una query di aggregazione:

curl -XPOST http://localhost:9200/your_index/_search -d ' 
{ 
    "size": 0, 
    "aggs": { 
    "duplicateCount": { 
     "terms": { 
     "field": "recordid", 
     "min_doc_count": 2, 
     "size": 10 
     }, 
     "aggs": { 
     "duplicateDocuments": { 
      "top_hits": { 
      "size": 10 
      } 
     } 
     } 
    } 
    } 
}' 

quindi eliminare documenti duplicati, preferibilmente utilizzando una query di massa. Dai un'occhiata a es-deduplicator per la rimozione automatica dei duplicati (dichiarazione di non responsabilità: sono autore di quello script).

NOTA: le query aggregate potrebbero essere molto costose e potrebbero causare arresti anomali dei nodi (nel caso in cui l'indice sia troppo grande e il numero di nodi di dati troppo piccolo).

+0

Errore di memoria, è possibile aggiungere un intervallo di date per ottenere duplicati da un determinato intervallo di date? –

+0

@JeevaN Sì, possiamo provarlo, anche se non sono sicuro che sarà d'aiuto con indici molto grandi. Sentiti libero di inviare un PR. Qual è la tua configurazione (dimensione dell'indice, numero di nodi idonei alla master e numero di nodi dati)? Hai diviso gli indici, ad es. di giorno? – Tombart

Problemi correlati