lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Erik Hatcher <e...@ehatchersolutions.com>
Subject Re: RangeQuery, FilterdQuery and HitCollector
Date Thu, 09 Mar 2006 08:12:40 GMT
Youngho,

Try the lasted trunk codebase.  I have recently applied a contributed  
patch to FilteredQuery.  Using the latest codebase, your test passes  
for me.

	Erik


On Mar 9, 2006, at 1:09 AM, Youngho Cho wrote:

> Hello,
>
> I would like to use a Filter for rangeQuery ( to avoid potential  
> TooManyClauses exception )
> and found out
>
> http://wiki.apache.org/jakarta-lucene/FilteringOptions
>
> wiki said that FilteredQuery is best one.
> But Interesting is that
> when I used the option with HitCollector , FilteredQuery test is fail.
>
> Am I something missing or FilteredQuery with HitCollector is forbid  
> or a bug ?
>
>
> Please refer to the my test code.
>
> ----------------------------------------------------------
> import junit.framework.TestCase;
>
> import org.apache.lucene.analysis.cjk.CJKAnalyzer;
> import org.apache.lucene.document.Document;
> import org.apache.lucene.document.Field;
> import org.apache.lucene.document.NumberTools;
> import org.apache.lucene.index.IndexWriter;
> import org.apache.lucene.index.Term;
> import org.apache.lucene.search.Filter;
> import org.apache.lucene.search.FilteredQuery;
> import org.apache.lucene.search.HitCollector;
> import org.apache.lucene.search.Hits;
> import org.apache.lucene.search.IndexSearcher;
> import org.apache.lucene.search.Query;
> import org.apache.lucene.search.RangeFilter;
> import org.apache.lucene.search.Searcher;
> import org.apache.lucene.search.TermQuery;
> import org.apache.lucene.store.Directory;
> import org.apache.lucene.store.RAMDirectory;
>
> import java.io.IOException;
> import java.io.Serializable;
>
> import java.util.Collection;
> import java.util.HashSet;
>
> public class FilteredRangeQueryTest extends TestCase
> {
>     private Directory ramDir;
>
>     protected void setUp() throws Exception
>     {
>         ramDir = new RAMDirectory();
>         addDocuments();
>     }
>
>     public void testRangeQuery()
>         throws Exception
>     {
>         IndexSearcher searcher = new IndexSearcher(ramDir);
>
>         Filter filter = RangeFilter.Less("num",  
> NumberTools.longToString(1L));
>
>         Term term = new Term("attid", NumberTools.longToString(113L));
>         Query query = new TermQuery(term);
>
>         Hits hits = searcher.search(query, filter);
>
>         assertEquals(0, hits.length());
>
>         HitCollector hitCollector = new TestHitCollector();
>
>         ((TestHitCollector) hitCollector).setSearcher(searcher);
>
>         //////// This test is Pass !!!!  ////////////////
>         searcher.search(query, filter, hitCollector);
>         assertEquals(0, ((TestHitCollector) hitCollector).getIds 
> ().size());
>     }
>
>     public void testFilteredQuery()
>         throws Exception
>     {
>         IndexSearcher searcher = new IndexSearcher(ramDir);
>
>         Filter filter = RangeFilter.Less("num",  
> NumberTools.longToString(1L));
>
>         Term term = new Term("attid", NumberTools.longToString(113L));
>         Query query = new TermQuery(term);
>
>         FilteredQuery fq = new FilteredQuery(query, filter);
>
>         Hits hits = searcher.search(fq);
>
>         assertEquals(0, hits.length());
>
>         HitCollector hitCollector = new TestHitCollector();
>
>         ((TestHitCollector) hitCollector).setSearcher(searcher);
>
>         ////////// This test is FAIL !!!! //////////////
>         searcher.search(fq, hitCollector);
>         assertEquals(0, ((TestHitCollector) hitCollector).getIds 
> ().size());
>     }
>
>     private void addDocuments()
>         throws IOException
>     {
>         IndexWriter writer = new IndexWriter(ramDir, new CJKAnalyzer 
> (), true);
>
>         Document doc = new Document();
>
>         doc.add(Field.Keyword("num", NumberTools.longToString 
> (1000L)));
>         doc.add(Field.Keyword("attid", NumberTools.longToString 
> (113L)));
>         doc.add(Field.Keyword("itid", "111"));
>         writer.addDocument(doc);
>
>         writer.optimize();
>         writer.close();
>     }
>
>     public class TestHitCollector extends HitCollector implements  
> Serializable
>     {
>         private transient Searcher searcher;
>         private transient Collection res;
>
>         public TestHitCollector()
>         {
>         }
>
>         public void setSearcher(Searcher searcher)
>         {
>             res = new HashSet();
>             this.searcher = searcher;
>         }
>
>         public void collect(int i, float v)
>         {
>             try
>             {
>                 final Document doc = searcher.doc(i);
>
>                 res.add(doc.get("itid"));
>             }
>             catch (IOException e)
>             {
>                 // ignored
>             }
>         }
>
>         public Collection getIds()
>         {
>             return res;
>         }
>     }
> }
>
>
> Thanks,
>
> Youngho


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org


Mime
View raw message