Elasticsearch: Perbarui API: perbarui berdasarkan kueri

Dibuat pada 12 Jan 2012  ·  160Komentar  ·  Sumber: elastic/elasticsearch

1583 memungkinkan untuk memperbarui dokumen individu. Pembaruan dengan kueri akan mengurangi perjalanan pulang pergi jaringan secara radikal jika Anda ingin memperbarui sejumlah dokumen dan mendorong pekerjaan dari klien ke ES.

curl -XPOST localhost:9200/index/type/_update -d '{
    "query" : { "constant_score" : { "filter" : { "term" : { "counter" : 0 } } } },
    "script" : "ctx._source.counter += count",
    "params" : {
        "count" : 4
    }
}'
:DistributeCRUD

Komentar yang paling membantu

Pembaruan berdasarkan kueri aktif di 2.3.0 dan 5.0.0-alpha-1. Dokumen ada di sini .

Semua 160 komentar

Akan sangat menyukai fitur ini juga!

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Saya sangat membutuhkan fitur ini

:+1:

Sambil menunggu fitur ini secara resmi selesai dan dirilis, saya telah mengemas pull request #2231 sebagai plugin: yakaz/elasticsearch-action-updatebyquery .
Selamat bersenang-senang.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

:+1: :doa:

+1

+1

Apakah ada cara untuk meneruskan skor kueri sebagai parameter ke skrip pembaruan? Saya perlu memperbarui entri dengan skor yang diperbarui berdasarkan bidang turunannya.

+1

+1

+1

@scottc52 Apakah Anda berhasil melakukannya? Saya juga mencari cara untuk melakukan ini.

+1

@gboivin Tidak. Saya melakukan kueri has_child dan mengirim permintaan pembaruan terpisah, tetapi lambat.

ditunggu fitur ini juga..

+1

+1

+1

+1

+1

+1

+1

Hanya menulis skrip kecil untuk membantu menunggu sesuatu ... lebih banyak "produksi siap" ;-)

https://github.com/YannBrrd/esNodeUpdater

Jangan ragu untuk berkomentar/memperbarui ...

+1

Apakah ada status resmi pada fitur ini dari tim pengembang? Saya tidak melihat ada masukan dari mereka. Apakah ada rencana untuk menambahkan fitur ini ke inti atau preferensi pengguna untuk menggunakan plugin seperti yang tercantum di atas ?

Kami berencana untuk kembali ke yang ini, alasan utama kami menunda ini adalah karena kami perlu memiliki cara untuk menghentikan pembaruan yang ada dengan kueri, karena mereka dapat dieksekusi secara tidak sengaja pada sejumlah besar data, menyebabkan masalah.. .

+1. Terima kasih atas pembaruan dan pengerjaannya.

+1

+1

+1

+1

+1, terdengar berguna

+1

+1

+1

+1

+1

+1

+1

+1

+2

+1

+10

+1

+1

+1

Pernahkah Anda berpikir untuk mengimplementasikan dengan panggilan HTTP ganda fitur ini. Saya memikirkan penghangat yang memberikan kemungkinan untuk menyimpan kueri dan kemudian menjalankan kueri (itu sebenarnya bukan hal yang sama tetapi itu membuat saya memikirkannya).

@kimchy Anda memberi tahu bahwa Anda memikirkan cara untuk menghentikan pembaruan jika diluncurkan pada sejumlah besar data secara tidak sengaja. Jika Anda menghentikannya, mungkin data yang diindeks akan dalam keadaan tidak valid (mungkin dimungkinkan untuk mengembalikan ...?). Mungkin pendekatan yang lebih baik akan mencegah kesalahan.

Jika Anda memerlukan dua panggilan HTTP sebelum memicu pembaruan massal nyata (1 untuk mempersiapkan dan 1 untuk benar-benar memicunya dengan id transasi antara) dan kemudian penangan status pembaruan (seperti dataimporthandler di SolR) untuk mengetahui kapan kueri benar-benar selesai.

Saya tidak yakin benar-benar jelas tetapi saya pikir ini bisa menjadi solusi untuk mencegah panggilan kesalahan ...

+1

+1

Saya juga ingin upvote ini.

+1

