2013-04-22 12 views
10

Sto cercando di individuare un approccio per eliminare tutte le voci per una proprietà specifica in un indice elasticsearch e rimuovere tutti i mapping di tipi per quella proprietà.Elasticsearch Elimina proprietà mappatura

Sono stato a guardare i seguenti due pagine doc: put mapping e delete mapping

Da secondo link:.

"permette di cancellare una mappatura (tipo), insieme con i suoi dati il ​​resto endpoint è/{indice}/{tipo} con il metodo DELETE. "

Quello che penso di cui ho bisogno è un /{index}/{type}/{property}?

Devo ricreare l'intero indice per ottenere questo risultato, ovvero spostare e manipolare i dati tra i tipi?

per esempio, chiamando GET sulla mappatura:

curl -XGET 'http://.../some_index/some_type/_mapping' 

risultato:

{ 
    "some_type": { 
    "properties": { 
     "propVal1": { 
     "type": "double", 
     "index": "analyzed" 
     }, 
     "propVal2": { 
     "type": "string", 
     "analyzer": "keyword" 
     }, 
     "propVal3": { 
     "type": "string", 
     "analyzer": "keyword" 
     } 
    } 
    } 
} 

dopo questa operazione cancellare il propVal3 sarebbero tornati:

curl -XGET 'http://.../some_index/some_type/_mapping' 

risultato:

{ 
    "some_type": { 
    "properties": { 
     "propVal1": { 
     "type": "double", 
     "index": "analyzed" 
     }, 
     "propVal2": { 
     "type": "string", 
     "analyzer": "keyword" 
     } 
    } 
    } 
} 

e tutti i dati per propVal3 verranno rimossi dall'indice.

risposta

15

Non puoi farlo. Basta dimenticare che questo valore esiste ... ;-) Se hai davvero bisogno di rimuoverlo, dovrai reindicizzare i tuoi documenti.

+0

Grazie per la risposta. Sento che ho bisogno di farlo. Qual è la migliore strategia per farlo tramite "reindexing"? Mi rendo conto che questo sarà un incubo per le prestazioni ... ma quale strategia prenderesti qui? Si sta spostando su un altro tipo (rimuovendo la proprietà in corso) e si torna di nuovo un'opzione? –

+0

Creato un seguito a questa domanda: http://stackoverflow.com/questions/16159902/elasticsearch-reindex-or-flag-deleted-type-property –

+0

Perché la documentazione dice che è possibile?O l'ho frainteso? – brupm

3

Attualmente non è possibile rimuovere una proprietà da una mappatura. Per rimuovere tutti i valori di una proprietà da tutti i record, è necessario reindicizzare tutti i record con questa proprietà rimossa.

+0

Come fare lo fai? –

+1

@TheRedPea che utilizza [API reindex] (https://www.elastic.co/guide/en/elasticsearch/reference/2.3/docs-reindex.html) ad esempio o uno dei numerosi script di reindicizzazione disponibili per elasticsearch. – imotov

2

È possibile utilizzare la nuova API _reindex per questo, è anche possibile aggiungere un nuovo _mapping all'indice di destinazione prima di eseguire la reindice in modo da poter modificare le proprietà dei campi nel proprio indice.

di fare un reindex e la rimozione di una proprietà, si può fare questo:

POST /_reindex 
{ 
    "source": { 
    "index": "twitter" 
    }, 
    "dest": { 
    "index": "new_twitter", 
    }, 
    "script": { 
    "inline": "ctx._source.remove('whatever')" 
    } 
} 

se si desidera utilizzare questo in combinazione con il _aliases API è possibile modificare gli indici senza avere alcuna 'downtime'

Problemi correlati