Red Hat Training
A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform
23.2.6. Réglage de l'indexation de Lucene
23.2.6.1. Optimiser la performance d'indexation de Lucene
Hibernate Search est utilisée pour optimiser les performances d'indexation Lucene en spécifiant un ensemble de paramètres qui sont passés à l'
IndexWriter
de Lucene sous-jacent, comme mergeFactor
, maxMergeDocs
et maxBufferedDocs
. Spécifiez ces paramètres soit en tant que valeurs par défaut pour tous les index, sur une base par index ou par partition.
Il existe plusieurs configurations d'
IndexWriter
de bas niveau qui peuvent être ajustées suivant les cas d'utilisation. Ces paramètres sont regroupés sous le mot clé indexwriter
:
hibernate.search.[default|<indexname>].indexwriter.<parameter_name>
S'il n'y a pas de valeur pour
indexwriter
de déterminée pour une configuration de partition, alors Hibernate Search regardera dans la section de l'index, puis dans la section par défaut.
La configuration dans la table suivante s'applique à la seconde partition de l'index
Animal
:
max_merge_docs
= 10merge_factor
= 20ram_buffer_size
= 64MBterm_index_interval
= Lucene default
Toutes les autres valeurs utiliseront les valeurs par défaut utilisées dans Lucene.
Les valeurs par défaut de Lucene sont les valeurs de configuration par défaut. Les valeurs listées dans Tableau 23.5, « Liste des propriétés de comportement et de performance d'indexation » dépendent de la version de Lucene utilisée. Les valeurs indiquées se rapportent à la version
2.4
. Pour plus d'informations sur la performance d'indexation de Lucène, voir la documentation de Lucene.
Note
Les versions précédentes d'Hibernate Search avaient la notion de propriété
batch
(lot) et de transaction
. Ce n'est plus le cas car le backend effectuera toujours les travaux avec les mêmes paramètres.
Tableau 23.5. Liste des propriétés de comportement et de performance d'indexation
Propriété | Description | Valeur par défaut |
---|---|---|
hibernate.search.[default|<indexname>].exclusive_index_use
|
Définir à
true quand aucun autre processus n'aura besoin d'écrire le même index. Cela permet à Hibernate Search de fonctionner en mode exclusif sur l'index et d'améliorer la performance quand on fait des modifications dans l'index.
| true (meilleure performance, débloque les verrous uniquement lors de la fermeture) |
hibernate.search.[default|<indexname>].max_queue_length
|
Chaque index a un « pipeline » séparé qui contient les mises à jour à appliquer à l'index. Quand cette file d'attente est pleine, ajouter des opérations supplémentaires à la file d'attente se traduit en opération de blocage. Cette configuration de paramètre n'est pas très logique à moins que
worker.execution soit configuré à async .
| 1000 |
hibernate.search.[default|<indexname>].indexwriter.max_buffered_delete_terms
|
Détermine le nombre minimum de d'expressions à supprimer avant que les expressions à supprimer en mémoire tampon s'appliquent et soient vidées. S'il y a des documents en mémoire tampon à ce moment là, ils sont fusionnés et un nouveau segment est créé.
| Désactivé (vidages par utilisation RAM) |
hibernate.search.[default|<indexname>].indexwriter.max_buffered_docs
|
Contrôle le nombre de documents présents en mémoire tampon lors de l'indexation. Plus il y en a, plus il y a de RAM utilisée.
| Désactivé (vidages par utilisation RAM) |
hibernate.search.[default|<indexname>].indexwriter.max_merge_docs
|
Définit le nombre maximum de documents autorisés par segment. Les petites valeurs fonctionnent mieux sur les indexes changeant fréquemment; les valeurs plus élevées permettent une meilleure performance de recherche si l'index ne change pas trop souvent.
| Illimité (Integer.MAX_VALUE) |
hibernate.search.[default|<indexname>].indexwriter.merge_factor
|
Contrôle la taille et la fréquence des fusions de segments.
Détermine le nombre de fois que les indexes de segments sont fusionnés quand un insertion a lieu. Pour les petites valeurs, on utilise moins de RAM lors de l'indexation, et les recherches sur indexes non optimisés sont plus rapides, mais la vitesse d'indexation est lente. Ainsi, les valeurs plus elevées, (> 10) sont plus appropriées pour la création d'index de lots, et les plus petites valeurs (< 10) sont plus appropriées pour les indexes maintenus de façon interactive. La valeur doit être inférieure à 2.
| 10 |
hibernate.search.[default|<indexname>].indexwriter.merge_min_size
|
Contrôle la taille et la fréquence des fusions de segments.
Les segments inférieurs à cette taille (en Mo) sont toujours pris en compte pour la prochaine opération de fusionnement de segments.
Si vous configurez une taille trop elevée, vous obtiendrez d'énormes opérations de fusionnement, même si elles sont moins fréquentes.
Voir également
org.apache.lucene.index.LogDocMergePolicy . minMergeSize .
| 0 Mo (en réalité ~1K) |
hibernate.search.[default|<indexname>].indexwriter.merge_max_size
|
Contrôle la taille et la fréquence des fusions de segments.
Les segments inférieures à cette taille (en Mo) ne sont jamais fusionnés en segments plus importants.
Cela fait des économies de mémoire et évite les opérations de fusionnement qui ont lieu aux dépends d'une vitesse optimale de recherche. Quand on optimise un index, cette valeur est ignorée.
Voir également
org.apache.lucene.index.LogDocMergePolicy . maxMergeSize .
| Illimité |
hibernate.search.[default|<indexname>].indexwriter.merge_max_optimize_size
|
Contrôle la taille et la fréquence des fusions de segments.
Les segments supérieurs en taille à ceci (en Mo) ne sont pas fusionnés en segments plus importants même quand on optimise l'index (voir la configuration
merge_max_size également).
S'appliquant à
org.apache.lucene.index.LogDocMergePolicy . maxMergeSizeForOptimize .
| Illimité |
hibernate.search.[default|<indexname>].indexwriter.merge_calibrate_by_deletes
|
Contrôle la taille et la fréquence des fusions de segments.
Définir à
false afin de ne pas considérer les documents supprimés quand on estime la stratégie de fusionnement.
S'appliquant à
org.apache.lucene.index.LogMergePolicy . calibrateSizeByDeletes .
| true |
hibernate.search.[default|<indexname>].indexwriter.ram_buffer_size
|
Contrôle le montant de RAM en Mo qui est utilisé pour les tampons de docments. Quand ils sont utilisés avec max_buffered_docs, on assiste à un vidage, selon qu'un événement a lieu avant l'autre.
Normalement, pour augmenter la performance d'indexation, il vaut mieux vider par l'utilisation RAM et non pas le nombre de documents, et utiliser le plus grand tampon RAM possible.
| 16 Mo |
hibernate.search.[default|<indexname>].indexwriter.term_index_interval
|
Expert : définir l'intervalle entre les expressions indexées.
Avec les valeurs élevées, IndexReader utilise moins de mémoire, mais l'accès au hasard aux termes est plus lent. Avec les valeurs moins élevées, IndexReader utilise plus de mémoire, et la vitesse d'accès aux termes est plus élevée. Voir la documentation Lucene pour obtenir plus d'informations.
| 128 |
hibernate.search.[default|<indexname>].indexwriter.use_compound_file
| L'avantage d'utiliser un format de ficher composite, c'est qu'il y a moins de descripteurs de fichiers utilisés. L'inconvénient, c'est que l'indexation prend plus de temps et d'espace de disque temporaire. Vous pouvez définir ce paramètre à false en vue d'améliorer le temps d'indexation, mais vous pourriez manquer de descripteurs de fichiers si mergeFactor est trop élevé.
Pour le paramètres booléens, utiliser "
true " ou "false ". La valeur par défaut pour cette option est true .
| true |
hibernate.search.enable_dirty_check
|
Tous les changements d'entité ne nécessitent pas une mise à jour d'index Lucene. Si toutes les propriétés d'entité mises à jour (propriétés dirty) ne sont pas indexées, Hibernate Search évitera le processus de ré-indexation.
Désactiver cette option si vous personnalisez des
FieldBridge qui ont besoin d'être évoqués à chaque mise à jour d'événement (même si la propriété pour laquelle le pontage de champ est configuré n'a pas changé).
Cette optimisation ne sera plas utilisée sur les classes qui utilisent un
@ClassBridge ou un @DynamicBoost .
Pour le paramètres booléens, utiliser "
true " ou "false ". La valeur par défaut pour cette option est true .
| true |
Avertissement
Le back end
blackhole
n'est pas conçu pour être utilisé en production, sauf en tant qu'outil pour identifier les étranglements d'indexation.