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: java-user-unsubscr...@lucene.apache.org For additional commands, e-mail: java-user-h...@lucene.apache.org