Hi guys, in our app we gives the possibility to search inside a set of documents, which is the result list of a former search. Thus, someone can shrink down a search according different criterias.
For this, we implemented a simple Filter that simply gets a TopDocs Object and creates a bitSet out of the document numbers: class SearchInResultsFilter extends Filter { private BitSet bitSet; public SearchInResultsFilter(TopDocs topDocs) { bitSet = new BitSet(topDocs.scoreDocs.length); for (ScoreDoc scoreDoc : topDocs.scoreDocs) { bitSet.set(scoreDoc.doc); } } @Override public BitSet bits(IndexReader reader) throws IOException { return bitSet; } } With Lucene 2.9, the reader object given in bits(..) is not the 'big reader', but some kind of subreader, i.e. a SegmentReader. Thus, the document ids of the topDocs and this object are not compatible anymore. I think, in the new, non-deprecated 'DocIdSet getDocIdSet(IndexReader reader)' will be the same SegmentReader. I solved a similar scenario in our custom FieldComparator, by recognizing the reader-specific docbase given in the method 'public void setNextReader(IndexReader reader, int docBase)' But inside Filter, I don't have such a nice method. What is the trick? Thanks for all potential hints Christian
signature.asc
Description: PGP signature