13.6.5. Personnalisation de la formule de notation de Lucene
La personnalisation de la formule de notation de Lucene permet à l'utilisateur de personnaliser sa formule de notation en prolongeant
org.apache.lucene.search.Similarity
. Les méthodes d'abstraction définies dans cette classe correspondent aux facteurs de la formule suivante en calculant la note de la requête q d'un document d :
score(q,d) = coord(q,d) · queryNorm(q) · ∑ t in q ( tf(t in d) · idf(t) 2 · t.getBoost() · norm(t,d) )
Facteur | Description |
---|---|
tf(t ind) | Facteur de fréquence de terme pour le terme (t) du document (d). |
idf(t) | Inverse la fréquence du document du terme. |
coord(q,d) | Facteur de score basé sur le nombre de termes de requêtes trouvés dans un document spécifique. |
queryNorm(q) | Facteur de normalisation utilisé pour noter des requêtes comparables. |
t.getBoost() | Boost de champ. |
norm(t,d) | Contient quelques boosts (de temps d'indexation) et facteurs de longueur. |
Ce manuel n'explique pas cette formule en détails. Veuillez consulter les Javadocs de
Similarity
pour plus d'informations.
Hibernate Search permet de modifier la calculation de similarité de Lucene de trois manières différentes.
Vous pouvez tout d'abord définir la similarité par défaut en spécifiant le nom entier de la classe de l,implémentation de votre
Similarity
en utilisant la propriété hibernate.search.similarity
. La valeur par défaut est org.apache.lucene.search.DefaultSimilarity
.
Vous pouvez également remplacer la similarité utilisée pour un index spécifique en définissant la propriété
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
similarity
.
hibernate.search.default.similarity = my.custom.Similarity
hibernate.search.default.similarity = my.custom.Similarity
Pour finir, vous pouvez remplacer la similarité par défaut au niveau de la classe à l'aide de l'annotation
@Similarity
.
@Entity @Indexed @Similarity(impl = DummySimilarity.class) public class Book { ... }
@Entity
@Indexed
@Similarity(impl = DummySimilarity.class)
public class Book {
...
}
Partons par exemple du principe que le nombre de fois où un terme apparaît dans un document n'est pas important. Les documents où un terme n'apparaît qu'une fois doivent recevoir la même notation que les documents où un terme apparaît plusieurs fois. Dans ce cas-là, le résultat de votre implémentation personnalisée de la méthode
tf(float freq)
devrait être 1.0.
Avertissement
Lorsque deux entités partagent le même index, elles doivent déclarer la même mise en œuvre de
Similarity
. Les classes dans la même hiérarchie de classe partagent toujours le même index, il n'est donc pas autorisé de remplacer l'implémentation de Similarity
dans un sous-type.
Il serait par ailleurs insensé de définir cette similarité par la configuration d'index et la configuration de niveau de classe car cela créearit un conflit. Une telle configuration sera rejetée.