13.2.3. Analyse
Le procédé
Analysis
, qui consiste à convertir un texte en termes uniques (mots), est considéré comme l'une des fonctionnalités les plus importantes d'un moteur de recherche en texte intégral. Lucene utilise le concept des Analyzer
s pour contrôler ce procédé. La section suivante décrit les différentes façons offertes par Hibernate Search pour configurer ces analyseurs.
13.2.3.1. Analyseur par défaut et analyseur par classe
La classe de l'analyseur par défaut utilisé pour indexer les champs segmentés peut être configurée à l'aide de la propriété
hibernate.search.analyzer
. La valeur par défaut pour cette propriété est org.apache.lucene.analysis.standard.StandardAnalyzer
.
Vous pouvez également définir la classe d'analyseur par entité, propriété et @Field (utile lorsque plusieurs champs sont indexés à partir d'une propriété unique).
Exemple 13.19. Les différentes façons d'utiliser @Analyzer
@Entity @Indexed @Analyzer(impl = EntityAnalyzer.class) public class MyEntity { @Id @GeneratedValue @DocumentId private Integer id; @Field private String name; @Field @Analyzer(impl = PropertyAnalyzer.class) private String summary; @Field( analyzer = @Analyzer(impl = FieldAnalyzer.class ) private String body; ... }
Dans cet exemple,
EntityAnalyzer
est utilisé pour indexer la propriété segmentée (name
), sauf summary
et body
qui sont indexés respectivement avec PropertyAnalyzer
et FieldAnalyzer
.
Avertissement
Il est généralement déconseillé de mélanger différents analyseurs dans la même entité car cela complique la génération de requête et rend les résultats moins prévisibles (pour les débutants), plus particulièrement si vous utilisez un QueryParser (qui utilise le même analyseur pour la requête entière). En général, pour tout champ donné, le même analyseur doit être utilisé pour l'indexation et la génération de requêtes.