@kimchy : Performa tidak dapat menjadi pertanyaan: Saat ini saya menjalankan ribuan kueri untuk mencari data (mis. Pencarian alamat indeks OSM untuk lokasi GPS - pencarian cepat, hei, saya mendapat ElasticSearch!) dan perbarui setiap dokumen di indeks lain (misalnya untuk menambahkan alamat teks yang jelas). Pembaruan saya menambahkan bidang baru. Pembaruan massal di dalam ES harus lebih efisien daripada 10.000 Permintaan pencarian + 10.000 permintaan pembaruan (juga menggunakan pembaruan massal ...). Dari sudut pandang pengkodean dan runtime akan lebih efisien, misalnya file pembaruan massal mendapatkan 20.000 baris dan hanya dapat memiliki 2 dengan fitur baru - semua data dipindahkan melalui jaringan dan membuat ES sibuk membaca file pembaruan massal ...

Mungkin Anda setuju untuk menambahkan batasan untuk memperbarui operasi misalnya _update/_query=some_conditions&size=1000 dengan cara itu menghindari memperbarui satu juta dokumen - dan kami sebagai pengembang dapat memutuskan apakah kami menjalankan 1000*1000 pembaruan untuk memperbarui satu juta catatan... Ini harus mengembalikan sejumlah dokumen yang diperbarui untuk memberikan kontrol jika panggilan pembaruan lain diperlukan.

+1

Untuk skenario saya (perkaya catatan setelah pencarian di indeks lain) saya mungkin melakukannya dengan cara lain: masukkan data terlebih dahulu ke mongoDb, lakukan pencarian di catatan pembaruan ElasticSearch di Mongo, gunakan sungai mongo untuk mendapatkan hasil akhir di ElasticSearch untuk menampilkannya di GUI (build di atas ES). Adakah yang pernah mengalami skenario seperti itu? Saya berharap saya bisa pergi ES saja ... sampai sekarang, saya menolak menggunakan DB dalam proyek saya.

Hai,

anda cukup menggunakan Couchbase + Elasticsearch untuk ini, sebagai Couchbase
menawarkan antarmuka dengan Elasticsearch

keramahan,
Yann Barraud

02-03 2014 seti123 [email protected] :

Untuk skenario saya (memperkaya catatan setelah pencarian di indeks lain) saya mungkin
lakukan dengan cara lain: masukkan data terlebih dahulu ke mongoDb, lakukan pencarian di
Catatan pembaruan ElasticSearch di Mongo, gunakan sungai mongo untuk mendapatkan hasil akhir
di ElasticSearch untuk menampilkannya di GUI (dibangun di atas ES). punya siapa saja?
berpengalaman dengan skenario seperti itu? Saya berharap saya bisa pergi ES satu-satunya cara ... sampai
sekarang, saya memang menolak menggunakan DB di proyek saya.

Balas email ini secara langsung atau lihat di Gi tHubhttps://github.com/elasticsearch/elasticsearch/issues/1607#issuecomment -33917801
.

+1

+100

+1

+1

Apakah ada alternatif di ElasticSearch misalnya memicu skrip yang melakukan tindakan saat data baru dimasukkan atau diperbarui? Beberapa jenis sebelum Pemicu Indeks dapat membantu saya menghapus rantai pra-pemrosesan (sekarang kami melakukan Message Ques dengan REDIS dan rantai pemrosesan 0MQ sebelum kami memasukkan Data dalam ES - semuanya memerlukan bandwdtih jaringan untuk mengacak data untuk pemrosesan paralel ... )

saya ingin melihat
http://localhost :9200/index/type/_preprocessBeforeIndex?script=myDataAnalysisScript
http://localhost :9200/index/type/_preprocessBeforeUpdate?script=myDataAnalysisScript
Skrip harus dapat menambahkan bidang baru ke catatan saat ini sebelum ES menyimpan/mengindeksnya (untuk menghindari tindakan indeks ganda setelah perubahan). Karena kami banyak bekerja dengan node.js, skrip harus bekerja dalam bahasa yang diperlukan (dalam JavaScript Kasus kami).

Lebih baik lagi jika kita bisa mendefinisikan Script di MAPPING per Type data daripada di indeks yang dihasilkan.
Adakah plugin yang tersedia yang dapat memicu skrip seperti itu? Adakah dokumentasi penggunaan ES API dalam Skrip?

+1

+1

+1

+1

+1

+1

+1

+1

+1

Menunggu fitur ini... (+1)

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Apakah fitur ini sedang dalam pengembangan sama sekali?
Ini akan memecahkan begitu banyak masalah yang hampir tidak mungkin ditangani dengan andal pada tingkat aplikasi saat ini.

