基于数字字段在Lucene中对搜索结果进行排序

Tah*_*idi 9 java lucene

我有一些文档有两个字段:text,count.我使用lucene索引文档,我现在想要在文本中搜索并按降序排序按结果排序.我怎样才能做到这一点?

Sal*_*lah 14

Apache Lucene的默认搜索实现返回按分数排序的结果(首先是最相关的结果),然后是id(最早的结果).

可以在查询时使用附加的Sort参数自定义此行为.

TopFieldDocs Searcher #search(查询查询,过滤器过滤器,int n,排序排序)

Sort参数指定用于排序的字段或属性.默认实现是这样定义的:

new Sort(new SortField[] { SortField.FIELD_SCORE, SortField.FIELD_DOC });
Run Code Online (Sandbox Code Playgroud)

要更改排序,您只需将字段替换为您想要的字段:

new Sort(new SortField[] {
SortField.FIELD_SCORE,
new SortField("field_1", SortField.STRING),
new SortField("field_2", SortField.STRING) });
Run Code Online (Sandbox Code Playgroud)

这听起来很简单,但在满足以下条件之前不会起作用:

  • 您必须指定SortField的类型参数(String字段,int类型)以使Lucene找到您的字段,即使这是normaly可选的.
  • 排序字段必须编入索引但不能标记化:

    document.add (new Field ("byNumber", Integer.toString(x), Field.Store.NO, Field.Index.NOT_ANALYZED));

  • 排序字段内容必须仅为纯文本.如果只有一个元素在用于排序的字段之一中具有特殊字符或重音,则整个搜索将返回未排序的结果.

查看本教程.