I work with Lucene.Net. , version 2.9
The code is :
Searching:
Filter filter = new PictureIdFilter( allowedResources );
TopDocs docs = searcher.Search( boolQuery, filter, documentCount );
ScoreDoc[] hits = docs.scoreDocs;
And the filter is :
class PictureIdFilter : Filter
+ {
+ ILog log = LogManager.GetLogger("PictureIdFilter");
+ private BitArray bits;
+
+ private HashSet<String> bag;
+
+ public PictureIdFilter(ResourceKey[] allowedResources)
+ {
+ var sw = new Stopwatch();
+ sw.Start();
+ bag = new HashSet<string>(allowedResources.Select(
x=>x.ResourceId.ToString() ));
+ sw.Stop();
+ log.Warn("PictureIdFilter hashset create: " +
sw.ElapsedMilliseconds);
+ }
+
+ public override BitArray Bits(IndexReader reader)
+ {
+ var maxDoc = reader.MaxDoc();
+ log.Warn("PictureIdFilter maxdoc: " + maxDoc);
+ var result = new BitArray(maxDoc);
+ var sw = new Stopwatch();
+ sw.Start();
+ for (int i = 0; i < maxDoc; i++)
+ {
+ var doc = reader.Document( i );
+ Field field = doc.GetField( "IDPicture" );
+ string fieldValue = field.StringValue();
+ if (bag.Contains( fieldValue ))
+ {
+ result[i] = true;
+ }
+ }
+ sw.Stop();
+ log.Warn("PictureIdFilter going over results: " +
sw.ElapsedMilliseconds);
+ return result;
+ }
+ }
The problem with that code is that it takes too much time.. That's why I
tried to filter by DocumentId somehow, but couldn't find the proper ifc.
--
View this message in context:
http://lucene.472066.n3.nabble.com/Restrict-Lucene-search-in-concrete-document-ids-tp4013905p4015123.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]