Apache Lucene的默认搜索实现返回按分数(最相关的结果排在最前),然后按ID(最旧的结果排在前)的结果。
可以在查询时使用附加的Sort参数自定义此行为。
TopFieldDocs Searcher#search(查询查询,过滤器过滤器,int n,排序排序)
Sort参数指定用于排序的字段或属性。默认实现是通过以下方式定义的:
new Sort(new SortField[] { SortField.FIELD_SCORE, SortField.FIELD_DOC });要更改排序,只需将字段替换为所需的字段即可:
new Sort(new SortField[] {SortField.FIELD_SCORE,new SortField("field_1", SortField.STRING),new SortField("field_2", SortField.STRING) });这听起来很简单,但要满足以下条件才能起作用:
- 您必须指定SortField(String field,int type)的type参数,以使Lucene找到您的字段,即使这通常是可选的。
- 排序字段必须建立索引,但不能标记化:
document.add (new Field ("byNumber", Integer.toString(x), Field.Store.NO,Field.Index.NOT_ANALYZED));- 排序字段的内容只能是纯文本。如果仅一个元素在用于排序的字段之一中具有特殊字符或重音,则整个搜索将返回未排序的结果。
检查本教程。



