Existe-t-il un ensemble de bonnes pratiques pour créer un index Lucene à partir d'une base de données relationnelle?

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

  •  08-07-2019
  •  | 
  •  

Question

Je cherche à utiliser Lucene et / ou Solr pour permettre la recherche dans une application Web reposant sur un SGBDR. Malheureusement pour moi, toute la documentation que j'ai parcourue explique comment extraire les données de l'index; Je suis plus préoccupé par la façon de construire un index utile. Existe-t-il des "meilleures pratiques"? pour faire cela?

Était-ce utile?

La solution

Nous lançons notre première application utilisant Solr ce soir. Avec Solr 1.3, ils ont inclus DataImportHandler qui vous permet de spécifier vos tables de base de données (ils les appellent des entités) avec leurs relations. Une fois définie, une simple requête HTTP déclenchera une importation de vos données.

Jetez un coup d’œil à la la page de wiki Solr pour DataImportHandler pour détails.

Autres conseils

Est-ce que plusieurs applications vont écrire dans la base de données? Si c'est le cas, c'est un peu délicat. vous devez disposer d’un mécanisme permettant d’identifier de nouveaux enregistrements pour alimenter l’indexeur Lucene.

Un autre point à considérer est de savoir si vous voulez un index qui couvre toutes vos tables, ou un index par table. En général, je recommande un index, avec un champ dans cet index pour indiquer la table d'où provient l'enregistrement.

Hibernate prend en charge la recherche en texte intégral, si vous vouloir rechercher des objets persistants plutôt que des documents non structurés.

Il existe un projet OpenSymphony appelé Compass dont vous devez être au courant. Je me suis abstenu moi-même, principalement parce que cela semble être beaucoup plus compliqué que la recherche ne doit l'être. De plus, comme je peux le constater grâce à la documentation (j'avoue que je n'ai pas trouvé le temps de tout lire), il stocke les segments de Lucene sous forme de blobs dans la base de données. Si vous connaissez l'architecture Lucene, Compass implémente un annuaire Lucene en plus de la base de données. Je pense que c'est la mauvaise approche. Je voudrais tirer parti de la prise en charge intégrée de la base de données pour l'indexation et implémenter un IndexReader Lucene à la place. La même critique s’applique aux implémentations de cache distribué, etc.

Je n'ai pas du tout exploré cela, mais jetez un oeil à LuSql .

L'utilisation de Solr serait également simple, mais un DRY - violations avec le schema.xml Solr et votre schéma de base de données réelle. (Pour info, Solr supporte les caractères génériques, cependant.)

En guise d'introduction:

Brian McCallister a écrit un beau blog: Utilisation de Lucene avec OJB .

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