pylucene 3.5.0-3
[pylucene.git] / lucene-java-3.5.0 / lucene / src / java / org / apache / lucene / search / QueryWrapperFilter.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.io.IOException;
21
22
23 import org.apache.lucene.index.IndexReader;
24
25 /** 
26  * Constrains search results to only match those which also match a provided
27  * query.  
28  *
29  * <p> This could be used, for example, with a {@link TermRangeQuery} on a suitably
30  * formatted date field to implement date filtering.  One could re-use a single
31  * QueryFilter that matches, e.g., only documents modified within the last
32  * week.  The QueryFilter and TermRangeQuery would only need to be reconstructed
33  * once per day.
34  */
35 public class QueryWrapperFilter extends Filter {
36   private Query query;
37
38   /** Constructs a filter which only matches documents matching
39    * <code>query</code>.
40    */
41   public QueryWrapperFilter(Query query) {
42     this.query = query;
43   }
44
45   @Override
46   public DocIdSet getDocIdSet(final IndexReader reader) throws IOException {
47     final Weight weight = new IndexSearcher(reader).createNormalizedWeight(query);
48     return new DocIdSet() {
49       @Override
50       public DocIdSetIterator iterator() throws IOException {
51         return weight.scorer(reader, true, false);
52       }
53       @Override
54       public boolean isCacheable() { return false; }
55     };
56   }
57
58   @Override
59   public String toString() {
60     return "QueryWrapperFilter(" + query + ")";
61   }
62
63   @Override
64   public boolean equals(Object o) {
65     if (!(o instanceof QueryWrapperFilter))
66       return false;
67     return this.query.equals(((QueryWrapperFilter)o).query);
68   }
69
70   @Override
71   public int hashCode() {
72     return query.hashCode() ^ 0x923F64B9;
73   }
74 }