Frage

Ich möchte die Suchergebnisse, um nach Punkten, die sie tun, aber die Punktzahl berechnet falsch wird. Das heißt, nicht unbedingt falsch , aber anders als erwartet, und ich bin mir nicht sicher, warum. Mein Ziel ist es zu entfernen, was die Partitur ändert.

Wenn ich eine Suche, dass Streichhölzer auf zwei Objekte (wo ObjectA erwartet wird, eine höhere Punktzahl als ObjectB haben), werden ObjectB zuerst zurückgegeben werden.

Lassen Sie sich sagt, in diesem Beispiel, dass meine Abfrage ist ein einziger Begriff. „Äpfel“

  

ObjectA Titel: "Äpfel sind Äpfel" (2/3 Begriffe)
  ObjectA Beschreibung: „Es waren Äpfel in die Äpfel-Äpfel und jetzt die Äpfel gingen alle Äpfel alle über die Äpfel!“ (18.6 Begriffe)
  ObjectB Titel: „Äpfel sind groß“ (1/3 Begriffe)
  ObjectB Beschreibung: „Es waren Äpfel in den Äpfeln Raum und jetzt die Äpfel ging alles schlecht alles über die Äpfel!“ (18.4 Begriffe)

Das Titelfeld hat keine Verstärkung (oder besser gesagt, eine Steigerung von 1) und das Beschreibungsfeld hat einen Schub von 0,8. Ich habe kein Dokument Auftrieb durch solrconfig.xml oder durch die Abfrage angegeben, dass ich die Durchreise. Wenn es eine andere Möglichkeit, ein Dokument Auftrieb zu geben ist, besteht die Chance, dass ich eine bin fehlt.

Nach dem explain Ausdruck zu analysieren, es sieht aus wie ObjectA ist richtig eine höhere Punktzahl als ObjectB Berechnung, wie ich will, mit Ausnahme von ein Unterschied: ObjectB Titel fieldNorm ist immer höher als ObjectA Jahre.


Hier folgt die explain Ausdruck. Nur damit Sie wissen: das Titelfeld ist mditem5_tns und das Beschreibungsfeld ist 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
War es hilfreich?

Lösung

Das Problem wird durch die stemmer verursacht. Es erweitert „Äpfel sind Äpfel“ auf „Äpfel Appl sind Äpfel; APPL“ damit das Feld länger zu machen. Als Dokument B enthält nur 1 Begriff, der durch die stemmer des Feld Aufenthalte kürzer als Dokument A erweitert wird.

Dies führt zu unterschiedlichen fieldNorms.

Andere Tipps

FieldNOrm berechnet aus 3 Komponenten - Index-Zeit-Boost auf dem Feld, Index-Zeit-Boost auf dem Dokument und die Feldlänge. Unter der Annahme, dass Sie keinen Index-Zeit Schub liefern, muss die Differenzfeldlänge sein.

Da somit lengthNorm höher für kürzeren Feldwerte ist, für B einen höheren fieldNorm Wert für den Titel zu haben, ist es kleinere Anzahl von Jetons im Titel als A hat.

Auf den folgenden Seiten für eine detaillierte Erklärung von Lucene scoring:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top