¿Cómo implementar un filtro personalizado con Lucene.net?

El código a continuación es del libro Lucene In Action (originalmente en Java). Es para crear una lista de documentos 'permitidos' (desde el punto de vista del permiso del usuario) para filtrar los resultados de búsqueda con. El problema es que el método termsDocs.Read () no acepta que se pasen por referencia las matrices 'doc' y 'freq', por lo que aún están vacías cuando se trata de establecer el bit en la matriz de bits.

Alguien puede ayudar, los ejemplos de uso de filtros personalizados de Lucene (especialmente en .net) parecen ser escasos en el terreno. Gracias.

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;
    }
}

Estoy usando Lucene.net 2.0.0.4, pero la interfaz de TermDocs todavía parece ser la misma en la última rama aquí:https://svn.apache.org/repos/asf/incubator/lucene.net/trunk/C%23/src/Lucene.Net/Index/TermDocs.cs

Respuestas a la pregunta(2)

Su respuesta a la pregunta