Menghapus Data Dari ElasticSearch

362

Saya baru mengenal ElasticSearch . Saya mencoba mencari cara menghapus data dari ElasticSearch. Saya telah menghapus indeks saya. Namun, itu tampaknya tidak benar-benar menghapus data itu sendiri. Hal-hal lain yang saya lihat menunjuk ke fitur Delete by Query . Namun, saya bahkan tidak yakin harus bertanya apa. Saya tahu indeks saya. Pada dasarnya, saya ingin mencari tahu cara melakukan

DELETE FROM [Index]

Dari PostMan di Chrome. Namun, saya tidak beruntung. Sepertinya tidak peduli apa yang saya lakukan, data tetap ada. Sejauh ini, saya telah berhasil menghapus indeks dengan menggunakan DELETE HTTP Verb di PostMan dan menggunakan url seperti:

   http://localhost:9200/[indexName]

Namun, itu tampaknya tidak benar-benar menghapus data (alias dokumen) sendiri.

pengguna687554
sumber
Saya memeriksa ini dengan tukang pos dan mendapat reposne sebagai "{" diakui ": true}" Jika Anda melihat respons yang diakui ini jangan khawatir. Indeks dihapus dari elastis.
bijayk

Jawaban:

428

Anda dapat menghapus menggunakan cURLatau secara visual menggunakan salah satu dari banyak alat yang dibuat oleh penggemar open source untuk Elasticsearch.

Menggunakan CURL

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

misalnya

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

Anda kemudian akan menerima balasan, apakah ini berhasil atau tidak. Anda dapat menghapus seluruh indeks atau jenis dengan indeks juga, Anda dapat menghapus suatu jenis dengan meninggalkan ID dokumen seperti -

curl -XDELETE localhost:9200/shop/product

Jika Anda ingin menghapus indeks -

curl -XDELETE localhost:9200/shop

Jika Anda ingin menghapus lebih dari satu indeks yang mengikuti konvensi penamaan tertentu (perhatikan *, wildcard), -

curl -XDELETE localhost:9200/.mar* 

Secara visual

Ada berbagai alat seperti yang disebutkan di atas, saya tidak akan mendaftarkannya di sini tetapi saya akan menghubungkan Anda ke salah satu yang memungkinkan Anda untuk memulai langsung, terletak di sini . Alat ini disebut KOPF, untuk terhubung ke host Anda, silakan klik logo di sudut kiri atas dan masukkan URL cluster Anda.

Setelah terhubung, Anda akan dapat mengatur seluruh kluster Anda, menghapus, mengoptimalkan, dan menyetel kluster Anda.

Opster Elasticsearch - Nathan
sumber
apakah ada cara saya bisa menghapus 3 doc yang saya tahu id.
HIRA THAKUR
@ Jayeshain untuk pengetahuan saya saat ini, tidak. Anda bisa memasukkan 3 perintah curl -XDELETE yang dimodifikasi ke dalam skrip bash dan jalankan atau jalankan 3 satu demi satu.
Opster Elasticsearch - Nathan
@JayeshJain jadi curl -XDELETE localhost: 9200 / index / type / docid1 // curl -XDELETE localhost: 9200 / index / type / docid2 // curl -XDELETE localhost: 9200 / index / type / docid3
Opster Elasticsearch - Nathan
saya melakukannya dengan cara yang sama. tetapi saya hanya berpikir jika ada cara yang lebih cerdas untuk menghapus banyak dokumen. Saya bisa menggunakan istilah jika saya tahu bidangnya. Tetapi dalam skenario ini, saya hanya perlu menghapus dokumen dengan id mereka. Thx anyways
HIRA THAKUR
2
Bagaimana saya bisa menghapus indeks dengan karakter yang tidak valid, misalnya, logstash-eu -% {customer} -2016.11.22. Saya ingin menghapus SEMUA indeks logstash-eu -% {customer} - * atau logstash-eu -% *
Chris F
459

Jika Anda perlu menghapus semua indeks, ini mungkin berguna:

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

Powershell:

Invoke-WebRequest -method DELETE http://localhost:9200/_all
kha
sumber
20
ini sangat berguna untuk pengembangan dan perlu mengatur ulang kembali ke awal (kosong) basis data. Terima kasih!!
Artistan
3
di bash_profile Anda buat alias untuk perintah ini dan itu akan berguna untuk pengembangan.
user805981
2
'Ekspresi karakter pengganti atau semua indeks tidak diizinkan'
ZurabWeb
1
Perhatikan bahwa ini akan menghapus semua data, termasuk kredensial akses x-pack Anda.
Gajus
2
Ini juga menghapus dasbor dan visualisasi Kibana
nano
54

