2010-04-21 16 views
9

द्वारा सॉर्टिंग लुसीन (या लुसेन.नेट) के नवीनतम संस्करण में, क्रमबद्ध क्रम में खोज परिणामों को वापस पाने का सही तरीका क्या है?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); 

अब मैं कोई खोज करते हैं चाहते हैं और मेरे परिणाम हाल ही में के क्रम में वापस पाने:

मैं इस तरह के एक दस्तावेज है।

मैं क्रिएशनडेट द्वारा परिणामों की खोज कैसे कर सकता हूं? मेरे द्वारा देखे जाने वाले सभी दस्तावेज पुराने लुसीन संस्करणों के लिए हैं जो अब-बहिष्कृत एपीआई का उपयोग करते हैं।

उत्तर

11

कुछ शोध कर रहे हैं और एपीआई के साथ चारों ओर poking के बाद, मैं अंत में कुछ गैर निकाले गए 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(); 
} 

नोट मैं लंबी तुलना के साथ निर्माण तिथि को सॉर्ट कर रहा हूं। ऐसा इसलिए है क्योंकि मैं निर्माण तिथि को डेटटाइम के रूप में संग्रहीत करता हूं.अब .िक्स, जो एक सिस्टम है INT64, या सी # में लंबा है।

+3

लुसीन में सॉर्ट करने के लिए पहला समझने वाला समाधान जो मुझे मिला है – kevinsky

+0

मुझे लगता है कि आप खोजकर्ता में फ़िल्टर के लिए एक शून्य खो रहे हैं। खोज() विधि कॉल ... – Ryan

+1

मुझे लगता है कि आपने 'CreationDate' को' क्रिएशनटाइम' ... –