2010-03-01 6 views
0

J'ai un système de type StackOverflow où le contenu est organisé en threads, chaque thread ayant son propre contenu (le corps/le texte de la question) et les posts/réponses . Je produis la possibilité de rechercher ce contenu via Lucene, et si possible, j'ai décidé que je voudrais indexer des messages individuels, (cela rend l'index plus facile à mettre à jour, et signifie que j'ai plus de contrôle et de capacité à modifier les résultats), plutôt que d'indexer des threads entiers. Le problème que j'ai cependant est que je veux que la recherche affiche une liste de discussions, plutôt qu'une liste de publications.Obtenir lucene pour renvoyer uniquement des threads uniques (indexation des threads et des messages)

Comment puis-je faire en sorte que Lucene renvoie uniquement des threads uniques en tant que résultats, tout en recherchant le contenu des messages?

Répondre

1

Chaque document peut avoir un champ "threadId". Après avoir lancé une recherche, vous pouvez parcourir votre ensemble de résultats et renvoyer tous les ID de threads uniques.

La partie délicate est de spécifier le nombre de résultats que vous voulez retourner. Si vous voulez afficher 10 résultats sur votre page de résultats, vous aurez probablement besoin de Lucene pour obtenir des résultats de 10 + m, car un certain pourcentage du jeu de retour sera déduit, car ce sont des messages appartenant à la même fil. Vous devrez incorporer une logique supplémentaire qui lancera une autre recherche Lucene si l'ensemble déduplé est < 10.

C'est ce que fait le projet Nutch lors de la fusion de plusieurs résultats de recherche appartenant au même domaine.

1

Lorsque vous indexez les threads, vous devez diviser chaque thread en écritures et attribuer à chaque article Document un champ contenant un identifiant unique identifiant le thread auquel il appartient.

Lorsque vous effectuez l'implémentation de la recherche, je vous recommande d'utiliser lucene 2.9 ou version ultérieure, ce qui vous permet d'utiliser un Collector. Les collecteurs vous permettent de pré-traiter les documents récupérés et vous pourrez ainsi regrouper les articles provenant du même ID-fil.