2010-10-09 21 views
0

Mon application indexe les fils de discussion. Chaque entrée de la discussion est indexée sous la forme d'un document Lucene distinct avec un champ common_id qui peut être utilisé pour regrouper les occurrences de recherche dans une discussion.Comment peut-on regrouper les résultats de lucene?

Actuellement, lorsque la recherche est effectuée, si un thread a 3 entrées, 3 appels distincts sont renvoyés. Même si cela est correct, du point de vue des utilisateurs, la même entrée apparaît plusieurs fois dans la recherche.

Existe-t-il un moyen de dire à lucene de grouper ses résultats de recherche par le champ common_id avant de les retourner?

Répondre

1

Je crois que ce que vous demandez est Field Collapsing, ce qui est une caractéristique de Solr (et je crois ElasticSearch aussi bien).

Si vous voulez rouler votre propre, d'une manière possible de le faire est la suivante: champ

  1. Ajouter une « série id » à chaque document qui est membre d'une série . Vous devrez vous assurer que cela s'incrémente pour chaque nouvelle série .
  2. Effectuez une requête initiale sur Lucene et obtenez une liste de résultats.
  3. Pour chaque hit, vérifiez s'il a un identifiant de série; Si c'est le cas, faites une autre requête par l'identifiant de la série afin de récupérer tous les membres de la série.

Une alternative consiste à stocker les identifiants de tous les membres de la série dans un champ à l'intérieur du document de chaque membre.