В последней версии Lucene (или Lucene.NET), что надлежащий путь состоит в том, чтобы вернуть результаты поиска в отсортированном порядке?
У меня есть документ как это:
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);
Теперь я хочу, делают поиск и возвращают мои результаты в порядке нового.
Как я могу сделать поиск, который заказывает результаты CreationDate? Вся документация, которую я вижу, является для старых версий Lucene тем использованием теперь удержанные от использования API.
Проведя небольшое исследование и изучив API, я наконец нашел несколько нерекомендуемых API (начиная с v2.9 и v3.0), которые позволят вам упорядочивать по дате:
// 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();
}
Примечание I ' m сортировка даты создания с помощью ДОЛГОГО сравнения. Это потому, что я храню дату создания как DateTime.Now.Ticks, которая является System.Int64 или long в C #.