2010-04-21 8 views
9

Dans la dernière version de Lucene (ou Lucene.NET), quel est le bon moyen de récupérer les résultats de la recherche dans l'ordre de tri?Lucene.NET - tri par int

J'ai un document comme celui-ci:

var document = new Lucene.Document(); 
document.AddField("Text", "foobar"); 
document.AddField("CreationDate", DateTime.Now.Ticks.ToString()); // store the date as an int 

indexWriter.AddDocument(document); 

Maintenant, je veux faire une recherche et obtenir mes résultats dans l'ordre de la plus récente.

Comment faire une recherche qui commande des résultats par CreationDate? Toute la documentation que je vois est pour les anciennes versions de Lucene qui utilisent des API désormais obsolètes.

Répondre

11

Après avoir fait quelques recherches et farfouillé avec l'API, j'ai enfin trouvé des API non dépréciée (en v2.9 et v3.0) qui vous permettra de commander par date:

// Find all docs whose .Text contains "hello", ordered by .CreationDate. 
var query = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "Text", new StandardAnalyzer()).Parse("hello"); 
var indexDirectory = FSDirectory.Open(new DirectoryInfo("c:\\foo")); 
var searcher = new IndexSearcher(indexDirectory, true); 
try 
{ 
    var sort = new Sort(new SortField("CreationDate", SortField.LONG)); 
    var filter = new QueryWrapperFilter(query); 
    var results = searcher.Search(query, , 1000, sort); 
    foreach (var hit in results.scoreDocs) 
    { 
     Document document = searcher.Doc(hit.doc); 
     Console.WriteLine("\tFound match: {0}", document.Get("Text")); 
    } 
} 
finally 
{ 
    searcher.Close(); 
} 

note Je trier la date de création avec la comparaison longue. C'est parce que je stocke la date de création en tant que DateTime.Now.Ticks, qui est un System.Int64, ou long en C#.

+3

première solution compréhensible à trier dans Lucene que j'ai trouvé – kevinsky

+0

Je pense qu'il vous manque une null pour le filtre dans l'appel de la méthode searcher.Search() ... – Ryan

+1

Je pense que vous avez changé 'CreationDate' à' CreationTime' ... –