Lucene按分数排序然后修改日期

The*_*rog 4 lucene

我的文档中有三个字段

  1. 标题
  2. 内容
  3. 修改日期

因此,当我term按照排序的结果搜索它的时候score

现在我想进一步对结果进行排序,基于同样的分数,modifiedDate即以相同的分数显示最近的文档.

我尝试按分数排序,修改日期,但它不起作用.有人能指出我正确的方向吗?

fem*_*gon 6

这可以通过定义排序来完成:

Sort sort = new Sort(
    SortField.FIELD_SCORE, 
    new SortField("myDateField", SortField.Type.STRING));
indexSearcher.search(myQuery, numHits, sort);
Run Code Online (Sandbox Code Playgroud)

这里有两个可能的陷阱:

  • 您应该确保您的日期以可搜索且可排序的形式编制索引.通常,实现此目的的最佳方法是使用转换它DateTools.

  • 该字段用于排序必须被索引,并且应当被分析(一StringField,例如).由您决定是否存储.

因此,添加日期字段可能如下所示:

Field dateField = new StringField(
    "myDateField", 
    DateTools.DateToString(myDateInstance, DateTools.Resolution.MINUTE),
    Field.Store.YES);
document.add(dateField);
Run Code Online (Sandbox Code Playgroud)

注意:您还可以使用日期作为数字字段索引Date.getTime().我更喜欢DateTools字符串方法,因为它提供了一些更好的处理它们的工具,特别是在精度方面,但两种方法都可以工作.