[ https://issues.apache.org/jira/browse/LUCENE-584?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12577207#action_12577207 ]
Mark Miller commented on LUCENE-584: ------------------------------------ I think there is still an issue here. The code below just broke for me. java.lang.ClassCastException: org.apache.lucene.util.OpenBitSet cannot be cast to java.util.BitSet at org.apache.lucene.search.CachingWrapperFilter.bits(CachingWrapperFilter.java:55) at org.apache.lucene.misc.ChainedFilter.bits(ChainedFilter.java:177) at org.apache.lucene.misc.ChainedFilter.bits(ChainedFilter.java:152) at org.apache.lucene.search.Filter.getDocIdSet(Filter.java:49) {code} public void testChainedCachedQueryFilter() throws IOException, ParseException { String path = "c:/TestIndex"; Analyzer analyzer = new WhitespaceAnalyzer(); IndexWriter writer = new IndexWriter(path, analyzer, true); Document doc = new Document(); doc.add(new Field("category", "red", Store.YES, Index.TOKENIZED)); doc.add(new Field("content", "the big bad fox", Store.NO, Index.TOKENIZED)); writer.addDocument(doc); doc = new Document(); doc.add(new Field("category", "red", Store.YES, Index.TOKENIZED)); doc.add(new Field("content", "the big bad pig", Store.NO, Index.TOKENIZED)); writer.addDocument(doc); doc = new Document(); doc.add(new Field("category", "red", Store.YES, Index.TOKENIZED)); doc.add(new Field("content", "the horrific girl", Store.NO, Index.TOKENIZED)); writer.addDocument(doc); doc = new Document(); doc.add(new Field("category", "blue", Store.YES, Index.TOKENIZED)); doc.add(new Field("content", "the dirty boy", Store.NO, Index.TOKENIZED)); writer.addDocument(doc); doc = new Document(); doc.add(new Field("category", "blue", Store.YES, Index.TOKENIZED)); doc.add(new Field("content", "the careful bad fox", Store.NO, Index.TOKENIZED)); writer.addDocument(doc); writer.addDocument(doc); Searcher searcher = null; searcher = new IndexSearcher(path); QueryParser qp = new QueryParser("field", new KeywordAnalyzer()); Query query = qp.parse("content:fox"); QueryWrapperFilter queryFilter = new QueryWrapperFilter(query); CachingWrapperFilter cwf = new CachingWrapperFilter(queryFilter); TopDocs hits = searcher.search(query, cwf, 1); System.out.println("hits:" + hits.totalHits); queryFilter = new QueryWrapperFilter(qp.parse("category:red")); CachingWrapperFilter fcwf = new CachingWrapperFilter(queryFilter); Filter[] chain = new Filter[2]; chain[0] = cwf; chain[1] = fcwf; ChainedFilter cf = new ChainedFilter(chain, ChainedFilter.AND); hits = searcher.search(new MatchAllDocsQuery(), cf, 1); System.out.println("red:" + hits.totalHits); queryFilter = new QueryWrapperFilter(qp.parse("category:blue")); CachingWrapperFilter fbcwf = new CachingWrapperFilter(queryFilter); chain = new Filter[2]; chain[0] = cwf; chain[1] = fbcwf; cf = new ChainedFilter(chain, ChainedFilter.AND); hits = searcher.search(new MatchAllDocsQuery(), cf, 1); System.out.println("blue:" + hits.totalHits); } {code} > Decouple Filter from BitSet > --------------------------- > > Key: LUCENE-584 > URL: https://issues.apache.org/jira/browse/LUCENE-584 > Project: Lucene - Java > Issue Type: Improvement > Components: Search > Affects Versions: 2.1 > Reporter: Peter Schäfer > Assignee: Michael Busch > Priority: Minor > Fix For: 2.4 > > Attachments: bench-diff.txt, bench-diff.txt, CHANGES.txt.patch, > ContribQueries20080111.patch, lucene-584-take2.patch, > lucene-584-take3-part1.patch, lucene-584-take3-part2.patch, > lucene-584-take4-part1.patch, lucene-584-take4-part2.patch, > lucene-584-take5-part1.patch, lucene-584-take5-part2.patch, lucene-584.patch, > Matcher-20070905-2default.patch, Matcher-20070905-3core.patch, > Matcher-20071122-1ground.patch, Some Matchers.zip, Test20080111.patch > > > {code} > package org.apache.lucene.search; > public abstract class Filter implements java.io.Serializable > { > public abstract AbstractBitSet bits(IndexReader reader) throws IOException; > } > public interface AbstractBitSet > { > public boolean get(int index); > } > {code} > It would be useful if the method =Filter.bits()= returned an abstract > interface, instead of =java.util.BitSet=. > Use case: there is a very large index, and, depending on the user's > privileges, only a small portion of the index is actually visible. > Sparsely populated =java.util.BitSet=s are not efficient and waste lots of > memory. It would be desirable to have an alternative BitSet implementation > with smaller memory footprint. > Though it _is_ possibly to derive classes from =java.util.BitSet=, it was > obviously not designed for that purpose. > That's why I propose to use an interface instead. The default implementation > could still delegate to =java.util.BitSet=. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]