9
votes

Lucene: Calcul du score avec une préfixe

J'ai un problème avec le calcul du score avec une préfixe. Pour modifier le score de chaque document, lors de l'ajout de document dans Index, j'ai utilisé SetBoost pour modifier le boost du document. Ensuite, je crée une préfixe pour rechercher, mais le résultat n'a pas été changé en fonction du boost. Il semble que Setboost ne fonctionne totalement pas pour une préfixe. Veuillez vérifier mon code ci-dessous:

 docid : 0 score : 1.0 common1
 docid : 1 score : 1.0 common2
 docid : 2 score : 1.0 common3


0 commentaires

3 Réponses :


2
votes

C'est le comportement attendu. Voici l'explication de la découpe Doug de Lucene Creator:

Une préfixe est équivalente à une requête contenant tous les termes correspondant à la préfixe, et cela contient donc généralement beaucoup de termes. Avec un tel grand requête, les documents correspondants sont susceptibles de contenir moins de termes de la requête et Le match est donc plus faible.

Lire Le message original où la citation tienne.

avec Lucene, il est généralement préférable d'utiliser le score uniquement comme une mesure relative de la pertinence dans un ensemble de documents. La valeur absolue du score changera en fonction de tant de facteurs qu'il ne doit pas être utilisé tel quel.

mise à jour
L'explication de la coupe fait référence à une version plus ancienne de Lucene. Ainsi, la réponse de Bajafresh4life est la bonne.


0 commentaires

11
votes

Par défaut, la préfixe réécrit la requête pour utiliser ConstantesCorequy, ce qui donne chaque document correspondant à un score de 1,0. Je pense que c'est de faire préfixe la préfixe plus rapide. Donc, vos boosts sont ignorés.

Si vous souhaitez que les boosts prennent effet dans votre préfixequery, vous devez appeler Setrewritemethod (), à l'aide de la constante Scoring_BoolerAn_Query_rewrite sur votre instance de requête préfixe. Voir http://lucène.apache.org/java/2_9_1/api/ Tout / index.html .

Pour débogage, vous pouvez utiliserecherger.Explain ().


1 commentaires

REMARQUE Ceci semble également appliquer lorsque vous utilisez SetBoost à un niveau de champ. I.E PrefixQuery semble ignorer les boosts sur le terrain, sauf si vous modifiez la réécheté comme décrit ici.



1
votes

Modification de la méthode de réécriture forte>

Bajafresh4Life Appel suggéré Setrewritemethod code>. Cependant, ce n'est pas la façon dont vous modifiez cela à Lucene.net. Voici comment le faire en C #: p>

Par défaut, chaque préfixequery code> est renvoyé par la méthode NewprefixQuery code> de QueryParser code> comme Ainsi: p> xxx pré>

Vous pouvez modifier ceci après instanciation de votre analyse d'analyseur à l'aide de la propriété SET CODE> de QueryParser.MulterMrewritemethod code>, comme Donc: P>

var parser = new QueryParser( Version.LUCENE_30, field, analyzer );
parser.MultiTermRewriteMethod = MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE;


0 commentaires