Comment puis-je trier Les résultats par la valeur du champ à l'aide d'un HitCollector?
J'utilise le code suivant pour exécuter une requête dans Lucene.Net
var collector = new GroupingHitCollector(searcher.GetIndexReader());
searcher.Search(myQuery, collector);
resultsCount = collector.Hits.Count;
Comment puis-je trier ces résultats de recherche basée sur un champ?
Mise à jour
Merci pour votre réponse. J'avais essayé d'utiliser TopFieldDocCollector
mais j'ai une erreur disant, "value is too small or too large"
quand j'ai passé 5000
comme numHits
valeur de l'argument. S'il vous plaît suggérer une valeur valide pour passer.
OriginalL'auteur Ed. | 2009-01-30
Vous devez vous connecter pour publier un commentaire.
La
recherche.Chercheur.la recherche
méthode d'accepter unrecherche.Trier
paramètre, qui peut être construits aussi simplement que:Cependant, il existe certaines limitations sur les champs qui peuvent être triés sur, ils ont besoin d'être indexé, mais pas sous forme de jeton, et les valeurs convertibles
String
s,Float
s ouInteger
s.Lucene dans l'Action couvre tous les détails, ainsi que le tri par plusieurs champs et ainsi de suite.
...et de ne pas sous - me battre pour elle 🙂
Besoin de stocker de la valeur?
Selon les docs pour Lucene, il n'est pas nécessaire que la valeur soit stocké, uniquement indexé
OriginalL'auteur James Brady
Ce que vous cherchez est probablement TopFieldDocCollector. L'utiliser à la place de la
GroupingHitCollector
(c'est quoi ça?), ou à l'intérieur.Commentaire sur ce si vous avez besoin de plus d'infos. Je serai heureux de vous aider.
OriginalL'auteur itsadok
Dans l'original (Java) version de Lucene, il n'y a aucune restriction sur la taille de la
TopFieldDocCollector
résultats. Tout nombre supérieur à zéro est acceptée. Bien que les contraintes de mémoire et de la dégradation des performances de créer une limite pratique qui dépend de votre environnement, 5000 hits est trivial et ne devrait pas poser un problème à l'extérieur de l'appareil mobile.Peut-être dans le portage de Lucene,
TopFieldDocCollector
a été modifié pour utiliser autre chose que de Lucene "tas" de mise en œuvre (appeléPriorityQueue
, prolongé parFieldSortedHitQueue
)—quelque chose qui s'impose de façon déraisonnable petite limite sur les résultats de la taille. Si oui, vous pourriez vouloir regarder le code source pourTopFieldDocCollector
, et de mettre en œuvre votre propre hit collecteur à l'aide d'une meilleure tas de mise en œuvre.Je dois demander, cependant, pourquoi essayez-vous de collecter 5000 résultats? Aucun utilisateur dans une application interactive est va vouloir voir que de nombreux. Je me figure que les utilisateurs prêts à regarder 200 résultats sont rares, mais il double à 400 comme facteur de sécurité. Selon l'application, en limitant la taille de résultat peut entraver malveillants écran grattoirs et d'atténuer de déni de service attaques trop.
OriginalL'auteur erickson
Le constructeur pour le Tri n'acceptant que la chaîne de nom de champ a été amortis. Maintenant, vous devez créer une sorte d'objet et le passer dans la dernière paramater de chercheur.Recherche (la)
OriginalL'auteur toinetoine