根据数字字段在Lucene中对搜索结果进行排序
问题内容:
我有一些文档有两个字段:文本,计数。
我曾经Lucene
为文档编制索引,现在我想在文本中搜索并按降序将结果按计数排序。我怎样才能做到这一点?
问题答案:
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));
- 排序字段的内容只能是纯文本。如果仅一个元素在用于排序的字段之一中具有特殊字符或重音,则整个搜索将返回未排序的结果。
检查本教程。