pylucene 3.5.0-3
[pylucene.git] / lucene-java-3.5.0 / lucene / contrib / queries / src / test / org / apache / lucene / search / TermsFilterTest.java
1 package org.apache.lucene.search;
2
3 /**
4  * Licensed to the Apache Software Foundation (ASF) under one or more
5  * contributor license agreements.  See the NOTICE file distributed with
6  * this work for additional information regarding copyright ownership.
7  * The ASF licenses this file to You under the Apache License, Version 2.0
8  * (the "License"); you may not use this file except in compliance with
9  * the License.  You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 import java.util.HashSet;
21
22 import org.apache.lucene.document.Document;
23 import org.apache.lucene.document.Field;
24 import org.apache.lucene.index.IndexReader;
25 import org.apache.lucene.index.MultiReader;
26 import org.apache.lucene.index.RandomIndexWriter;
27 import org.apache.lucene.index.Term;
28 import org.apache.lucene.store.Directory;
29 import org.apache.lucene.util.FixedBitSet;
30 import org.apache.lucene.util.LuceneTestCase;
31
32 public class TermsFilterTest extends LuceneTestCase {
33   
34         public void testCachability() throws Exception
35         {
36                 TermsFilter a=new TermsFilter();
37                 a.addTerm(new Term("field1","a"));
38                 a.addTerm(new Term("field1","b"));
39                 HashSet<Filter> cachedFilters=new HashSet<Filter>();
40                 cachedFilters.add(a);
41                 TermsFilter b=new TermsFilter();
42                 b.addTerm(new Term("field1","a"));
43                 b.addTerm(new Term("field1","b"));
44                 
45                 assertTrue("Must be cached",cachedFilters.contains(b));
46                 b.addTerm(new Term("field1","a")); //duplicate term
47                 assertTrue("Must be cached",cachedFilters.contains(b));
48                 b.addTerm(new Term("field1","c"));
49                 assertFalse("Must not be cached",cachedFilters.contains(b));
50         }
51         
52         public void testMissingTerms() throws Exception {
53                 String fieldName="field1";
54                 Directory rd=newDirectory();
55                 RandomIndexWriter w = new RandomIndexWriter(random, rd);
56                 for (int i = 0; i < 100; i++) {
57                         Document doc=new Document();
58                         int term=i*10; //terms are units of 10;
59                         doc.add(newField(fieldName,""+term,Field.Store.YES,Field.Index.NOT_ANALYZED));
60                         w.addDocument(doc);                     
61                 }
62                 IndexReader reader = w.getReader();
63                 w.close();
64                 
65                 TermsFilter tf=new TermsFilter();
66                 tf.addTerm(new Term(fieldName,"19"));
67                 FixedBitSet bits = (FixedBitSet)tf.getDocIdSet(reader);
68                 assertEquals("Must match nothing", 0, bits.cardinality());
69
70                 tf.addTerm(new Term(fieldName,"20"));
71                 bits = (FixedBitSet)tf.getDocIdSet(reader);
72                 assertEquals("Must match 1", 1, bits.cardinality());
73                 
74                 tf.addTerm(new Term(fieldName,"10"));
75                 bits = (FixedBitSet)tf.getDocIdSet(reader);
76                 assertEquals("Must match 2", 2, bits.cardinality());
77                 
78                 tf.addTerm(new Term(fieldName,"00"));
79                 bits = (FixedBitSet)tf.getDocIdSet(reader);
80                 assertEquals("Must match 2", 2, bits.cardinality());
81                 
82                 reader.close();
83                 rd.close();
84         }
85
86   public void testMissingField() throws Exception {
87     String fieldName = "field1";
88     Directory rd1 = newDirectory();
89     RandomIndexWriter w1 = new RandomIndexWriter(random, rd1);
90     Document doc = new Document();
91     doc.add(newField(fieldName, "content1", Field.Store.YES, Field.Index.NOT_ANALYZED));
92     w1.addDocument(doc);
93     IndexReader reader1 = w1.getReader();
94     w1.close();
95     
96     fieldName = "field2";
97     Directory rd2 = newDirectory();
98     RandomIndexWriter w2 = new RandomIndexWriter(random, rd2);
99     doc = new Document();
100     doc.add(newField(fieldName, "content2", Field.Store.YES, Field.Index.NOT_ANALYZED));
101     w2.addDocument(doc);
102     IndexReader reader2 = w2.getReader();
103     w2.close();
104     
105     TermsFilter tf = new TermsFilter();
106     tf.addTerm(new Term(fieldName, "content1"));
107     
108     MultiReader multi = new MultiReader(reader1, reader2);
109     for (IndexReader sub : multi.getSequentialSubReaders()) {
110       FixedBitSet bits = (FixedBitSet) tf.getDocIdSet(sub);
111       assertTrue("Must be >= 0", bits.cardinality() >= 0);      
112     }
113     multi.close();
114     reader1.close();
115     reader2.close();
116     rd1.close();
117     rd2.close();
118   }
119 }