[
https://issues.apache.org/jira/browse/LUCENE-584?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12577207#action_12577207
]
[EMAIL PROTECTED] edited comment on LUCENE-584 at 3/10/08 2:48 PM:
-------------------------------------------------------------
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.close();
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}
was (Author: [EMAIL PROTECTED]):
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]