Devo rimuovere un campo in tutti i documenti indicizzati su Elasticsearch. Come posso farlo. Qualsiasi richiesta di eliminazione mi aiuterà a raggiungere questo obiettivo.Rimuovere un campo da un documento Elasticsearch
risposta
Cosa @backtrack detto è vero, ma poi c'è un modo molto conveniente di farlo in Elasticsearch. Elasticsearch estrae la complessità interna della cancellazione. È necessario utilizzare l'aggiornamento API per raggiungere questo obiettivo -
curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
"script" : "ctx._source.remove(\"name_of_field\")"
}'
È possibile trovare maggiori documentazione here.
Nota: A partire dal elasticsearch 6 si sono tenuti a includere un contenuto-tipo intestazione:
-H 'Content-Type: application/json'
Qual è la performance di questo se si dispone di un miliardo di documenti con questo campo? –
Il documento effettivo verrà rimosso e ne verrà aggiunto uno nuovo per ciascuna di tali modifiche. –
Avviso per ElasticSearch 5.0: è necessario utilizzare un parametro con nome anziché il nome con codice. I parametri sono più veloci e non interromperanno il limite di compilazione dello script. Vedi [documentazione] (https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-using.html#prefer-params). –
Per impostazione predefinita non è possibile, perché in questo momento Lucene non lo supporta. Fondamentalmente puoi solo mettere o rimuovere interi documenti Lucene dagli indici di Lucene.
- ottenere la prima versione del documento
- rimuovere il campo
- spingere questa nuova versione del tuo documento
elasticsearch aggiunto update_by_query
in 2.3. Questa interfaccia sperimentale consente di eseguire l'aggiornamento su tutti i documenti che corrispondono a una query.
Internamente elasticsearch esegue una scansione/scorrimento per raccogliere gruppi di documenti e quindi aggiornarli come l'interfaccia di aggiornamento di massa. Questo è più veloce rispetto a farlo manualmente con la propria interfaccia di scansione/scorrimento a causa di non avere il sovraccarico di rete e serializzazione. Ogni record deve essere caricato nella ram, modificato e quindi scritto.
Ieri ho rimosso un campo di grandi dimensioni dal mio cluster ES. Ho visto un throughput continuo di 10.000 record al secondo durante l'update_by_query, vincolato dalla CPU piuttosto che dall'IO.
Guardare in impostazione conflict=proceed
se il cluster ha altro traffico di aggiornamento, o tutto il lavoro si ferma quando colpisce un ConflictError
quando uno dei record viene aggiornato sotto uno dei lotti.
Analogamente modificando wait_for_completion=false
causerà l'update_by_query eseguire tramite l'interfaccia tasks. Altrimenti il lavoro terminerà se la connessione è chiusa.
url: corpo
http://localhost:9200/type/_update_by_query?wait_for_completion=false&conflict=proceed
POST:
{
"script": ctx._source.remove("name_of_field"),
"query": {
"bool": {
"must": [
{
"exists": {
"field": "name_of_field"
}
}
]
}
}
}
A partire dal elasticsearch 1,43, in linea groovy scripting is disabled by default. Dovrai abilitarlo affinché uno script in linea come questo funzioni aggiungendo script.inline: true
al tuo file di configurazione.
Oppure caricare il groovy come script e utilizzare il formato "script": { "file": "scriptname", "lang": "groovy"}
.
Quello che non so ancora, è come recuperare lo spazio field_data utilizzato da quel campo. Sperando in un riavvio a rotazione, i numeri ordinali verranno ricaricati. – spazm
Il corpo ha bisogno di una leggera modifica, ma per il resto funziona perfettamente. Ho dovuto avvolgere lo script in un oggetto JSON, probabilmente perché l'API è cambiata un po '. – Peter
- 1. Come rimuovere un campo da un documento
- 2. gruppo elasticsearch documento filtro campo
- 3. Documento casuale in ElasticSearch
- 4. È possibile eliminare un campo da un documento nell'indice Solr?
- 5. Come aggiornare un documento usando elasticsearch-py?
- 6. rimuovere un documento incorporato in mongoid
- 7. elasticsearch Aggiorna API se un campo non esiste
- 8. elasticsearch - Riportare i gettoni di un campo
- 9. Come rimuovere una chiave da un documento RethinkDB?
- 10. Aggiornare un nuovo campo nel documento esistente
- 11. aggregare un campo in elasticsearch-dsl usando python
- 12. Django: rimuovere un campo da una sottoclasse di modulo
- 13. Risultati sfaccettatura ElasticSearch senza documento
- 14. Campo enumeria Elasticsearch
- 15. Come definire i nomi di campo dell'indice ElasticSearch per un POJO utilizzando Spring Data ElasticSearch
- 16. Rimozione di un indice da un alias in Elasticsearch
- 17. Aggiungere attributi aggiuntivi a un documento esistente elasticsearch
- 18. Elimina un campo in un documento in mongodb - Rails + Mongoide
- 19. Visualizzazione di diversi tipi di documento in Kibana da ElasticSearch
- 20. Aggiornamento di un campo in tutti i record in elasticsearch
- 21. Come aggiornare un tipo di campo in elasticsearch
- 22. Ricerca elasticsearch campo contenuto in un valore di
- 23. ElasticSearch: impatto dell'impostazione di un campo "not_analyzed" come "store": "yes"?
- 24. Interroga tutti i valori univoci di un campo con Elasticsearch
- 25. Elasticsearch: rimuovere i duplicati dall'indice
- 26. Rimuovere campo pk da Django oggetti serializzati
- 27. MongoDB selezionare tutti i gruppi di campi da un campo e ordinare da un altro campo
- 28. Indicizzazione di un documento mappato non mappato/dinamicamente con un geopoint nel client NEST elasticsearch
- 29. AWK/BASH: come abbinare un campo in un file da un campo in un altro?
- 30. Elasticsearch fallisce in modo silenzioso se il documento ha una mancata corrispondenza di mappatura per un campo
Per impostazione predefinita non è possibile, perché in questo momento Lucene non supporta . Fondamentalmente è possibile solo inserire o rimuovere interi documenti Lucene dagli indici di Lucene .1 Ottieni la prima versione del tuo documento 2 rimuovi il campo 3 invia questa nuova versione del tuo documento. – Backtrack