2009-07-20 8 views
0

Je suis en train de construire un site web pour l'apprentissage et je regarde lucene.net comme un indexeur de texte intégral pour mon contenu mais j'ai quelques questions. Disons que j'ai une hiérarchie (n niveaux) de catégories, et des articles qui sont assignés à une catégorie (1 cat -> n articles). L'utilisation d'un RDB simple serait très facile de rechercher un article dans une catégorie ou dans l'une de ses sous-catégories. Mais je me bats à imaginez comment je construirais ce genre de requête en utilisant lucene. Options je pense que cela pourrait fonctionner:Débutant à Lucene.net, meilleure approche pour les requêtes complexes?

Soumettre que je suis idexing "titre, texte, catégorie" pour chaque article, une option serait d'obtenir d'abord une liste avec les ID de chaque sous-catégorie de la DB, puis rechercher en lucene avec cette liste.

Une autre option serait d'indexer toute la catégorie "chemin" de l'article dans un champ de lucene. Quelque chose comme "titre", "texte", "catparent1, catparent2, catparent3, catégorie"?

Quelle est la meilleure approche pour faire ce genre de requête avec des filtres relationnels complexes? (Pas seulement du texte recherche)

Répondre

4

Ajouter le chemin de la catégorie comme un champ indexé, et utiliser une recherche de phrase pour le rechercher:

ID  Title    Categories 

"MyDoc1", "Hello world!", "/programming/beginner/samples" 
"MyDoc2", "Prove that P=NP", "/programming/advanced/samples" 

Maintenant, vous pouvez interroger les catégories soit en utilisant hiérarchisés une recherche d'expression:

"/programming/beginner" 

ou non-hiérarchisés en utilisant une recherche de mots:

"samples" 

J'utilise cette rencontre Hod pour l'indexation des fichiers avec leurs chemins d'accès - vous pouvez demander "dirname" ou "parent/child" ou "/root/parent/child" et tout cela fonctionne bien.

Vous pouvez contrôler si votre recherche commence à la racine en incluant ou en excluant la barre oblique. En termes de "filtres relationnels complexes", vous pouvez combiner ces recherches de catégorie avec d'autres recherches et filtres en utilisant des requêtes booléennes.

Questions connexes