Red Hat Training
A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform
13.5. Optimisation de l'index
L'index Lucene doit parfois être optimisé. Le procédé consiste essentiellement en une défragmentation. Jusqu'au déclenchement d'une optimisation, Lucene marque les documents supprimés comme tels, aucune action physique n'est appliquée. Au cours du procédé d'optimisation, les suppressions seront appliquées, ce qui affecte également le nombre de fichiers dans le répertoire Lucene.
L'optimisation de l'index Lucene accélère les recherches mais n'a aucun effet sur la performance (de la mise à jour) de l'indexation. Lors d'une optimisation, des recherches peuvent être effectuées, mais elle seront probablement ralenties. Toutes les mises à jour d'index seront arrêtées. Il est recommandé de programmer l'optimisation :
- Sur un système inactif ou lorsque les recherches sont les moins fréquentes.
- Après qu'un grand nombre de modifications d'index ont été appliquées.
Un
MassIndexer
(cf. Section 13.4.3.2, « Utilisation d'un MassIndexer ») optimisera les index par défaut au début et à la fin du processus. Vous pouvez changer ce comportement en utilisant respectivement MassIndexer
.optimizeAfterPurge
et MassIndexer
.optimizeOnFinish
.
MassIndexer
(cf. Section 13.4.3.2, « Utilisation d'un MassIndexer ») optimise les index par défaut au début et à la fin du processus. Utilisez MassIndexer
.optimizeAfterPurge
et MassIndexer
.optimizeOnFinish
pour changer ce comportement par défaut.
13.5.1. Optimisation automatique
Hibernate Search peuit optimiser automatiquement un index après soit :
- un certain nombre d'opérations (insertions et suppressions), ou
- un certain nombre de transactions.
La configuration de l'optimisation d'index automatique peut être défini globalement ou par index :
Exemple 13.62. Définition des paramètres d'optimisation automatique
hibernate.search.default.optimizer.operation_limit.max = 1000 hibernate.search.default.optimizer.transaction_limit.max = 100 hibernate.search.Animal.optimizer.transaction_limit.max = 50
Une optimisation se mettra en route sur l'index
Animal
dès que :
- le nombre d'additions et suppressions atteint les
1000
. - le nombre de transactions atteint les
50
(hibernate.search.Animal.optimizer.transaction_limit.max
a la priorité surhibernate.search.default.optimizer.transaction_limit.max
)
Si aucun de ces paramètres n'est défini, aucune optimisation ne sera traitée automatiquement.
L'implémentation par défaut de OptimizerStrategy peut être remplacée par
org.hibernate.search.store.optimization.OptimizerStrategy
et en déterminant la propriété optimizer.implementation
avec le nom complet de votre implémentation. Cette implémentation doit mettre en place l'interface, être une classe publique et avoir un constructeur public ne prenant aucun argument.
Exemple 13.63. Chargement d'un OptimizerStrategy personnalisé
hibernate.search.default.optimizer.implementation = com.acme.worlddomination.SmartOptimizer hibernate.search.default.optimizer.SomeOption = CustomConfigurationValue hibernate.search.humans.optimizer.implementation = default
Le mot clé
default
peut être utilisé pour sélectionner l'implémentation d'Hibernate Search par défaut ; toutes les propriétés après le séparateur de clé .optimizer
seront transférées vers la méthode initialize
de la mise en œuvre au démarrage.