我可以在使用自定义收集器时对Lucene结果进行排序吗?

时间:2011-10-15 20:49:31

标签: lucene lucene.net

使用自定义收集器时是否可以对Lucene结果进行排序,或者我必须自己在收集器对象中实现该功能?我找不到IndexSearcher.Search的重载,它允许我传入我自己的收集器对象一个排序字段。

Lucene.Net,v2.9

1 个答案:

答案 0 :(得分:1)

您必须自己实施排序。但Lucene.Net有一个抽象类PriorityQueue,可以在自定义收集器中使用(它在排序时在Lucene.Net内部使用(而不是收集所有结果,然后对它们应用排序))

public class MyQueue : Lucene.Net.Util.PriorityQueue<int>
{
    public MyQueue(int MaxSize) : base()
    {
        Initialize(MaxSize);
    }

    public override bool LessThan(int a, int b)
    {
        return a < b;
    }
}

int queueSize = 3;
MyQueue pq = new MyQueue(queueSize);
pq.InsertWithOverflow(1);
pq.InsertWithOverflow(9);
pq.InsertWithOverflow(8);
pq.InsertWithOverflow(3);
pq.InsertWithOverflow(5);

int i1 = pq.Pop();
int i2 = pq.Pop();
int i3 = pq.Pop();