Elasticsearch membuat SearchParseException
permintaan parsing sementara jika ada beberapa dokumen yang ditemukan tidak berisi bidang yang digunakan dalam kriteria pengurutan.
SearchParseException: Kegagalan Parse [Tidak ditemukan pemetaan untuk [harga] untuk disortir]
Bagaimana saya bisa berhasil mencari dokumen-dokumen ini, meskipun ada beberapa yang hilang price
isinya?
Jawaban:
Setelah menggali lebih banyak, saya menemukan solusinya seperti yang diberikan di bawah ini.
ignore_unmapped
harus secara eksplisit diatur ketrue
dalam klausa sortir.Untuk informasi lebih lanjut, lihat referensi Elasticsearch untuk:
sumber
"ignore_unmapped" : true
dan itu mulai bekerja lagi tetapi yang aneh adalah, apa yang terjadi di belakang layar! Siapa tahu! Bagaimanapun, itu berhasil sekarang. +1Perhatikan bahwa "ignore_unmapped" sekarang sudah tidak digunakan lagi dan menggantikan "unmapped_type". Ini dilakukan sebagai bagian dari # 7039
Dari dokumentasi: Sebelum 1.4.0 ada parameter boolean ignore_unmapped, yang tidak cukup informasi untuk memutuskan nilai pengurutan yang akan dikeluarkan, dan tidak berfungsi untuk pencarian lintas indeks. Ini masih didukung tetapi pengguna didorong untuk bermigrasi ke unmapped_type baru sebagai gantinya.
Secara default, permintaan pencarian akan gagal jika tidak ada pemetaan yang terkait dengan suatu bidang. Opsi unmapped_type memungkinkan untuk mengabaikan bidang yang tidak memiliki pemetaan dan tidak mengurutkannya. Nilai parameter ini digunakan untuk menentukan nilai urut apa yang akan dikeluarkan. Berikut adalah contoh bagaimana itu dapat digunakan:
Jika salah satu indeks yang ditanyakan tidak memiliki pemetaan harga, maka Elasticsearch akan menanganinya seolah-olah ada pemetaan jenis panjang, dengan semua dokumen dalam indeks ini tidak memiliki nilai untuk bidang ini.
sumber
Rupanya ElasticSearch tidak akan mengurutkan nilai nol. Saya berasumsi itu akan memperlakukan null sebagai awal atau akhir (seperti dengan pengurutan SQL) tetapi saya percaya itu juga memicu kesalahan ini.
Jadi, jika Anda melihat kesalahan ini, Anda mungkin perlu memastikan atribut sort memiliki nilai default saat dikirim ke ElasticSearch.
Saya mengalami kesalahan ini dengan Rails + ElasticSearch + Tire karena kolom sortir tidak memiliki nilai default, jadi dikirim ke ES sebagai null.
Masalah ini menunjukkan penanganan nilai null, tetapi itu bukan pengalaman saya. Itu sesuatu yang pantas untuk dicoba.
sumber
Saya mengalami masalah yang sama (agak; akan mendapatkan beberapa kesalahan, tetapi beberapa hasil), tetapi dalam kasus saya pencarian saya dikeluarkan di root (tidak ada indeks yang ditentukan), dan kesalahan yang saya dapatkan adalah karena pencarian / pesanan juga mencari indeks Kibana.
Kesalahan bodoh, tapi mungkin ini akan membantu orang lain yang berakhir di sini.
sumber
Elasticsearch 6.4
cukup tentukan indeksnya dan hanya itu di Kibana
SEBELUM
SETELAH
sumber
jika Anda menggunakan es 6.7
coba yang ini
sumber
Anda juga bisa menggunakan skrip yang memberi Anda fleksibilitas:
sumber
Ketika kami menggunakan kode di bawah ini, di mana added_on adalah tanggal, apa yang terjadi !! atribut teks dianalisis, artinya akan dipecah menjadi kata-kata yang berbeda saat disimpan, dan memungkinkan pencarian teks bebas pada satu atau lebih kata di lapangan
jadi ada "teks" dan "kata kunci" yang terkait dengan bidang, jadi jika kita perlu menggunakan agregasi dalam kueri, kita membutuhkan nilai bidang secara umum kata kunci.
sumber