Il codice sotto è dal Lucene In Azione libro (originariamente in Java). È per creare un elenco di documenti "consentiti" (dal punto di vista dell'autorizzazione dell'utente) per filtrare i risultati della ricerca con. Il problema è il metodo termsDocs.Read() non accetta il 'doc' e 'array freq' essere passati per riferimento, quindi sono ancora vuoto quando si tratta di definire il bit della matrice di bit.Come è possibile realizzare un filtro personalizzato con Lucene.net?
Qualcuno può aiuto, esempi di utilizzo di filtri personalizzati Lucene (soprattutto in .net) sembrano essere sottili sulla terra. Grazie.
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;
}
}
sto usando Lucene.net 2.0.0.4, ma l'interfaccia TermDocs appare ancora essere lo stesso nella sua ultima ramo qui: https://svn.apache.org/repos/asf/incubator/lucene.net/trunk/C%23/src/Lucene.Net/Index/TermDocs.cs
fantastici, grazie per il vostro aiuto Darin. – Nick