Eliminar datos de ElasticSearch

363

Soy nuevo en ElasticSearch . Estoy tratando de descubrir cómo eliminar datos de ElasticSearch. He eliminado mis índices. Sin embargo, eso no parece eliminar realmente los datos en sí. Las otras cosas que he visto apuntan a la función Eliminar por consulta . Sin embargo, ni siquiera estoy seguro de qué consultar. Conozco mis índices Esencialmente, me gustaría descubrir cómo hacer un

DELETE FROM [Index]

Desde PostMan en Chrome. Sin embargo, no estoy teniendo suerte. Parece que no importa lo que haga, los datos se quedan. Hasta ahora, he eliminado con éxito los índices mediante el uso de DELETE HTTP Verb en PostMan y utilizando una URL como:

   http://localhost:9200/[indexName]

Sin embargo, eso no parece eliminar realmente los datos (también conocidos como documentos).

usuario687554
fuente
Compruebo esto con el cartero y me vuelvo a colocar como "{" reconocido ": verdadero}" Si ve esta respuesta reconocida no se preocupe. El índice se elimina del elástico.
bijayk

Respuestas:

428

Puede eliminar usando cURLo visualmente usando una de las muchas herramientas que los entusiastas del código abierto han creado para Elasticsearch.

Usando cURL

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

p.ej

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

Luego recibirá una respuesta sobre si esto fue exitoso o no. Puede eliminar un índice completo o tipos con un índice también, puede eliminar un tipo omitiendo la ID del documento de esta manera:

curl -XDELETE localhost:9200/shop/product

Si desea eliminar un índice,

curl -XDELETE localhost:9200/shop

Si desea eliminar más de un índice que sigue una determinada convención de nomenclatura (tenga en cuenta el *comodín), -

curl -XDELETE localhost:9200/.mar* 

Visualmente

Hay varias herramientas como se mencionó anteriormente, no las enumeraré aquí, pero lo vincularé a una que le permite comenzar de inmediato, que se encuentra aquí . Esta herramienta se llama KOPF, para conectarse a su host, haga clic en el logotipo en la esquina superior izquierda e ingrese la URL de su clúster.

Una vez conectado, podrá administrar todo su clúster, eliminar, optimizar y ajustar su clúster.

Opster Elasticsearch - Nathan
fuente
¿Hay alguna forma de eliminar 3 documentos de los cuales conozco?
HIRA THAKUR
@JayeshJain a mi conocimiento actual, no. Podría poner 3 comandos curl -XDELETE modificados en un script bash y ejecutar o ejecutar 3 uno tras otro.
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
Opster Elasticsearch - Nathan
Lo hice de la misma manera. Pero solo estaba pensando si hay una forma más inteligente de eliminar varios documentos. Podría usar el término si supiera el campo. Pero en este escenario, solo necesito eliminar documentos por su id. Gracias de todos modos
HIRA THAKUR
2
¿Cómo puedo eliminar un índice con un carácter no válido, por ejemplo, logstash-eu -% {customer} -2016.11.22. Quiero eliminar TODOS los índices logstash-eu -% {customer} - * o logstash-eu -% *
Chris F
459

Si alguna vez necesita eliminar todos los índices, esto puede ser útil:

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

Potencia Shell:

Invoke-WebRequest -method DELETE http://localhost:9200/_all
kha
fuente
20
Esto es muy útil para el desarrollo y necesita restablecer la base de datos desde cero (vacía). ¡¡Gracias!!
Artistan
3
en su bash_profile cree un alias para este comando y será útil para el desarrollo.
user805981
2
'No se permiten expresiones comodín o todos los índices'
ZurabWeb
1
Tenga en cuenta que esto eliminará todos los datos, incluidas sus credenciales de acceso a x-pack.
Gajus
2
Esto también está eliminando paneles y visualizaciones de Kibana
nano
54

La documentación (o la Guía definitiva ) dice que también puede usar la siguiente consulta para eliminar todos los índices:

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

Y hay una nota importante:

