2008-09-01 8 views
6

Cherchait à amener les gens à réfléchir à la mise à jour d'un index Lucene à mesure que des modifications sont apportées aux objets du modèle de domaine d'une application.Stratégies pour maintenir un index Lucene à jour avec les modifications du modèle de domaine

L'application en question est une application Web basée sur Java/J2EE qui utilise Hibernate. La façon dont je travaille actuellement est que les objets modèles mappés Hibernate implémentent tous une interface "indexable" commune qui peut renvoyer un ensemble de paires clé/valeur enregistrées dans Lucene. Chaque fois qu'une opération CRUD est exécutée impliquant un tel objet je l'envoie via une file d'attente JMS dans un bean géré par message qui enregistre dans Lucene la clé primaire de l'objet et les paires clé/valeur renvoyées par la méthode index() de l'objet Indexable à condition de. Mes principales inquiétudes à propos de ce schéma sont si le MDB est derrière et ne peut pas suivre les opérations d'indexation qui arrivent ou si une sorte d'erreur/exception empêche un objet d'être indexé. Le résultat est un index obsolète pour un tri ou une longue période de temps. Fondamentalement, je me demandais simplement quel type de stratégies d'autres avaient mis au point pour ce genre de chose. Pas nécessairement à la recherche d'une réponse correcte, mais j'imagine une liste d'idées «tableau blanc» pour que mon cerveau pense à des alternatives.

Répondre

4

Modifier le message: il suffit de fournir la clé primaire et la date actuelle, pas les paires clé/valeur. Votre mdb récupère l'entité par clé primaire et appelle index(). Après l'indexation, vous définissez une valeur "mise à jour" dans votre index à la date du message. Vous mettez à jour votre index uniquement si la date du message est après le champ "mis à jour" de l'index. De cette façon, vous ne pouvez pas rester en arrière car vous récupérez toujours les paires clé/valeur en cours. En alternative: regardez http://www.compass-project.org.

0

La réponse acceptée est 8 ans maintenant et très obsolète.

Le Projet Compass n'est plus maintenu depuis longtemps, car son développeur principal a continué à créer l'excellent Elasticsearch.

La réponse moderne à ceci est d'utiliser Hibernate Search, qui peut d'ailleurs être mappé directement à un index Lucene ou à Elasticsearch.

Questions connexes