Pertanyaan Tidak ada pemetaan yang ditemukan di lapangan untuk dipilah dalam ElasticSearch


Elasticsearch melempar a SearchParseException saat parsing query jika ada beberapa dokumen yang ditemukan tidak mengandung field yang digunakan dalam kriteria sortir.

SearchParseException: Parse Failure [Tidak ditemukan pemetaan untuk [price] untuk mengurutkan]

Bagaimana saya bisa berhasil mencari dokumen-dokumen ini, bahkan jika ada yang hilang price bidang?


76
2018-06-11 18:58


asal


Jawaban:


Setelah menggali lebih banyak, saya menemukan solusi seperti yang diberikan di bawah ini. ignore_unmapped harus secara eksplisit diatur ke true dalam klausa semacam itu.

"sort" : [
       { "rating": {"order" : "desc" , "ignore_unmapped" : true} },
       { "price": {"order" : "asc" , "missing" : "_last" , "ignore_unmapped" : true} }
]

Untuk informasi lebih lanjut lihat referensi Elasticsearch untuk:


91
2018-06-11 19:13



Bagi mereka yang mencari contoh keduanya ignore_unmapped dan    unmapped_type silahkan lihat tanggapan saya di sini.

Perhatikan bahwa "ignore_unmapped" sekarang tidak lagi digunakan karena "unmapped_type". Ini dilakukan sebagai bagian dari # 7039

Dari dokumentasi: Sebelum 1.4.0 ada parameter boolean ignore_unmapped, yang tidak cukup informasi untuk menentukan nilai pengurutan, dan tidak berfungsi untuk pencarian indeks silang. 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 bidang. Opsi unmapped_type memungkinkan untuk mengabaikan bidang yang tidak memiliki pemetaan dan tidak mengurutkannya. Nilai parameter ini digunakan untuk menentukan jenis nilai apa yang harus dikeluarkan. Berikut ini contoh bagaimana itu dapat digunakan:

{
    "sort" : [
        { "price" : {"unmapped_type" : "long"} },
    ],
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

Jika salah satu indeks yang ditanyakan tidak memiliki pemetaan harga, Elasticsearch akan menanganinya seolah-olah ada pemetaan bertipe panjang, dengan semua dokumen dalam indeks ini tidak memiliki nilai untuk bidang ini.


30
2018-06-15 21:16



Ternyata ElasticSearch tidak akan mengurutkan nilai nol. Saya menganggap itu akan memperlakukan nol sebagai di awal atau akhir (seperti dengan pemesanan SQL) tapi saya yakin itu juga memicu kesalahan ini.

Jadi jika Anda melihat kesalahan ini, Anda mungkin perlu memastikan atribut sortir memiliki nilai default ketika dikirim ke ElasticSearch.

Saya memiliki kesalahan ini dengan Rails + ElasticSearch + Tire karena kolom semacam ini tidak memiliki nilai default, jadi dikirim ke ES sebagai null.

Masalah ini menunjukkan nilai nol yang ditangani, tetapi itu bukan pengalaman saya. Ini sesuatu yang patut dicoba.


2
2018-03-29 08:17



Saya mengalami masalah yang sama (agak; akan mendapatkan beberapa kesalahan, tetapi beberapa hasil), tetapi dalam kasus saya pencarian saya sedang 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.


0
2018-01-03 17:40