+1

+1

+1

Hanya untuk mengingatkan Anda bahwa sejak pertengahan Februari 2013 saya sudah dikemas, dan dipelihara sejak itu, "permintaan tarik resmi" # 2231 via @martijnvg 's cabang sebagai plugin: Yakaz / elasticsearch-aksi-updateByQuery .

+1

+1

+1

+1

+1
Bagaimana mungkin fitur ini sejak Februari 2013 masih belum bergabung menjadi master?

+1
Begitu juga dengan komentar

+1

Kami mendapatkan masalah ini beberapa bulan yang lalu (lihat posting saya sebagai @seti123 Januari/Februari) dan saya ingin membagikan hasil kami - setelah menyerah pada DB+ES River (terlalu banyak kekhawatiran tentang dependensi versi) kami mengevaluasi kasus penggunaan kami dengan sukses Data Peti (yang menggunakan ES sebagai pustaka dan menambahkan antarmuka SQL untuk pemetaan & kueri termasuk "perbarui berdasarkan kueri" https://crate.io/docs/stable/sql/dml.html#updating-data ).
Titik awal yang baik untuk membaca tentang kesamaan & perbedaan: https://crate.io/blog/crate_data_elasticsearch

Ditutup untuk #2230

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

akan memperbarui dengan permintaan dukungan setPostFilter?
edisi #12295

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

dapatkah seseorang meninjau ini dan memberikan umpan balik.
https://discuss.elastic.co/t/updatebyqueryresponse-throwing-timeout/29176

Pembaruan dengan kueri gagal saat memperbarui lebih dari 20 + juta catatan.

@ Praveen82 Anda menggunakan plugin pihak ke-3. Ini bukan tempat yang tepat untuk meminta dukungan, Anda harus mempostingnya sebagai masalah di repositori plugin itu.

https://github.com/elastic/elasticsearch/pull/15125 mengimplementasikan sintaks yang akan terlihat seperti

curl -XPOST localhost:9200/index/type/_update_by_query -d '{
    "query" : { "term" : { "counter" : 0 } },
    "script" : {
      "inline": "ctx._source.counter += count",
      "params" : {
          "count" : 4
      }
  }
}'

Alasan mengapa ini terhenti begitu lama adalah karena batas waktu tersebut: sampai sekarang ada cara untuk meluncurkan pekerjaan yang berjalan lama di Elasticsearch dan melaporkan status dan hal-hal mereka. Dengan api manajemen tugas (#15347) yang unggul, saya mengambil obor pada hal-hal gaya "reindex" dan "update-by-query" dan memulainya lagi dengan maksud untuk berintegrasi dengan manajemen tugas ASAP.

Bagaimanapun, #15125 dan PR tindak lanjut apa pun adalah tempat untuk mencari fitur ini.

+1

+1

+1

+1

+1

Pembaruan berdasarkan kueri aktif di 2.3.0 dan 5.0.0-alpha-1. Dokumen ada di sini .

Apakah pembaruan dengan kueri di 2.3.+ atau 5.+ mendukung plugin javascript?

Apakah pembaruan dengan kueri di 2.3.+ atau 5.+ mendukung plugin javascript?

Jika Anda benar-benar menginginkannya, tentu saja. Di 2.3+ kami menguji pembaruan demi kueri terhadap groovy dan di 5.+ kami menguji tanpa rasa sakit. Kami biasa menguji groovy dan itu berhasil di sana juga. Saya berharap javascript akan berfungsi dengan baik.

Dukungan JS akan sangat apik.

Dukungan JS akan sangat apik.

Seperti yang saya katakan, itu ada, Anda hanya perlu menginstal plugin.

Masalah dengan semua bahasa ini adalah bahwa implementasinya pada JVM tidak diorientasikan dengan benar untuk disematkan. Itu sebabnya kami tidak memasukkannya secara default.

Bagaimanapun, jika Anda ingin membicarakannya lebih lanjut, saya pikir diskusi.elastis.co adalah tempat yang lebih tepat untuk itu.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

abtpst picture abtpst  ·  3Komentar

rjernst picture rjernst  ·  3Komentar

ttaranov picture ttaranov  ·  3Komentar

jasontedor picture jasontedor  ·  3Komentar

clintongormley picture clintongormley  ·  3Komentar