يبدو أن هناك مشكلة عند استخدام استعلامات custom_score ومحاولة تسجيل النقاط بناءً على الحقول التي يمكن أن تحتوي على قيم فارغة.
نظرا لدي:
{"user": {"name": "John", "position": null}}
عندما أستعلم باستخدام custom_score ونص مثل:
{"script": "_score + doc['position'].value"}
أحصل على الخطأ التالية:
ElasticSearchIllegalArgumentException[No field found for [position]]; }]
إذا أضفت مستخدمًا آخر:
{"user": {"name": "Jane", "position": 1}}
كل شيء يعمل بشكل جيد.
أعتقد أن السلوك الافتراضي يجب أن يكون لحقول القيمة الخالية لإرجاع قيمة خالية - وليس رفع خطأ.
قد تبدو الأمثلة أعلاه ضعيفة ، لكن تخيل ملء الفهارس ببيانات من قاعدة بيانات ، حيث لا يمكن ضمان عدم احتواء العمود على أي شيء بخلاف القيم الخالية. يمكنك التغلب على هذا عن طريق تلبيس الحقول الخاصة بك إلى سلاسل باستخدام التعيين ، لكنني أقترح بالتأكيد أن ElasticSearch قادر على التعامل مع قيمة البرنامج النصي بشكل أكثر ذكاءً.
أوه - وشكرا على منتج رائع! :-)
هييا ،
يحدث هذا لأن هذا الحقل لم يتم تقديمه بعد (له قيمة فارغة). بمجرد تقديمه (بقيمة واحدة ، في الكتلة) ، فسوف يعمل بشكل جيد. يمكنك أيضًا تحديد null-value
في التعيينات التي ستفهرس قيمة فارغة محددة عندما يكون هذا الحقل null
. نظرًا لأنه لم يتم تقديمه ، فلا يمكن اشتقاق نوعه.
نعم انا افهم ذلك. ألن يكون من الأفضل لقيمة البرنامج النصي أن ترجع فارغة أو على الأقل أن يكون لديك نوع من الوظيفة للتحقق من وجودها ، بدلاً من إثارة استثناء وعدم التسبب في إرجاع أي نتائج؟
على سبيل المثال:
{"script": "_score + (doc['position'].present ? doc['position'] : 0)"}
يجب أن يعمل هذا:
{"script": "_score + (doc.containsKey('position') ? doc['position'].value : 0)"}
أو ربما هذا:
{"script": "_score + (doc['position'] ? doc['position'].value : 0)"}
ومع ذلك ، مع وجود مجموعة بيانات كافية ، حيث يحتوي مستند واحد على الأقل على قيمة position
على كل جزء ، لن تحتاج إلى هذا التحقق ، ومن ثم سيكون أداء النص البرمجي أفضل بكثير.
خطأ فادح: لم يتم اكتشافه [NoFieldFound] لم يتم العثور على حقل: Contact._PloiciesLastApplicationDate0 المحاولة: 1 مرة (مرات). القيت
أتلقى الخطأ التالي أثناء تحديث جهة الاتصال.
على سبيل المثال: -
$ checkExist = Infusionsoft_DataService :: query (new Infusionsoft_Contact () ، صفيف ('Phone1' => '(618) -795-0304')) ؛
أنا أحضر جهة الاتصال وأحدّث جهة الاتصال بناءً على رقم الهاتف ، ولكن هل أعطي هذا الخطأ؟
شكرا!
التعليق الأكثر فائدة
يجب أن يعمل هذا:
أو ربما هذا:
ومع ذلك ، مع وجود مجموعة بيانات كافية ، حيث يحتوي مستند واحد على الأقل على قيمة
position
على كل جزء ، لن تحتاج إلى هذا التحقق ، ومن ثم سيكون أداء النص البرمجي أفضل بكثير.