2010-04-21 22 views
9

排序在Lucene的(或Lucene.NET)的最新版本,什麼是正確的方式來獲得搜索結果後面的排序順序?Lucene.NET - 通過INT

我有一個這樣的文件:

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訂單的結果嗎?我看到的所有文檔都是使用現在不推薦使用的API的舊版Lucene版本。

回答

11

做一些研究,並與周圍的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(); 
} 

注意我使用LONG比較對創建日期進行排序。這是因爲我將創建日期存儲爲DateTime.Now.Ticks,它是一個System.Int64,或者長在C#中。

+3

在Lucene中排序的第一個理解解決方案,我找到了 – kevinsky 2013-02-05 16:05:55

+0

我認爲你缺少searchcher.Search()方法調用中的篩選器的空值... – Ryan 2014-07-14 04:18:21

+1

我認爲你已將'CreationDate'更改爲' CreationTime' ... – 2015-05-28 08:26:05