Stratégies pour maintenir un index Lucene à jour avec les modifications du modèle de domaine

StackOverflow https://stackoverflow.com/questions/38125

  •  09-06-2019
  •  | 
  •  

Question

Je cherchais à inciter les gens à réfléchir à la nécessité de maintenir à jour un index Lucene à mesure que des modifications sont apportées aux objets de modèle de domaine d'une application.

L'application en question est une application Web basée sur Java/J2EE qui utilise Hibernate.La façon dont les choses fonctionnent actuellement est que les objets de modèle 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 effectuée impliquant un tel objet, je l'envoie via la 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 qui a été fourni.

Mes principales inquiétudes à propos de ce schéma sont de savoir si le MDB prend du retard 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 soit pour une période de temps donnée, soit pour une longue période.

Au fond, je me demandais simplement quel genre de stratégies d’autres avaient mis au point pour ce genre de choses.Je ne cherche pas nécessairement une bonne réponse, mais j'imagine une liste d'idées de type « tableau blanc » pour amener mon cerveau à réfléchir à des alternatives.

Était-ce utile?

La solution

Changez le message :fournissez simplement 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 postérieure au champ "mis à jour" de l'index.De cette façon, vous ne pouvez pas prendre de retard car vous récupérez toujours les paires clé/valeur actuelles en premier.

Comme alternative:jettes un coup d'oeil à http://www.compass-project.org.

Autres conseils

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

Le projet Compass n'est plus maintenu depuis longtemps, son développeur principal étant passé à la création de l'excellent Elasticsearch.

La réponse moderne à cette question est d'utiliser Recherche en veille prolongée, qui peut d'ailleurs être mappé directement à un index Lucene ou via Elasticsearch.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top