下面的代码来自 Lucene In Action 这本书(最初用 Java 编写)。它用于构建“允许”文档列表(从用户许可的角度来看)以过滤搜索结果。问题是 termsDocs.Read() 方法不接受通过引用传递的 'doc' 和 'freq' 数组,因此在设置位数组中的位时它们仍然是空的。
任何人都可以提供帮助,使用 Lucene 自定义过滤器(尤其是在 .net 中)的示例似乎很薄弱。谢谢。
public class LuceneCustomFilter : Lucene.Net.Search.Filter
{
string[] _luceneIds;
public LuceneCustomFilter(string[] luceneIds)
{
_luceneIds = luceneIds;
}
public override BitArray Bits(Lucene.Net.Index.IndexReader indexReader)
{
BitArray bitarray = new BitArray(indexReader.MaxDoc());
int[] docs = new int[1];
int[] freq = new int[1];
for (int i = 0; i < _luceneIds.Length; i++)
{
if (!string.IsNullOrEmpty(_luceneIds[i]))
{
Lucene.Net.Index.TermDocs termDocs = indexReader.TermDocs(
new Lucene.Net.Index.Term(@"luceneId", _luceneIds[i]));
int count = termDocs.Read(docs, freq);
if (count == 1)
{
bitarray.Set(docs[0], true);
}
}
}
return bitarray;
}
}
我正在使用 Lucene.net 2.0.0.4,但 TermDocs 界面在此处的最新分支中似乎仍然相同:https ://svn.apache.org/repos/asf/incubator/lucene.net/trunk/C %23/src/Lucene.Net/Index/TermDocs.cs