2008-11-17 4 views
2

Je cherche à utiliser Lucene et/ou Solr pour fournir la recherche dans une application Web basée sur SGBDR. Malheureusement pour moi, toute la documentation que j'ai parcourue traite de la façon d'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 ce faire?Existe-t-il un ensemble de bonnes pratiques pour la construction d'un index Lucene à partir d'une base de données relationnelle?

Répondre

1

Nous déployons notre première application qui utilise 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 entités) ainsi que leurs relations. Une fois définie, une simple requête HTTP entraînera une importation de vos données.

Jetez un oeil à the Solr wiki page for DataImportHandler pour plus de détails.

2

Est-ce que plusieurs applications vont écrire dans la base de données? Si c'est le cas, c'est un peu compliqué; vous devez avoir un mécanisme pour identifier les nouveaux enregistrements à fournir à l'indexeur Lucene.

Un autre point à considérer est que 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 de quelle table provient l'enregistrement.

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

Il existe un projet OpenSymphony appelé Compass dont vous devez être conscient. Je suis resté loin de lui-même, principalement parce qu'il semble être plus compliqué que la recherche doit être. De plus, comme je peux le constater dans la documentation (j'avoue que je n'ai pas trouvé le temps nécessaire pour tout lire), il stocke les segments de Lucene comme des blobs dans la base de données. Si vous connaissez l'architecture Lucene, Compass implémente un répertoire Lucene au-dessus de la base de données. Je pense que c'est la mauvaise approche. Je tirerais 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.

2

Je n'ai pas exploré cela du tout, mais jetez un oeil à LuSql. L'utilisation de Solr serait également simple, mais il y aura quelques DRY -violations avec le schéma Solr.xml et votre schéma de base de données actuel. (Pour info, Solr prend en charge les caractères génériques, cependant.)

Questions connexes