Ниже приведен код из книги 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