实现lucene检索结果排序
Lucene的默认排序是按照Document的得分进⾏排序的。当检索结果集中的两个Document的具有相同的得分时,默认按照Document的ID对结果进⾏排序。
下⾯研究⼏种设置/改变检索结果排序的⽅法。
1、改变Document的boost(激励因⼦)
改变boost的⼤⼩,会导致Document的得分的改变,从⽽按照Lucene默认的对检索结果集的排序⽅式,改变检索结果中Document的排序的提前或者靠后。在计算得分的时候,使⽤到了boost的值,默认boost的值为1.0,也就说默认情况下Document的得分与boost的⽆关的。⼀旦改变了默认的boost的值,也就从Document的得分与boost⽆关,变为相关了:boost值越⼤,Document的得分越⾼。
2、改变Field的boost(激励因⼦)
改变Field的boost值,和改变Document的boost值是⼀样的。因为Document的boost是通过添加到Docuemnt中Field体现的,所以改变Field 的boost值,可以改变Document的boost值。
3、使⽤Sort排序⼯具实现排序
Lucene在查询的时候,可以通过以⼀个Sort作为参数构造⼀个检索器IndexSearcher,在构造Sort的时候,指定排序规则。
调⽤sort进⾏排序的⽅法是IndexSearcher.search,例如:
IndexSearcher.search(query,sort);
关于Sort类,在其内部定义了6种构造⽅法:
public Sort() //
public Sort(SortField field) //通过构造某个域(field)的SortField对象根据⼀个域进⾏排序
public Sort(SortField[] fields) //通过构造⼀组域(field)的SortField对象组实现根据多个域排序
public Sort(String field) //根据某个域(field)的名称构造Sort进⾏排序
public Sort(String field, boolean reverse) //根据某个域(field)的名称构造SortField进⾏排序,reverse为true为升序
public Sort(String[] fields) //根据⼀组域(field)的名称构造⼀组Sort进⾏排序
4、直接使⽤SortField实现排序
关于SortField类,在其内部定义了7种构造⽅法:
public SortField (String field, boolean reverse)//根据某个域(field)的名称构造SortField, reverse为false为升序
public SortField (String field, int type)
public SortField (String field, int type, boolean reverse)
public SortField (String field, Locale locale)
public SortField (String field, Locale locale, boolean reverse)
public SortField (String field, SortComparatorSource comparator)
public SortField (String field, SortComparatorSource comparator, boolean reverse)
type对应的值分别为:
SortField. SCORE 按积分排序java集合排序怎么实现
SortField. DOC 按⽂档排序
SortField. AUTO 域的值为int、long、float都有效
SortField.STRING 域按STRING排序
SortField..FLOAT
SortField.LONG
SortField.DOUBLE
SortField.SHORT
SortField.CUSTOM 通过⽐较器排序
SortField.BYTE
5、⾃定义排序
Lucene中的⾃定义排序功能和Java集合中的⾃定义排序的实现⽅法差不多,都要实现⼀下⽐较接⼝. 在J
ava中只要实现Comparable接⼝就可以了.但是在Lucene中要实现SortComparatorSource接⼝和 ScoreDocComparator接⼝.在了解具体实现⽅法之前先来看看这两个接⼝的定义吧

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。