Elastik Arama'dan Veri Kaldırma


363

Ben yeniyim ElasticSearch . Elastik Arama'dan veri nasıl kaldırılacağını anlamaya çalışıyorum. Dizinlerimi sildim. Ancak, bu aslında verilerin kendisini kaldırmıyor gibi görünüyor. Gördüğüm diğer şeyler Sorguya Göre Sil özelliğine işaret ediyor. Ancak, ne sorgulamak bile emin değilim. Endekslerimi biliyorum. Aslında, nasıl yapılacağını öğrenmek istiyorum

DELETE FROM [Index]

Chrome'daki PostMan'dan. Ancak, hiç şansım yok. Ne yaparsam yapayım, veriler takılıyor. Şimdiye kadar, başarıyla PostMan DELETE HTTP fiil kullanarak ve gibi bir url kullanarak dizinleri sildim:

   http://localhost:9200/[indexName]

Ancak, bu aslında verileri (dokümanlar olarak da bilinir) kaldırmaz.


Bunu postacı ile kontrol ettim ve "{" onaylandı ": doğru}" olarak depolandım. Bu onaylanmış yanıtı görürseniz endişelenmeyin. İndeks elastikten çıkarılır.
bijayk

Yanıtlar:


428

cURLAçık kaynak meraklılarının Elasticsearch için oluşturduğu birçok araçtan birini kullanarak veya görsel olarak silebilirsiniz .

CURL kullanma

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

Örneğin

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

Daha sonra bunun başarılı olup olmadığı konusunda bir cevap alacaksınız. Bir dizinin tamamını veya bir dizine sahip türleri de silebilirsiniz, belge kimliğini şu şekilde bırakarak bir türü silebilirsiniz -

curl -XDELETE localhost:9200/shop/product

Bir dizini silmek istiyorsanız -

curl -XDELETE localhost:9200/shop

Belirli bir adlandırma kuralına uyan birden fazla dizini silmek istiyorsanız ( *bir joker karaktere dikkat edin ), -

curl -XDELETE localhost:9200/.mar* 

Görme

Orada yukarıda da belirtildiği gibi çeşitli araçlar onları buraya listelemek olmaz, ama seni bulunan, hemen başlamak sağlayan birine sizi bağlayacak burada . Bu araca KOPF adı verilir, ana makinenize bağlanmak için lütfen sol üst köşedeki logoya tıklayın ve kümenizin URL'sini girin.

Bağlandıktan sonra tüm kümenizi yönetebilir, kümenizi silebilir, optimize edebilir ve ayarlayabilirsiniz.


tanıdığım 3 dokümanı silebileceğim herhangi bir yol var mı?
HIRA THAKUR

@JayeshGüncel bilgilerimi öğren, hayır. 3 değiştirilmiş curl -XDELETE komutunu bir bash betiğine koyabilir ve 3'ü birbiri ardına yürütebilir veya çalıştırabilirsiniz.
Opster Elasticsearch - Nathan

@JayeshJain so curl -XDELETE localhost: 9200 / dizin / tür / docid1 // curl -XDELETE localhost: 9200 / dizin / tür / docid2 // curl -XDELETE localhost: 9200 / dizin / tür / docid3
Opster Elasticsearch - Nathan

Aynı şekilde yaptım.Ancak sadece birden fazla dokümanı silmenin daha akıllı bir yolu olup olmadığını düşünüyordum. Alanı biliyorsam terim kullanabilirdim. Ancak bu senaryoda, sadece kimlikleri ile silmeniz gerekiyor.
Yine de

2
Geçersiz karakterli bir dizini nasıl silebilirim, örneğin, logstash-eu -% {customer} -2016.11.22. TÜM indeksleri silmek istiyorum logstash-eu -% {customer} - * veya logstash-eu -% *
Chris F

459

Tüm dizinleri silmeniz gerekiyorsa, bu kullanışlı olabilir:

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

Güç kalkanı:

Invoke-WebRequest -method DELETE http://localhost:9200/_all

20
bu geliştirme ve sıfırdan (boş) veritabanına sıfırlama ihtiyacı için çok yararlıdır. Teşekkürler!!
Artistan

3
bash_profile dosyasında bu komut için bir takma ad oluşturun ve geliştirme için kullanışlı olacaktır.
user805981

2
'Joker karakter ifadelerine veya tüm indekslere izin verilmiyor'
ZurabWeb

1
Bunun x-pack erişim kimlik bilgileriniz dahil tüm verileri sileceğini unutmayın.
Gajus

2
Bu aynı zamanda Kibana panolarını ve görselleştirmelerini de siliyor
nano

54

