我已经使用谷歌了解一些我可以使用但没有找到的例子 这与我的问题类似。 这是一个完整的控制台示例,因为我已将一个虚拟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"));
}
}
//托尼
答案 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中。 //托尼
//托尼