Para algunos, la posibilidad de eliminar todos sus datos con un solo comando es una perspectiva muy aterradora. Si desea eliminar la posibilidad de una eliminación masiva accidental, puede configurar lo siguiente trueen su elasticsearch.yml:

action.destructive_requires_name: true

skovorodkin
fuente
30

Tienes que enviar una DELETEsolicitud a

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

También puede eliminar un solo documento:

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

Te sugiero que uses el martillo elástico .

Después de eliminar, puede buscar si el índice todavía existe con la siguiente URL: http://[your_host]:9200/_stats/

¡Buena suerte!

Jesper
fuente
¿Cuál es la forma de eliminar índices de más de 10 días? No puedo usar el curador porque mi servidor no es compatible.
biolinh
17

Al eliminar el índice, se eliminará la asignación y se escribirá. puede eliminar todas las filas con la siguiente consulta

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

Sin embargo, para la consulta anterior, debe instalar el complemento de eliminación por consulta a partir de que la eliminación de 2.0.0-beta1 de Elasticsearch se eliminó de la API principal

Install delete-by-query plugin

sudo bin/plugin install delete-by-query

Para más

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

shahid ashraf
fuente
Tanto antes como después de instalar el complemento y reiniciar ES, aparece "No se encontró ningún controlador para uri y método".
Mateo leyó el
Esto no funciona en Elasticsearch 6+. Utilice _delete_by_query en su lugar.
Shailesh Pratapwar
17
#list all index:       curl -XGET http://localhost:9200/_cat/indices?v 

ingrese la descripción de la imagen aquí

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

Instala kibana . Kibana tiene una herramienta de desarrollo más inteligente que ayuda a crear consultas fácilmente.

ingrese la descripción de la imagen aquí

ysk
fuente
1
¿Cuál es la forma de eliminar índices de más de 10 días? No puedo usar el curador porque mi servidor no es compatible.
biolinh
9
curl -X DELETE 'https://localhost:9200/_all'

Cambie httpa httpssi está utilizando un certificado SSL en su aplicación

Vikash Chauhan
fuente
8

Puede eliminar un índice en Python de la siguiente manera

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')
Farid ullah
fuente
7

Para la eliminación masiva por consulta, puede utilizar la API especial Eliminar por consulta :

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

En la historia, esa API fue eliminada y luego reintroducida nuevamente

Quien interesante tiene una larga historia.

  1. En la primera versión de esa respuesta, me refiero a la documentación de elasticsearch versión 1.6 . En él, esa funcionalidad se marcó como obsoleta pero funciona bien.
  2. En elasticsearch versión 2.0 se movió a un complemento separado . Y razones aún por qué se convirtió en el plugin explicaron .
  3. ¡Y apareció nuevamente en la API principal en la versión 5.0 !
Hubbitus
fuente
3
Tenga cuidado al usar eliminar por consulta. Está en desuso por una razón importante. ¡Error de memoria insuficiente!
user3658423
Por supuesto. Pero puede espiar si le sucedió o si tiene suficiente memoria.
Hubbitus
1
Esto no desaprobado más: elastic.co/guide/en/elasticsearch/reference/6.4/...
Hubbitus
5

Quería eliminar el índice logstash y busqué mucho sobre diferentes herramientas como curl. Pero encontré la solución al final. Inicia sesión en Kibana. Vaya a la pestaña Herramientas de desarrollo y escriba el DELETE /logstash-*campo de consulta y presione el botón de flecha verde. si obtiene "reconocimiento": verdadero en respuesta que significa que los datos se han borrado.

Ashish Kumar
fuente
¡¡¡GRACIAS!!! Probé muchas otras opciones, esta es la única que funcionó para mí.
eladyanai
5

Para enumerar los índices curl -L localhost:9200/_cat/indices

9200 puerto predeterminado [cambie el puerto si usa algún otro puerto]

Probablemente encontrará todos los índices que comienzan con el logstash-yyyy-mm-ddformato (logstash- *)

Puedes ver todos los índices y usar