Dokümantasyon (veya Kesin Kılavuzu ) ayrıca silmek için yanındaki sorgu kullanabileceği diyor bütün indeksleri:

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

Ve önemli bir not var:

Bazıları için, tüm verilerinizi tek bir komutla silme yeteneği çok korkutucu bir ihtimaldir. Bir kaza sonucu kitlesel silinmesi olasılığını ortadan kaldırmak için, size aşağıdaki ayarlayabilirsiniz trueGözlerinde farklı elasticsearch.yml:

action.destructive_requires_name: true


30

Adresine bir DELETEistek göndermelisiniz

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

Ayrıca tek bir dokümanı silebilirsiniz:

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

Elastik çekiç kullanmanızı öneririm .

Sildikten sonra dizinin hala aşağıdaki URL'de olup olmadığını görebilirsiniz: http://[your_host]:9200/_stats/

İyi şanslar!


10 günden eski endeksleri silmenin yolu nedir? Sunucum destek olmadığı için küratörü kullanamıyorum.
biolinh

17

Dizini sildiğinizde eşleme silinir ve birlikte yazılır. aşağıdaki sorguyla tüm satırları silebilirsiniz

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

Ancak yukarıdaki sorgu için Elasticsearch'ün 2.0.0-beta1 sorgu ile silme ana API'sinden kaldırıldığından sorgu silme eklentisini yüklemeniz gerekir

Install delete-by-query plugin

sudo bin/plugin install delete-by-query

Daha fazlası için

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


Hem eklentiyi kurmadan önce hem de ES'yi yeniden başlattıktan sonra, "uri ve yöntem için işleyici bulunamadı" mesajı alıyorum.
Matthew

Bu, Elasticsearch 6+ ürününde çalışmaz. Bunun yerine _delete_by_query kullanın.
Shailesh Pratapwar

17
#list all index:       curl -XGET http://localhost:9200/_cat/indices?v 

resim açıklamasını buraya girin

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

Kibana'yı yükleyin . Kibana, kolayca sorgu oluşturmaya yardımcı olan daha akıllı bir geliştirme aracına sahiptir.

resim açıklamasını buraya girin


1
10 günden eski endeksleri silmenin yolu nedir? Sunucum destek olmadığı için küratörü kullanamıyorum.
biolinh

9
curl -X DELETE 'https://localhost:9200/_all'

Değişim httpiçin httpssize size uygulamada SSL sertifikası kullanıyorsanız


8

Python'daki bir dizini aşağıdaki gibi silebilirsiniz

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


7

Sorgu ile toplu silme için, sorgu API'sına göre özel silme kullanabilirsiniz :

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

Geçmişte bu API silinmiş ve daha sonra tekrar sunulmuştur

Kim ilginç uzun bir geçmişi var.

  1. Bu cevabın ilk versiyonunda, elasticsearch versiyon 1.6 belgelerine başvuruyorum . İçinde bu işlevsellik kullanımdan kaldırıldı olarak işaretlenmiş, ancak iyi çalışıyor.
  2. Gelen elasticsearch sürüm 2.0 ayrı eklenti taşındı . Ve eklenti haline gelmesinin nedenleri bile açıklandı .
  3. Ve yine 5.0 sürümünde çekirdek API'de ortaya çıktı !

3
Sorguya göre sil komutunu kullanırken dikkatli olun. Bunun büyük bir nedeni var. OutOfMemoryError!
user3658423

Elbette. Ama eğer senin için olmuşsa veya yeterince hafızan varsa casus olabilirsin.
Hubbitus

1
Bu artık kaldırılmış değildir: elastic.co/guide/en/elasticsearch/reference/6.4/...
Hubbitus

5

Logstash dizinini silmek istedim ve curl gibi farklı araçlarla ilgili çok şey araştırdım. Ama sonunda çözümü buldum. Kibana'ya giriş yapın. Geliştirici Araçları sekmesine gidin ve DELETE /logstash-*sorgu alanına yazın ve yeşil ok düğmesine basın. "alındı" ifadesini alırsanız: yanıt olarak true, verilerin silindiği anlamına gelir.


TEŞEKKÜR EDERİM!!! diğer birçok seçenek denedim - bu benim için çalışan tek.
eladyanai

5

Endeksleri listelemek curl -L localhost:9200/_cat/indices

9200 varsayılan bağlantı noktası [başka bir bağlantı noktası kullanıyorsanız bağlantı noktasını değiştirin]

Büyük olasılıkla logstash-yyyy-mm-ddformatla başlayan tüm indeksleri bulacaksınız (logstash- *)

Tüm endeksleri görebilir ve kullanabilirsiniz

