Der folgende Code stammt aus dem Buch Lucene In Action (ursprünglich in Java). Es dient zum Erstellen einer Liste von "erlaubten" Dokumenten (aus Sicht der Benutzerberechtigungen) zum Filtern von Suchergebnissen mit. Das Problem ist, dass die Methode termsDocs.Read() die Arrays 'doc' und 'freq', die als Referenz übergeben werden, nicht akzeptiert. Daher sind sie immer noch leer, wenn es darum geht, das Bit im Bit-Array zu setzen.Wie implementieren Sie einen benutzerdefinierten Filter mit Lucene.net?
Kann jemand helfen, Beispiele für die Verwendung von Lucene benutzerdefinierte Filter (besonders in. Net) scheint dünn auf dem Boden zu sein. Vielen Dank.
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;
}
}
Ich verwende Lucene.net 2.0.0.4, aber die TermDocs Schnittstelle erscheint hier noch das gleiche in der aktuellen Zweig zu sein: https://svn.apache.org/repos/asf/incubator/lucene.net/trunk/C%23/src/Lucene.Net/Index/TermDocs.cs
Fantastisch, danke für deine Hilfe. – Nick