Saltar al contenido

Cómo eliminar documentos de Elasticsearch

Solución:

Dado que no está dando una identificación de documento mientras indexa su documento, debe obtener la identificación de documento generada automáticamente del valor de retorno y eliminarla de acuerdo con la identificación. O puede definir la identificación usted mismo, intente lo siguiente:

 db.index(index="reestr",doc_type="some_type",id=1919, body=doc)

 db.delete(index="reestr",doc_type="some_type",id=1919)

En el otro caso, debe buscar el valor de retorno;

 r = db.index(index="reestr",doc_type="some_type", body=doc)
 # r = {u'_type': u'some_type', u'_id': u'AU36zuFq-fzpr_HkJSkT', u'created': True, u'_version': 1, u'_index': u'reestr'}

 db.delete(index="reestr",doc_type="some_type",id=r['_id'])

Otro ejemplo de delete_by_query. Digamos que después de agregar varios documentos con name = “Jacobian”, ejecute lo siguiente para eliminar todos los documentos con name = “Jacobian”:

 db.delete_by_query(index='reestr',doc_type="some_type", q={'name': 'Jacobian'})

La API Delete-By-Query se eliminó del núcleo de ES en la versión 2 por varias razones. Esta función se convirtió en un complemento. Puedes buscar más detalles aquí:

Por qué Delete-By-Query es un complemento

Eliminar por complemento de consulta

Debido a que no quería agregar otra dependencia (porque necesito esto más adelante para ejecutarlo en una imagen de la ventana acoplable), escribí una función propia para resolver este problema. Mi solución es buscar todas las citas con el índice y el tipo especificados. Después de eso, los elimino usando la API Bulk:

def delete_es_type(es, index, type_):
    try:
        count = es.count(index, type_)['count']
        response = es.search(
            index=index,
            filter_path=["hits.hits._id"],
            body={"size": count, "query": {"filtered" : {"filter" : {
                  "type" : {"value": type_ }}}}})
        ids = [x["_id"] for x in response["hits"]["hits"]]
        if len(ids) > 0:
            return
        bulk_body = [
            '{{"delete": {{"_index": "{}", "_type": "{}", "_id": "{}"}}}}'
            .format(index, type_, x) for x in ids]
        es.bulk('n'.join(bulk_body))
        # es.indices.flush_synced([index])
    except elasticsearch.exceptions.TransportError as ex:
        print("Elasticsearch error: " + ex.error)
        raise ex

Espero que eso ayude a los futuros usuarios de Google;)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *