如何根据lucene中的字段对文档进行排序?

时间:2013-12-05 15:12:08

标签: sorting lucene document

我有数十亿条有两个属性的记录:

  

RecordCreatedTime,RecordContent

我已经使用lucene来索引记录,并且完成了。

现在我想根据RecordCreatedTime查询一些记录,例如,请查看2013年11月的文档。

我正在考虑使用RecordCreatedTime对文档进行排序,并尝试了一些方法,例如NumericDocValuesSorter,但它不起作用。 你们能提供更多的材料,所以我可以仔细看看吗? 非常感谢。

1 个答案:

答案 0 :(得分:0)

您应该查看Lucene的DateTools,它为您提供了以适合在索引中搜索和排序的方式表示日期的工具。当以该格式编制索引时,TermRangeQuery可用于搜索特定范围(例如2013年11月)。

您还可以通过将Sort传递到搜索电话中来轻松排序。

例如:

String startDateString = DateTools.dateToString(startDate, DateTools.Resolution.DAY);
String endDateString = DateTools.dateToString(endDate, DateTools.Resolution.DAY);
TermRangeQuery query = TermRangeQuery.newStringRange("recordCreatedTime", startDateString, endDateString, true, false);
SortField field = new SortField('recordCreatedTime', SortField.Type.STRING);
Sort sort = new Sort(field);
TopDocs results = searcher.search(query, numDocs, sort);