كيف يمكنني البحث عن جوانب فارغة في حقل الوجه متعدد القيمة وفي نفس الوقت في سولر؟

StackOverflow https://stackoverflow.com/questions/2250751

  •  20-09-2019
  •  | 
  •  

سؤال

لدي تطبيق يمكن للمستخدمين اختيار قطع غيار السيارات. انهم اختيار سيارتهم ثم اختيار سمات المركبات كجواج. بعد تحديد سيارتهم، يمكنهم اختيار جوانب مثل حجم المحرك، على سبيل المثال، لتضييق قائمة النتائج. كانت المشكلة، ليست كل الوثائق لديها حجم محرك (إنها قيمة فارغة في Solr)، لأنه لا يهم لجميع الأجزاء. على سبيل المثال، نادرا ما يكون حجم المحرك لمرشح الهواء. لذلك حتى لو اختار المستخدم 3.5L لحجم محركهم، ما زلت أرغب في إظهار مرشحات الهواء على الشاشة كجزء ممكن يمكن للمستخدم اختياره. فعلت بعض البحث واستعلام الوجه التالي يعمل تماما:

enginesize:"3.5" OR enginesize:(*:* AND -enginesize:[* TO *]) 

سيتطابق هذا الاستعلام إما 3.5 أو سيطابق السجلات حيث لم تكن هناك قيمة لحقل حجم المحرك (بدون قيمة لا تهم الأمر، وتتناسب مع السيارة). ممتاز...

المشكلة: لقد جعلت مؤخرا حقول سمة المركبات حقول متعددة الشركات، لذلك يمكنني تخزين سماتها لكل جزء كقائمة. ثم قمت بطلب وجها لوجود ذلك، وعملت بشكل جيد. ومع ذلك، فقد جاءت المشكلة عندما قمت بتطبيق الاستعلام المذكور سابقا أعلاه. أثناء اختيار هذا الجوانب ضاقت عددا من المستندات المعروضة إلى المستندات فقط التي لها حجم المحرك، والسجلات (أستخدم أيضا سجل الكلمة لتوسيع الوثيقة) التي تحتوي على قيم فارغة (IE "") لمخالفها لم تظهر. نفس الاستعلام أعلاه لا يعمل من أجل جوانب متعددة الجنسيات بنفس الطريقة التي فعلها عندما كان هذا حقلا ذا قيمة واحدة.

مثال:

 <doc> 
  <str name="part">engine mount</str>
  <arr name="enginesize">
   <str/>
   <str/>
   <str>3.5</str>
   <str>3.5</str>
   <str>3.5</str>
   <str>3.5</str>
   <str>3.5</str>
  </arr>
 <doc>

<doc> 
  <str name="part">engine bolt</str>
  <arr name="enginesize">
   <str>6</str>
   <str>6</str>
   <str>6</str>
   <str>6</str>
   <str>6</str>
  </arr>
 <doc>

 <doc> 
  <str name="part">air filter</str>
  <arr name="enginesize">
   <str/>
   <str/>
   <str></str>
   <str></str>
   <str></str>
   <str></str>
   <str></str>
  </arr>
 <doc>

ما أبحث عنه هو الاستعلام الذي سيسحب المستندات 1 و 3 أعلاه عندما أفعل بحث جوانب لحجم المحرك لمدة 3.5. تتطابق المستند الأول (جبل المحرك)، لأنه يحتوي على القيمة في أحد الحقول متعددة الجنسيات "التي أبحث عنها (تحتوي على 3.5 في إحدى الحقول). ومع ذلك، لا يتم إرجاع المستند الثالث لمرشح الهواء بسبب الفارغة <str> القيم. لا أريد إرجاع المستند الثاني على الإطلاق لأنه لا يتطابق مع قيمة الوجه

أريد أساسا استعلام سيتطابق مع قيم السلسلة الفارغة من أجل جوانب معينة وتتناسب مع القيمة الفعلية أيضا، لذلك أحصل على كلا الوثيقتين.

هل لدى شخص ما استفسارا من شأنه أن يعود المستند 1 والوثيقة 3 (قوس المحرك وفلتر الهواء)، ولكن ليس مستند الترباس المحرك؟

جربت ما يلي دون نجاح (بما في ذلك واحد في الجزء العلوي جدا من هذا السؤال):

// returns everything
enginesize:"3.5"    OR  (enginesize:[* TO *] )
// only returns document 1
enginesize:"3.5"    OR  (enginesize:["" TO ""] AND -enginesize:"3.5")
// only returns document 1
enginesize:"3.5" OR (enginesize:"")

قمت باستيراد البيانات أعلاه باستخدام ملف CSV، قمت بتعيين الحقل keepEmpty=true. وبعد حاولت بدلا من ذلك إدخال مساحة يدويا في الحقل عندما قمت بإنشاء ملف CSV (الذي من شأنه أن أعطيك <str> </str>, ، بدلا من السابق، ثم أعاد استعلامات الاستعلامات. القيام بذلك، حصلت على النتائج التالية:

// returns document 1
enginesize:"3.5" OR enginesize:(*:* AND -enginesize:[* TO *])
// returns all documents
enginesize:"3.5"    OR  (enginesize:["" TO ""] AND -enginesize:"3.5")
// returns all documents
enginesize:"3.5" OR (enginesize:"")

هل لدى أي شخص استعلام من شأنه أن يعمل لأي من الموقف، سواء كان لدي مساحة كقيمة فارغة أو ببساطة أي قيمة على الإطلاق؟

هل كانت مفيدة؟

المحلول

ماذا عن تغيير كيفية فهرس، بدلا من كيفية الاستعلام؟

بدلا من محاولة فهرس "حجم المحرك لا يهم" كطرح فارغ، فهرسه ك "أي".

ثم يصبح الاستعلام الخاص بك ببساطة محركات: "3.5" أو (EngineSize: أي)

نصائح أخرى

لقد تلعب فقط مع هذا وجدت تَلمِيح يبدو أن تفعل الخدعة بالنسبة لي. ترجم إلى استفسارك يجب أن يكون:

enginesize:"3.5" OR (-enginesize:["" TO *])

HTH،

و انا


تحديث: بعد إجراء مزيد من الاختبار، لا أعتقد أن هذا يعمل بشكل موثوق - بالنسبة لبعض الفهارس، كان يجب أن يكون ذلك في الاتجاه الآخر وبدون علامة ناقص، أي enginesize:[* TO ""]. وبعد قد يعتمد ذلك على نوع الفهرس، إذا كانت متعددة القيمة أو حتى على القيم الفعلية.

في أي حال يبدو أنه الكثير من الاختراق. ربما سأحل على استبدال القيمة الفارغة مع علامة خاصة ...

كان لدي نفس المشكلة، ولكن حلها في https://stackoverflow.com/a/35633038/13365.:

enginesize:"3.5" OR (*:* NOT enginesize:["" TO *])

ال -enginesize الحل لم يعمل بالنسبة لي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top