Jak zaimplementować niestandardowy filtr w Lucene.net?

Poniższy kod pochodzi z książki Lucene In Action (pierwotnie w Javie). Służy do tworzenia listy „dozwolonych” dokumentów (z punktu widzenia uprawnień użytkownika) w celu filtrowania wyników wyszukiwania za pomocą. Problem polega na tym, że metoda termsDocs.Read () nie akceptuje tablic „doc” i „freq”, które mają być przekazywane przez odwołanie, więc są nadal puste, jeśli chodzi o ustawienie bitu w tablicy bitów.

Czy ktoś może pomóc, przykłady użycia niestandardowych filtrów Lucene (szczególnie w .net) wydają się być słabe. Dzięki.

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

Używam Lucene.net 2.0.0.4, ale interfejs TermDocs nadal wydaje się być taki sam w najnowszej gałęzi tutaj:https://svn.apache.org/repos/asf/incubator/lucene.net/trunk/C%23/src/Lucene.Net/Index/TermDocs.cs

questionAnswers(2)

yourAnswerToTheQuestion