SOLR: Fieldnorm مختلف لكل مستند ، مع عدم وجود مستند دفعة

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

سؤال

أريد أن تطلب نتائج البحث الخاصة بي من النتيجة ، وهو ما يفعلونه ، ولكن يتم حساب النتيجة بشكل غير صحيح. هذا يعني ، وليس بالضرورة بشكل غير صحيح, ولكن بشكل مختلف عن المتوقع ولست متأكدًا من السبب. هدفي هو إزالة كل ما يغير النتيجة.

إذا قمت بإجراء بحث يتطابق مع كائنين (حيث من المتوقع أن يكون لدى Objecta درجة أعلى من ObjectB) ، يتم إرجاع ObjectB أولاً.

دعنا نقول ، على سبيل المثال ، أن استعلامي هو مصطلح واحد: "التفاح".

عنوان Objecta: "التفاح هي التفاح" (شروط 2/3)
وصف Objecta: "كان هناك تفاح في التفاح والآن ذهب التفاح جميع التفاح في جميع أنحاء التفاح!" (6/18 شروط)
عنوان ObjectB: "التفاح رائع" (1/3 شروط)
وصف ObjectB: "كان هناك تفاح في غرفة التفاح والآن أصبح التفاح سيئًا في جميع أنحاء التفاح!" (4/18 شروط)

لا يحتوي حقل العنوان على دفعة (أو بالأحرى ، دفعة 1) وحقل الوصف لديه دفعة 0.8. لم أحدد دفعة مستند من خلال solrconfig.xml أو من خلال الاستعلام الذي أعمره. إذا كانت هناك طريقة أخرى لتحديد دفعة المستند ، فهناك فرصة لتفتقدها.

بعد تحليل explain النسخة المطبوعة ، يبدو مثل Objecta هو حساب درجة أعلى بشكل صحيح من الكائن ، تمامًا كما أريد ، باستثناء واحد الفرق: عنوان العنوان الكائنات هو دائمًا أعلى من Objecta.


هنا يتبع explain اطبع. فقط حتى تعرف: حقل العنوان هو mditem5_tns وحقل الوصف هو mditem7_tns:

ObjectB:
1.3327172 = (MATCH) sum of:
  1.0352166 = (MATCH) max plus 0.1 times others of:
    0.9766194 = (MATCH) weight(mditem5_tns:appl in 0), product of:
      0.53929156 = queryWeight(mditem5_tns:appl), product of:
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.2977981 = queryNorm
      1.8109303 = (MATCH) fieldWeight(mditem5_tns:appl in 0), product of:
        1.0 = tf(termFreq(mditem5_tns:appl)=1)
        1.8109303 = idf(docFreq=3, maxDocs=9)
        1.0 = fieldNorm(field=mditem5_tns, doc=0)
    0.58597165 = (MATCH) weight(mditem7_tns:appl^0.8 in 0), product of:
      0.43143326 = queryWeight(mditem7_tns:appl^0.8), product of:
        0.8 = boost
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.2977981 = queryNorm
      1.3581977 = (MATCH) fieldWeight(mditem7_tns:appl in 0), product of:
        2.0 = tf(termFreq(mditem7_tns:appl)=4)
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.375 = fieldNorm(field=mditem7_tns, doc=0)
  0.2975006 = (MATCH) FunctionQuery(1000.0/(1.0*float(top(rord(lastmodified)))+1000.0)), product of:
    0.999001 = 1000.0/(1.0*float(1)+1000.0)
    1.0 = boost
    0.2977981 = queryNorm

ObjectA:
1.2324848 = (MATCH) sum of:
  0.93498427 = (MATCH) max plus 0.1 times others of:
    0.8632177 = (MATCH) weight(mditem5_tns:appl in 0), product of:
      0.53929156 = queryWeight(mditem5_tns:appl), product of:
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.2977981 = queryNorm
      1.6006513 = (MATCH) fieldWeight(mditem5_tns:appl in 0), product of:
        1.4142135 = tf(termFreq(mditem5_tns:appl)=2)
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.625 = fieldNorm(field=mditem5_tns, doc=0)
    0.7176658 = (MATCH) weight(mditem7_tns:appl^0.8 in 0), product of:
      0.43143326 = queryWeight(mditem7_tns:appl^0.8), product of:
        0.8 = boost
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.2977981 = queryNorm
      1.6634457 = (MATCH) fieldWeight(mditem7_tns:appl in 0), product of:
        2.4494898 = tf(termFreq(mditem7_tns:appl)=6)
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.375 = fieldNorm(field=mditem7_tns, doc=0)
  0.2975006 = (MATCH) FunctionQuery(1000.0/(1.0*float(top(rord(lastmodified)))+1000.0)), product of:
    0.999001 = 1000.0/(1.0*float(1)+1000.0)
    1.0 = boost
    0.2977981 = queryNorm
هل كانت مفيدة؟

المحلول

المشكلة ناتجة عن الجذور. يوسع "التفاح هي التفاح" إلى "Apples Appl ase Apples Appl" مما يجعل الحقل أطول. نظرًا لأن المستند B يحتوي فقط على مصطلح واحد يتم توسيعه بواسطة STEMMER ، يبقى الحقل أقصر ثم الوثيقة A.

وهذا يؤدي إلى العديد من الأثرات الميدانية.

نصائح أخرى

يتم حساب FieldNorm من 3 مكونات-دفعة وقت الفهرس في الحقل ، دفعة وقت الفهرس على المستند وطول الحقل. على افتراض أنك لا تقوم بتزويد أي دفعة في وقت الفهرس ، يجب أن يكون الفرق طول الحقل.

وبالتالي ، نظرًا لأن الطول أعلى بالنسبة لقيم المجال الأقصر ، لكي يكون لـ B قيمة ميدانية أعلى للعنوان ، يجب أن يكون لها عدد أقل من الرموز في العنوان من A.

راجع الصفحات التالية للحصول على شرح مفصل لتسجيل Lucene:

http://lucene.apache.org/java/2_4_0/scoring.html http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/similarity.html

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