The Dokumentasi (atau Panduan pasti ) mengatakan, bahwa Anda juga dapat menggunakan query berikutnya untuk menghapus semua indeks:

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

Dan ada catatan penting:

Bagi sebagian orang, kemampuan untuk menghapus semua data Anda dengan satu perintah adalah prospek yang sangat menakutkan. Jika Anda ingin menghilangkan kemungkinan penghapusan massal yang tidak disengaja, Anda dapat mengatur hal-hal berikut ini truedi elasticsearch.yml:

action.destructive_requires_name: true

skovorodkin
sumber
30

Anda harus mengirim DELETEpermintaan ke

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

Anda juga dapat menghapus satu dokumen:

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

Saya sarankan Anda untuk menggunakan elastichammer .

Setelah menghapus, Anda dapat mencari jika indeks masih ada dengan URL berikut: http://[your_host]:9200/_stats/

Semoga berhasil!

Jesper
sumber
apa cara menghapus indeks yang lebih dari 10 hari? Saya tidak dapat menggunakan kurator karena server saya tidak mendukung.
biolinh
17

Menghapus indeks akan menghapus pemetaan dan mengetik. Anda dapat menghapus semua baris dengan kueri berikut

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

Namun untuk kueri di atas, Anda perlu menginstal plugin delete-by-queri pada penghapusan-by-query 2.0.0-beta1 dari Elasticsearch telah dihapus dari api utama

Install delete-by-query plugin

sudo bin/plugin install delete-by-query

Untuk lebih

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

syahid ashraf
sumber
Baik sebelum dan sesudah menginstal plugin dan me-restart ES, saya mendapatkan "Tidak ada handler yang ditemukan untuk uri dan metode".
Matius Baca
Ini tidak berfungsi di Elasticsearch 6+. Gunakan _delete_by_query sebagai gantinya.
Shailesh Pratapwar
17
#list all index:       curl -XGET http://localhost:9200/_cat/indices?v 

masukkan deskripsi gambar di sini

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

Instal kibana . Kibana memiliki alat dev yang lebih pintar yang membantu membangun kueri dengan mudah.

masukkan deskripsi gambar di sini

ya
sumber
1
apa cara menghapus indeks yang lebih dari 10 hari? Saya tidak dapat menggunakan kurator karena server saya tidak mendukung.
biolinh
9
curl -X DELETE 'https://localhost:9200/_all'

Ubah httpke httpsjika Anda menggunakan sertifikat SSL di aplikasi Anda

Vikash Chauhan
sumber
8

Anda dapat menghapus indeks dengan python sebagai berikut

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
sumber
7

Untuk penghapusan massal dengan kueri, Anda dapat menggunakan penghapusan khusus dengan API kueri :

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

Dalam riwayat, API telah dihapus dan kemudian diperkenalkan kembali

Yang menarik itu memiliki sejarah panjang.

  1. Dalam versi pertama jawaban itu, saya merujuk ke dokumentasi elasticsearch versi 1.6 . Di dalamnya fungsi itu ditandai sebagai usang tetapi berfungsi dengan baik.
  2. Dalam elasticsearch versi 2.0, itu dipindahkan ke plugin yang terpisah . Dan bahkan alasan mengapa itu menjadi plugin dijelaskan .
  3. Dan itu lagi muncul di API inti di versi 5.0 !
Hubbitus
sumber
3
Hati-hati menggunakan delete by query. Itu usang karena alasan utama. OutOfMemoryError!
user3658423
Tentu. Tetapi Anda dapat memata-matai jika itu terjadi pada Anda atau Anda memiliki memori yang cukup.
Hubbitus
1
Ini tidak usang lagi: elastic.co/guide/en/elasticsearch/reference/6.4/...
Hubbitus
5

Saya ingin menghapus indeks logstash dan mencari banyak tentang berbagai alat seperti curl. Tetapi menemukan solusinya di akhir. Masuk ke Kibana. Pergi ke tab Alat Dev dan ketik DELETE /logstash-*bidang permintaan dan tekan tombol panah hijau. jika Anda mendapatkan "pengakuan": true dalam respons itu berarti data telah dihapus.

Ashish Kumar
sumber
TERIMA KASIH!!! Saya mencoba banyak pilihan lain - ini adalah satu-satunya yang bekerja untuk saya.
eladyanai
5

Untuk membuat daftar indeks curl -L localhost:9200/_cat/indices

9200 port default [ganti port jika menggunakan port lain]

