使用自定义收集器时是否可以对Lucene结果进行排序,或者我必须自己在收集器对象中实现该功能?我找不到IndexSearcher.Search的重载,它允许我传入我自己的收集器对象和一个排序字段。
Lucene.Net,v2.9
答案 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();