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é sur hibernate.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.