Anda mungkin akan menemukan semua indeks dimulai dengan logstash-yyyy-mm-ddformat (logstash- *)

Anda dapat melihat semua indeks dan menggunakannya

Untuk menghapus indeks dan data memicu perintah berikut.

curl -XDELETE localhost:9200/index_name (Yang akan menghapus data dan indeks keduanya).

rajdeepbs29
sumber
4

Ada banyak jawaban bagus di sini, tetapi ada juga sesuatu yang ingin saya tambahkan:

  • Jika Anda menjalankan layanan AWS ElasticSearch , Anda tidak dapat menjatuhkan / menghapus indeks . Alih-alih menghapus indeks, Anda harus memasukkannya kembali .
Facundo La Rocca
sumber
Baru saja menghapus indeks pada AWS ElasticSearch, domain saya menjalankan ES 5.1.
gazarsgo
2
Pada AWS ES Anda tidak dapat membuka / menutup indeks - yang memerlukan pengindeksan ulang. Namun, Anda dapat menghapus indeks. Saya hanya melakukannya melalui konsol Kibana, tapi pasti berhasil.
Tom Dufall
4

Anda dapat menghapus seluruh indeks, tipe dokumen atau data id terkait. ini adalah tiga cara:

  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

dan jika Anda ingin menghapus semua indeks maka gunakan wildcard.

Gaurav
sumber
Hai, saya harap sebelum mengeksekusi kueri Anda memulai pencarian elastis Anda dan pastikan secara default itu mengikat ke semua alamat lokal. dan alih-alih localhost, Anda juga dapat menggunakan alamat IP Anda. seperti 10.80.15.45:9200 Dan sekali memeriksa pengaturan ES Anda, saya bisa berpikir untuk check-in di network.bind_host dan pastikan itu tidak disetel atau diatur ke 0.0.0.0 atau :: 0 atau ke alamat IP yang benar untuk jaringan Anda.
Gaurav
3

Anda juga dapat menghapus indeks menggunakan tindakan DELETE di 'elasticsearch head' ( plugin Chrome ). Tambahkan ke chrome Anda dan hubungkan ke host Anda. Di sana Anda akan menemukan semua indeks Anda dan jika Anda mengklik tombol tindakan di bawah indeks yang ingin Anda hapus, Anda akan menemukan opsi DELETE di drop down. klik di atasnya dan masukkan DELETE di jendela sembul. Indeks Anda akan dihapus. Ekstensi 'kepala elasticsearch' adalah cara mudah untuk melihat dan mengelola indeks dan data Anda.

prateek kumar
sumber
2

Anda dapat menggunakan kepala elastik ekstensi chrome untuk menghapus indeks

ssh
sumber
2

Anda dapat menghapus indeks dengan Kibana Console:

Ikon Konsol

Untuk mendapatkan semua indeks:

GET /_cat/indices?v

Untuk menghapus indeks tertentu:

DELETE /INDEX_NAME_TO_DELETE
FChiri
sumber
1

Anda dapat menghapus satu atau lebih indeks, yang benar-benar menghapus file mereka dari disk . Sebagai contoh:

curl -XDELETE localhost:9200/$INDEXNAME

Di mana $INDEXNAMEbisa berupa nama indeks (misalnya users_v2), indeks N dipisahkan dengan koma (misalnya users_v2,users_v3). Pola indeks (misalnya users_*) atau _all, juga berfungsi, kecuali jika diblokir pada konfigurasi via action.destructive_requires_name: true.

Menghapus dokumen individual dimungkinkan, tetapi ini tidak akan segera menghapusnya . Penghapusan hanya penghapusan lunak, dan dokumen benar-benar dihapus selama penggabungan segmen . Anda akan menemukan banyak detail tentang segmen dan penggabungan dalam presentasi ini . Ini tentang Solr, tetapi gabungan dari Lucene, jadi Anda memiliki opsi yang sama di Elasticsearch.

Kembali ke API, Anda dapat menghapus setiap dokumen berdasarkan ID (berikan nilai perutean jika Anda indeks dengan perutean):

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

Atau dengan kueri:

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

Katakanlah saya perlu menghapus indeks filebeat-7.6.2-2020.04.30-000001dan saya melakukannya dengan menggunakan opsi DELETE ( curl -X DELETE "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty") dan menghasilkan masalah otentikasi seperti di bawah ini;

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

Di sini Anda harus mengautentikasi permintaan ikal menggunakan nama pengguna dan kata sandi yang Anda berikan untuk Elasticsearch. Cobalah

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

akan menghasilkan {"diakui": true} .

kISHoR
sumber