Endeksleri silmek ve aşağıdaki komutu tetikleyen veri.

curl -XDELETE localhost:9200/index_name (Bu hem verileri hem de endeksleri kaldıracaktır).


4

Burada birçok iyi yanıt var, ancak eklemek istediğim bir şey de var:

  • Üzerinde çalıştırıyorsanız AWS ElasticSearch hizmeti , sen silme endeksler / damla veremeyiz . Dizinleri silmek yerine yeniden dizine eklemeniz gerekir .

AWS Elastik Arama'daki bir dizini sildim, alan adım ES 5.1 çalıştırıyor.
gazarsgo

2
AWS ES'de dizinleri açamaz / kapatamazsınız - bu da yeniden endeksleme gerektirir. Ancak, dizinleri silebilirsiniz. Sadece Kibana konsolundan yaptım, ama kesinlikle işe yarıyor.
Tom Dufall

4

Tüm dizini, doküman türünü veya kalıcı kimlik verilerini silebilirsiniz. bunlar üç yol:

  1. curl -XDELETE yerel ana bilgisayar: 9200 / index_name

  2. curl -XDELETE yerel ana bilgisayar: 9200 / index_name / doc-type

  3. curl -XDELETE yerel ana makine: 9200 / index_name / doc-type / documentId

ve tüm dizini silmek istiyorsanız joker karaktere gidin.


Merhaba, umarım sorguları çalıştırmadan önce elastik aramanızı başlattınız ve varsayılan olarak tüm yerel adreslere bağlandığından emin olun. localhost yerine IP adresinizi de kullanabilirsiniz. gibi 10.80.15.45:9200 Ve bir kez ES ayarınızı kontrol ağ.bind_host kontrol ve ya ayarlanmadı ya da 0.0.0.0 veya :: 0 veya ağınız için doğru IP adresi olarak ayarlandığından emin olabilirsiniz.
Gaurav

3

Dizini 'elasticsearch head' ( Chrome eklentisi ) içindeki DELETE işlemini kullanarak da silebilirsiniz . Chrome'unuza ekleyin ve ana makinenize bağlayın. Orada tüm indekslerinizi bulacaksınız ve silmek istediğiniz dizinin altındaki eylemler düğmesine tıklarsanız, açılır menüde bir SİL seçeneği bulacaksınız. üzerine tıklayın ve pop-up'a DELETE yazın. Dizininiz silinecek. 'Elasticsearch head' uzantısı endekslerinizi ve verilerinizi görüntülemenin ve yönetmenin kolay bir yoludur.


2

Dizini silmek için krom uzantısı elasticsearch-head'i kullanabilirsiniz


2

Dizini Kibana Konsolu ile silebilirsiniz:

Konsol Simgesi

Tüm dizini almak için:

GET /_cat/indices?v

Belirli bir dizini silmek için:

DELETE /INDEX_NAME_TO_DELETE

1

Sen olabilir gerçekten diskten kendi dosyalarını siler bir veya birden fazla dizini silmek . Örneğin:

curl -XDELETE localhost:9200/$INDEXNAME

Burada $INDEXNAME(örneğin, bir dizin adı olabilir users_v2), N indeksleri virgül (örneğin ayrılmış olarak users_v2,users_v3). Bir dizin deseni (örn. users_*) Veya _allyapılandırma yoluyla engellenmediği sürece de çalışır action.destructive_requires_name: true.

Belgeleri tek tek silmek mümkündür, ancak bu onları hemen temizlemez . Silme işlemi yalnızca yumuşak silme işlemidir ve segment birleştirme sırasında belgeler gerçekten kaldırılır . Bu sunumda segmentler ve birleştirmeler hakkında birçok ayrıntı bulacaksınız . Solr ile ilgili, ancak birleşimler Lucene'den, bu yüzden Elasticsearch'te aynı seçeneklere sahipsiniz.

API'ye geri dönerseniz, belgeleri tek tek kimliğe göre silebilirsiniz (yönlendirmeyle dizine eklerseniz yönlendirme değeri sağlayın):

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

Veya sorguya göre:

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

0

Bir dizini silmem gerekiyor filebeat-7.6.2-2020.04.30-000001ve bunu bir kıvrılma DELETE seçeneği ( curl -X DELETE "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty") kullanarak gerçekleştirdim ve aşağıdaki gibi bir kimlik doğrulama sorunuyla sonuçlanıyor ;

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

Burada, Elasticsearch için sağladığınız kullanıcı adını ve şifreyi kullanarak bukle isteğinin kimliğini doğrulamanız gerekir. O zaman dene

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

{"alındı": doğru} ile sonuçlanır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.