lucene Sort 文档排序

    xiaoxiao2026-03-12  5

    1.Sort

    org.apache.lucene.search.Sort 封装排序标准的类。

    SortField[] org.apache.lucene.search.Sort.fields 字段。

    org.apache.lucene.search.Sort.Sort(SortField field)

    构造函数。按照指定的SortField进行排序。

    org.apache.lucene.search.Sort.Sort(SortField... fields)

    上面函数的重载,指定多个field进行排序,它们的优先级由高到低。当且仅当前面的field比不出大小时,才会用到后面的field。

    void org.apache.lucene.search.Sort.setSort(SortField... fields)

    它被上面的构造函数调用。

    2.SortField

    org.apache.lucene.search.SortField 类,代表用于排序的Field。此field必须被索引。 org.apache.lucene.search.SortField.Type 内部静态枚举,表示排序的类型,如相关性分数排序、文档号排序、字符串顺序排序等。 org.apache.lucene.search.SortField.SortField(String field, FieldComparatorSource comparator) 构造函数。用自定义的comparator来排序。

    3.FieldComparator

    3.1 FieldComparatorSource

    org.apache.lucene.search.FieldComparatorSource 抽象类,用于得到FieldComparator,定义见下。

    public abstract class FieldComparatorSource { public abstract FieldComparator<?> newComparator(String fieldname, int numHits, int sortPos, boolean reversed) throws IOException; }

    3.2 FieldComparator

    org.apache.lucene.search.FieldComparator<T> 抽象泛型类。T代表待比较得分的类型,通常是int或float。 int org.apache.lucene.search.FieldComparator.compare(int slot1, int slot2) 比较 slot1与slot2,当slot1>slot2时返回正数(确定是正数?)。

    3.3 LeafFieldComparator

    void org.apache.lucene.search.LeafFieldComparator

    接口,定义见下。

    public interface LeafFieldComparator { //设置slot为队列的尾部。对应评分最低的文档结果。 void setBottom(final int slot); //将当前doc与队列的尾部进行比较。如果doc>bottom,返回正数。 int compareBottom(int doc) throws IOException; int compareTop(int doc) throws IOException; //将新的命中结果,也就是这个doc copy至指定slot上,用于以后的比较。 void copy(int slot, int doc) throws IOException; void setScorer(Scorer scorer); }

    4.DocComparator

    org.apache.lucene.search.FieldComparator.DocComparator FieldComparator的内部静态类,按照docid进行排序。定义见下。

    public static final class DocComparator extends FieldComparator<Integer> implements LeafFieldComparator {...}

    最新回复(0)