Je teste opérateur coup de pouce dans Lucene et a trouvé un comportement étrangePourquoi la requête boostée par lucene a un score inférieur à la même requête normale?
Exemple
- query1 =
"red fox"
- query2 =
"red^1.2 fox"
Lorsque je teste des requêtes sur le texte:
"merveilleux renard roux"
J'ai reçu un score inférieur à query1 pour query2. Mais je pense que query2 devrait gagner.
Ci-dessous des explications pour les requêtes
expliquiez query1
{0,4339554 = (MATCH) sum of:
0,2169777 = (MATCH) weight(content:fox in 0), product of:
0,7071068 = queryWeight(content:fox), product of:
0,3068528 = idf(docFreq=1, maxDocs=1)
2,304384 = queryNorm
0,3068528 = (MATCH) fieldWeight(content:fox in 0), product of:
1 = tf(termFreq(content:fox)=1)
0,3068528 = idf(docFreq=1, maxDocs=1)
1 = fieldNorm(field=content, doc=0)
0,2169777 = (MATCH) weight(content:red in 0), product of:
0,7071068 = queryWeight(content:red), product of:
0,3068528 = idf(docFreq=1, maxDocs=1)
2,304384 = queryNorm
0,3068528 = (MATCH) fieldWeight(content:red in 0), product of:
1 = tf(termFreq(content:red)=1)
0,3068528 = idf(docFreq=1, maxDocs=1)
1 = fieldNorm(field=content, doc=0)
}
expliquiez query2
{0,4313012 = (MATCH) sum of:
0,2396118 = (MATCH) weight(content:fox^1.25 in 0), product of:
0,7808688 = queryWeight(content:fox^1.25), product of:
1,25 = boost
0,3068528 = idf(docFreq=1, maxDocs=1)
2,035813 = queryNorm
0,3068528 = (MATCH) fieldWeight(content:fox in 0), product of:
1 = tf(termFreq(content:fox)=1)
0,3068528 = idf(docFreq=1, maxDocs=1)
1 = fieldNorm(field=content, doc=0)
0,1916894 = (MATCH) weight(content:red in 0), product of:
0,6246951 = queryWeight(content:red), product of:
0,3068528 = idf(docFreq=1, maxDocs=1)
2,035813 = queryNorm
0,3068528 = (MATCH) fieldWeight(content:red in 0), product of:
1 = tf(termFreq(content:red)=1)
0,3068528 = idf(docFreq=1, maxDocs=1)
1 = fieldNorm(field=content, doc=0)
}
Je me demande pourquoi la requête a score inférieur a stimulé les d'une normale?
Alors, comment pourrais-je obtenir le comportement souhaité. J'ai besoin que 'query2' soit un gagnant (le score' query2' devrait être supérieur à 'query1'). J'ai surchargé la méthode 'DefaultSimilarity.QueryNorm' pour toujours retourner' 1.0' pour ignorer la norme de requête. Cela fait-il du sens? – user854301
@ user854301 - Bien sûr, cela désactivera efficacement le queryNorm, mais ce que vous essayez d'accomplir en les comparant est presque certainement une mauvaise idée. Les scores ne sont pas significatifs lorsqu'ils sont sortis du contexte de la requête. Je vous recommande fortement de repenser tout ce que vous essayez de faire. Voir: [Scores as Percentages] (https://wiki.apache.org/lucene-java/ScoresAsPercentages). – femtoRgon