2011-06-21 3 views
1

J'utilise Lucene.NET, qui est actuellement à jour avec Lucene 2.9. J'essaie de mettre en œuvre une sorte de sélection distincte, mais sans avoir besoin de forer dans tous les groupes. Je sais que Lucene 3.2 a une recherche à facettes qui peut résoudre cela, mais je n'ai pas le temps de le porter à 2.9 pour le moment. Dans tous les cas, lorsque vous effectuez une requête paginée avec un opérateur de tri, Lucene doit trouver tous les documents qui correspondent à la requête, les trier, puis prendre les N premiers résultats, où N est la taille de la page. Je voudrais construire quelque chose qui soit également appliqué après que la requête triée soit terminée, mais qui prend les N premiers résultats uniques et les renvoie. Je pense à utiliser un HashSet et l'un des champs indexés pour déterminer l'unicité. Je préférerais trouver un moyen d'étendre quelque chose dans Lucene que d'essayer de le faire une fois que les résultats sont déjà retournés pour des raisons de performances.Filtrer les résultats d'une requête triée dans Lucene.NET

Les filtres personnalisés semblent s'exécuter avant même que la requête principale ne soit appliquée et que les collecteurs personnalisés ne soient exécutés avant que le tri ne soit appliqué, à moins que vous ne procédiez au tri par l'identifiant de document de Lucene. Alors, quelle est la meilleure approche à ce problème? Un point dans la direction du bon composant à étendre vous obtiendrez la réponse sur celui-ci, un exemple de mise en œuvre vous donnera certainement la réponse. Merci à l'avance

+0

Que voulez-vous dire par les résultats « uniques » ? Lucene renvoie les documents, qui doivent déjà être uniques dans votre index. – mathieu

+0

Unique basé sur un champ autre que l'ID clé/document primaire. Comme une sélection distincte * ... Requête SQL – LaserJesus

Répondre

0

Je fais la recherche sans tri, et dans un collecteur personnalisé, recueilleraient les résultats dans une liste triée de taille N basée sur « l'unicité »

+0

Est-ce l'implémentation la plus efficace disponible dans Lucene, pour effectuer manuellement un tri d'insertion sur une liste en mémoire pour chaque document distinct? Il se peut que je doive insérer plusieurs millions d'éléments avant que je puisse paginer les résultats pour sélectionner le top N. – LaserJesus

Questions connexes