2016-06-03 15 views
0

Ich habe google viel für ein Beispiel, das ich verwenden könnte, aber keine finden, die meinem Problem ähnlich ist. Dies ist ein vollständiges Konsolenbeispiel, das funktioniert, weil ich ein Dummy-Feld Foo zu Wert 1 hinzugefügt habe, nur um alle meine Dokumente sortiert zu machen. Ich möchte nicht ein dummy foo Feld hinzufügen Ich möchte nur in der Lage, alle meine Dokumente zu sortieren, so dass der neueste Eintrag nach MailDate zuerst kommen, wenn ich lesen So füge ich in dieser Reihenfolge 20160202121314, 20160222151024, 20160226162344 aber wenn ich lese ich die umgekehrte Reihenfolge wie 20160226162344, 20160222151024, wollen 20160202121314Wie alle meine Dokumente in MailDate zu sortieren, ohne ein dummy Field foo mit Wert 1

Directory directory = FSDirectory.Open(new DirectoryInfo 
    (Environment.CurrentDirectory + "\\luceneIndex")); 

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29); 

var writer = new IndexWriter(directory, analyzer, true, 
    IndexWriter.MaxFieldLength.LIMITED); 

var doc = new Document(); 
doc.Add(new Field("MailDate", "20160202121314", Field.Store.YES, 
    Field.Index.ANALYZED)); 

doc.Add(new Field("OrgNo", "556769-6868", Field.Store.YES, 
    Field.Index.NOT_ANALYZED)); 

doc.Add(new Field("Name", "The British Food Company AB", Field.Store.YES, 
    Field.Index.ANALYZED)); 

doc.Add(new Field("Foo", "1", Field.Store.YES, 
    Field.Index.ANALYZED)); 
writer.AddDocument(doc); 

doc = new Document(); 
doc.Add(new Field("MailDate", "20160222151024", Field.Store.YES, 
    Field.Index.ANALYZED)); 
doc.Add(new Field("OrgNo", "556559-8033", Field.Store.YES, 
    Field.Index.NOT_ANALYZED)); 
doc.Add(new Field("Name", "Gult Kort AB", Field.Store.YES, 
    Field.Index.ANALYZED)); 
doc.Add(new Field("Foo", "1", Field.Store.YES, 
    Field.Index.ANALYZED));   
writer.AddDocument(doc); 

doc = new Document(); 
doc.Add(new Field("MailDate", "20160226162344", Field.Store.YES, 
    Field.Index.ANALYZED)); 
doc.Add(new Field("OrgNo", "000000-0000", Field.Store.YES, 
    Field.Index.NOT_ANALYZED)); 
doc.Add(new Field("Name", "Master", Field.Store.YES, Field.Index.ANALYZED)); 
doc.Add(new Field("Foo", "1", Field.Store.YES, Field.Index.ANALYZED)); 
writer.AddDocument(doc); 
writer.Dispose(); 

// Find all docs whose Foo contains 1, ordered by MailDate 
var query = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "Foo", new 
    StandardAnalyzer(Version.LUCENE_29)).Parse("1"); 
var searcher = new IndexSearcher(directory, true); 
try 
{ 
    var sort = new Sort(new SortField("MailDate", SortField.LONG, true)); 
    var results = searcher.Search(query, null, 1000, sort); 
    foreach (var hit in results.ScoreDocs) 
    { 
     Document document = searcher.Doc(hit.Doc); 
     Console.WriteLine("\tFound match: {0}", document.Get("MailDate")); 
    } 
} 

// Tony

Antwort

0

Dies funktioniert sortieren

writer.Dispose(); 

    var numRangeQuery = NumericRangeQuery.NewLongRange("MailDate", 0L, 
     long.MaxValue, true, true); 

    var searcher = new IndexSearcher(luceneIndexDirectory, true); 

    var sort = new Sort(new SortField("MailDate", SortField.LONG, true)); 

    var results = searcher.Search(numRangeQuery, null, 50, sort); 

    searcher.Search(numRangeQuery, null, 50, sort); 

Die sortierten Daten sind in results.ScoreDocs. // Tony

// Tony