Para eliminar los índices y los datos se activa el siguiente comando.

curl -XDELETE localhost:9200/index_name (Lo que eliminará los datos e índices de ambos).

rajdeepbs29
fuente
4

Aquí hay muchas buenas respuestas, pero también hay algo que me gustaría agregar:

  • Si está ejecutando el servicio AWS ElasticSearch , no puede eliminar / eliminar índices . En lugar de eliminar índices, debe reindexarlos .
Facundo La Rocca
fuente
Acabo de eliminar un índice en AWS ElasticSearch, mi dominio ejecuta ES 5.1.
gazarsgo
2
En AWS ES no puede abrir / cerrar índices, eso requiere reindexar. Sin embargo, puede eliminar índices. Solo lo hice a través de la consola Kibana, pero definitivamente funciona.
Tom Dufall
4

Puede eliminar el índice completo, el tipo de documento o un dato de identificación perticular. Estas son las tres formas:

  1. curl -XDELETE localhost: 9200 / index_name

  2. curl -XDELETE localhost: 9200 / index_name / doc-type

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

y si desea eliminar todo el índice, busque el comodín.

Gaurav
fuente
Hola, espero que antes de ejecutar consultas inicie su búsqueda elástica y asegúrese de que, de forma predeterminada, se vincule a todas las direcciones locales. y en lugar de localhost también puede usar su dirección IP. como 10.80.15.45:9200 Y una vez que verifique su configuración de ES, puedo pensar en verificar en network.bind_host y asegurarme de que no esté configurado o esté configurado en 0.0.0.0 o :: 0 o en la dirección IP correcta para su red.
Gaurav
3

También puede eliminar el índice usando la acción DELETE en 'elasticsearch head' ( complemento de Chrome ). Agréguelo a su Chrome y conéctelo a su host. Allí encontrará todos sus índices y si hace clic en el botón de acciones debajo del índice que desea eliminar, encontrará una opción ELIMINAR en el menú desplegable. haga clic en él e ingrese DELETE en la ventana emergente. Su índice será eliminado. La extensión 'Elasticsearch head' es una manera fácil de ver y administrar sus índices y datos.

prateek kumar
fuente
2

Puede usar la extensión de Chrome elasticsearch-head para eliminar el índice

ssh
fuente
2

Puede eliminar el índice mediante la consola Kibana:

Icono de la consola

Para obtener todo el índice:

GET /_cat/indices?v

Para eliminar un índice específico:

DELETE /INDEX_NAME_TO_DELETE
FChiri
fuente
1

Puede eliminar uno o más índices, lo que realmente elimina sus archivos del disco . Por ejemplo:

curl -XDELETE localhost:9200/$INDEXNAME

Donde $INDEXNAMEpuede haber un nombre de índice (p users_v2. Ej. ), N índices separados por comas (p users_v2,users_v3. Ej .). Un patrón de índice (por ejemplo users_*) o _all, también funciona, a menos que esté bloqueado en la configuración a través de action.destructive_requires_name: true.

Es posible eliminar documentos individuales, pero esto no los eliminará de inmediato . Una eliminación es solo una eliminación suave, y los documentos se eliminan realmente durante las fusiones de segmentos . Encontrará muchos detalles sobre segmentos y fusiones en esta presentación . Se trata de Solr, pero las fusiones son de Lucene, por lo que tiene las mismas opciones en Elasticsearch.

De vuelta a la API, puede eliminar documentos individuales por ID (proporcione un valor de enrutamiento si indexa con enrutamiento):

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

O por consulta:

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

Digamos que necesito eliminar un índice filebeat-7.6.2-2020.04.30-000001y lo realicé usando una opción curl DELETE ( curl -X DELETE "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty") y da como resultado un problema de autenticación como se muestra a continuación;

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

Aquí debe autenticar la solicitud curl utilizando el nombre de usuario y la contraseña que ha proporcionado para Elasticsearch. Intenta entonces

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

resultará en {"reconocido": verdadero} .

kisHoR
fuente