如何在MailDate上对我的所有文档进行排序,而不添加值为1

时间:2016-06-03 09:54:59

标签: c# sorting lucene.net

我已经使用谷歌了解一些我可以使用但没有找到的例子 这与我的问题类似。 这是一个完整的控制台示例,因为我已将一个虚拟Field Foo添加到值1,只是为了使我的所有文档都被排序。 我不想要添加一个虚拟foo字段 我只是希望能够对我的所有文档进行排序,以便根据MailDate的最新条目在我阅读时首先出现 所以我在这个订单中添加20160202121314,20160222151024,20160226162344 但是当我读到时我想要相反的顺序 20160226162344,20160222151024,20160202121314

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

//托尼

1 个答案:

答案 0 :(得分: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中。        //托尼

//托尼