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