Mon index lucene contient des documents avec le champ "itemName". Ce champ est renforcé avec un facteur d'amplification entre 0 et 1. Lorsque je crée un BooleanQuery je voudrais que les résultats sont classés par le nombre de clauses correspondants et la boostfactor, de sorte que la formule ressemble à:Comment implémenter le classement des résultats de recherche personnalisé?
score = (count_of_matching_clauses/count_of_total_clauses + boost_factor)/2
Le score serait toujours un flottant entre 0 et 1. 1 dans le cas où toutes les clauses correspondent et le facteur de surpuissance est 1.
Par exemple, si la valeur de champ de "itemName" pour trois documents sans facteur d'amplification est:
document1: "java is an island"
document2: "the secret of monkey island"
document3: "java island adventures"
et le Boo leanQuery ressemblerait à ceci:
TermQuery query1 = new TermQuery(new Term("name","java"));
TermQuery query2 = new TermQuery(new Term("name","island"));
BooleanQuery query = new BooleanQuery();
query.add(query1, BooleanClause.Occur.SHOULD);
query.add(query2, BooleanClause.Occur.SHOULD);
que document1 serait récupéré avec un score de (2/2 +0)/2 = 0,5 parce que: count_of_matching_clauses = 2 et count_of_total_clauses = 2
document2 seraient récupéré avec un score de (1/2 + 0)/2 = 0,25 parce que: count_of_matching_clauses = 1 et count_of_total_clauses = 2
que document3 serait récupéré avec un score de (2/2 0)/2 = 0.5 parce que: count_of_match ing_clauses = 2 et count_of_total_clauses = 2
Comment implémenter ce mécanisme de classement dans lucene? Comment puis-je dire à lucene d'utiliser ma classe de classement personnalisée pour classer les résultats?
Non, ce n'est pas la notation par défaut. Il est lié au facteur coord(), mais tf() et idf() peuvent changer non seulement les scores mais aussi l'ordre. Le reste de votre réponse est bien - en particulier la partie explain(). –
Eh bien, votre réponse est bonne, il y a un risque qu'un document obtienne un score plus élevé avec une seule requête en raison du score tf-idf élevé que les autres documents avec les deux requêtes trouvées. Mais, de façon anecdotique, j'ai vu que plus la requête correspond, plus le score est élevé avec DefaultSimilarity. –
Est-ce que changer la classe de similarité change aussi la notation ou seulement les composants de la formule de classement standard? – tommyL