2015-06-16 20 views
12

Python'da Elasticsearch'dan belge silme konusunda hiçbir örnek bulamıyorum. Şimdiye kadar gördüklerim - delete ve delete_by_query fonksiyonlarının tanımıdır. Ancak bazı nedenlerden dolayı documentation, bu işlevleri kullanmanın mikroskobik bir örneğini bile sağlamaz. Tek bir parametre listesi, bunları fonksiyon çağrısına doğru olarak nasıl besleyeceğimi bilmezsem çok fazla şey söylemez.Elasticsearch'ten belgeler nasıl silinir

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

dünyada kime Ben şimdi delete ve delete_by_query kullanarak bu belgeyi silebilirsiniz bilir: Yani, sadece bir yeni doktor şöyle ekledikten, diyelim?

cevap

18

Belgenizi dizine eklerken bir belge kimliği vermediğinizden, otomatik olarak oluşturulan belge kimliğini dönüş değerinden almanız ve kimliğe göre silmeniz gerekir. Yoksa kimliği kendiniz aşağıdakileri deneyin tanımlayabilirsiniz: Başka bir durumda

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

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

, sen dönüş değeri içine bakmak gerekir;

Delete_by_query için başka bir örnek.

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

Eğer, biraz daha ayrıntılı misiniz;

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 

O gelecek Google'cılara yardımcı olur umarım: ben Toplu API kullanarak bunları kaldırdıktan sonra? Özellikle, 'id' (id = 1919 örneğinizde) önceden bilmediğimde durumla ilgileniyorum. Bunu soruyorum çünkü toplu silme işlemi yapmam gerekiyor. – Jacobian

+0

Ve istediğim gibi, "delete_by_query" nin bir örneği de benim ve diğer yeni başlayanlar tarafından çok beğenilecek. – Jacobian

+1

doc_type = "some_type" ve doc.name = "John" değerinin +100500 itibara değdiği tüm dokümanların nasıl silineceğine ilişkin iki küçük örnek. – Jacobian

7

Sil-By-Sorgu API 2. sürümünde ES çekirdek çıkarıldı: adı ile birkaç belgeleri ekledikten sonra = 'Jakobien', name = 'Jacobi' ile tüm belgeleri silmek için aşağıdaki yayınlandığını varsayalım birkaç nedenden dolayı. Bu işlev bir eklenti oldu. Burada daha fazla ayrıntı için bakabilirsiniz: I (ben liman işçisi görüntüde çalıştırmak için bu sonradan gerektiğinden) Başka bir bağımlılık eklemek istemediğimizden

Why Delete-By-Query is a plugin

Delete By Query Plugin

Bir kendi fonksiyon yazdım Bu problemi çözme Benim çözümüm belirtilen indeks ve tiple tüm teklifleri aramaktır.)

+0

Sorguya göre silme işlemi yeniden başlatıldı ve eklentinin artık öldüğü anlaşılıyor. https://www.elastic.co/guide/en/elasticsearch/reference/5.6/docs-delete-by-query.html –