2016-06-03 1 views
0

사용할 수 있지만 내 문제와 비슷한 을 찾을 수없는 몇 가지 예를 들어 Google을 많이 사용했습니다. 이것은 내 문서가 정렬되도록하기 위해 더미 필드 Foo를 값 1에 추가했기 때문에 작동하는 완전한 콘솔 예제입니다. 더미 foo 필드를 추가하고 싶지 않습니다. MailDate에 따른 가장 최신 항목을 먼저 읽을 때 을 읽으면 모든 문서를 정렬 할 수 있기를 원합니다.이 순서대로 20160202121314, 20160222151024, 20160226162344 하지만 난 20160226162344, 20160222151024처럼 역순으로, 20160202121314가젯을 추가하지 않고 MailDate에서 내 문서를 모두 정렬하는 방법 값이 1 인 필드 foo

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")); 
    } 
} 

// 토니을 원하는 읽을 때

답변

0

이 정렬하기 위해 노력할 것

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); 
,

정렬 된 데이터는 results.ScoreDocs에 있습니다. // 토니

// 토니

관련 문제