Elasticsearch: Bidang nilai nol dalam kueri skor_kustom menyebabkan kesalahan 'Tidak ada bidang'

Dibuat pada 9 Feb 2011  ·  5Komentar  ·  Sumber: elastic/elasticsearch

Tampaknya ada kesalahan saat menggunakan kueri custom_score dan mencoba mencetak skor berdasarkan bidang yang dapat berisi nilai nol.

Mengingat saya punya:

{"user": {"name": "John", "position": null}}

Ketika saya meminta menggunakan custom_score dan skrip seperti:

{"script": "_score + doc['position'].value"}

Saya mendapatkan kesalahan berikut:

ElasticSearchIllegalArgumentException[No field found for [position]]; }]

Jika saya menambahkan pengguna lain:

{"user": {"name": "Jane", "position": 1}}

Semuanya bekerja dengan baik.

Saya pikir perilaku default harus untuk bidang nilai nol untuk mengembalikan nol - dan tidak menimbulkan kesalahan.

Contoh di atas mungkin tampak lemah, tetapi bayangkan mengisi indeks dengan data dari database, di mana tidak ada jaminan yang dapat dibuat bahwa kolom tidak akan berisi apa pun selain nilai nol. Anda dapat menyiasatinya dengan mengetik bidang Anda ke string dengan menggunakan pemetaan, tetapi saya sangat menyarankan bahwa ElasticSearch mampu menangani nilai skrip dengan lebih cerdas.

Komentar yang paling membantu

Ini harus bekerja:

{"script": "_score + (doc.containsKey('position') ? doc['position'].value : 0)"}

Atau bahkan mungkin ini:

{"script": "_score + (doc['position'] ? doc['position'].value : 0)"}

Meski begitu, dengan kumpulan data yang cukup, di mana setidaknya satu dokumen memiliki nilai position pada setiap shard, Anda seharusnya tidak memerlukan pemeriksaan ini, dan kemudian kinerja skrip Anda akan jauh lebih baik.

Semua 5 komentar

Oh - dan terima kasih untuk produk yang luar biasa! :-)

Hei,

Ini terjadi karena bidang itu belum diperkenalkan (memiliki nilai nol). Setelah diperkenalkan (dengan satu nilai, ke dalam cluster), maka itu akan berfungsi dengan baik. Anda juga dapat mendefinisikan null-value dalam pemetaan yang akan mengindeks nilai null tertentu ketika bidang tersebut memiliki null . Karena tidak diperkenalkan, tipenya tidak dapat diturunkan.

Ya aku mengerti itu. Bukankah lebih baik jika nilai skrip mengembalikan nol atau setidaknya memiliki semacam fungsi untuk memeriksa keberadaannya, daripada memunculkan pengecualian dan menyebabkan tidak ada hasil yang dikembalikan?

Misalnya:

{"script": "_score + (doc['position'].present ? doc['position'] : 0)"}

Ini harus bekerja:

{"script": "_score + (doc.containsKey('position') ? doc['position'].value : 0)"}

Atau bahkan mungkin ini:

{"script": "_score + (doc['position'] ? doc['position'].value : 0)"}

Meski begitu, dengan kumpulan data yang cukup, di mana setidaknya satu dokumen memiliki nilai position pada setiap shard, Anda seharusnya tidak memerlukan pemeriksaan ini, dan kemudian kinerja skrip Anda akan jauh lebih baik.

Kesalahan fatal: Tidak Tertangkap [NoFieldFound]Tidak ada bidang yang ditemukan: Contact._PloiciesLastApplicationDate0 Dicoba: 1 kali. dilempar

Saya mendapatkan kesalahan berikut saat memperbarui kontak.

misalnya:-

$checkExist = Infusionsoft_DataService::query(new Infusionsoft_Contact(), array('Phone1' => '(618)-795-0304'));

Saya mengambil kontak dan memperbarui kontak berdasarkan nomor telepon, Tapi itu memberikan kesalahan ini?

Terima kasih!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat