cutting 2002/08/05 11:05:56
Modified: . CHANGES.txt
Added: src/java/org/apache/lucene/search QueryFilter.java
Log:
Added QueryFilter class.
Revision Changes Path
1.30 +13 -2 jakarta-lucene/CHANGES.txt
Index: CHANGES.txt
===================================================================
RCS file: /home/cvs/jakarta-lucene/CHANGES.txt,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- CHANGES.txt 5 Aug 2002 17:39:03 -0000 1.29
+++ CHANGES.txt 5 Aug 2002 18:05:56 -0000 1.30
@@ -71,7 +71,18 @@
have been removed.
Finally, repeating a token with an increment of zero can also be
- used to boost scores of matches on that token.
+ used to boost scores of matches on that token. (cutting)
+
+ 14. Added new Filter class, QueryFilter. This constrains search
+ results to only match those which also match a provided query.
+ Results are cached, so that searches after the first on the same
+ index using this filter are very fast.
+
+ This could be used, for example, with a RangeQuery on a formatted
+ date field to implement date filtering. One could re-use a
+ single QueryFilter that matches, e.g., only documents modified
+ within the last week. The QueryFilter and RangeQuery would only
+ need to be reconstructed once per day. (cutting)
1.2 RC6
1.1 jakarta-lucene/src/java/org/apache/lucene/search/QueryFilter.java
Index: QueryFilter.java
===================================================================
package org.apache.lucene.search;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Lucene" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Lucene", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.IOException;
import java.util.WeakHashMap;
import java.util.BitSet;
import org.apache.lucene.index.IndexReader;
/** Constrains search results to only match those which also match a provided
* query. Results are cached, so that searches after the first on the same
* index using this filter are much faster.
*
* <p> This could be used, for example, with a {@link RangeQuery} on a suitably
* formatted date field to implement date filtering. One could re-use a single
* QueryFilter that matches, e.g., only documents modified within the last
* week. The QueryFilter and RangeQuery would only need to be reconstructed
* once per day.
*/
public class QueryFilter extends Filter {
private Query query;
private transient WeakHashMap cache = new WeakHashMap();
/** Constructs a filter which only matches documents matching
* <code>query</code>.
*/
public QueryFilter(Query query) {
this.query = query;
}
public BitSet bits(IndexReader reader) throws IOException {
synchronized (cache) { // check cache
BitSet cached = (BitSet)cache.get(reader);
if (cached != null)
return cached;
}
final BitSet bits = new BitSet(reader.maxDoc());
new IndexSearcher(reader).search(query, new HitCollector() {
public final void collect(int doc, float score) {
bits.set(doc); // set bit for hit
}
});
synchronized (cache) { // update cache
cache.put(reader, bits);
}
return bits;
}
}
--
To unsubscribe, e-mail: <mailto:lucene-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:lucene-dev-help@jakarta.apache.org>
Modified: . CHANGES.txt
Added: src/java/org/apache/lucene/search QueryFilter.java
Log:
Added QueryFilter class.
Revision Changes Path
1.30 +13 -2 jakarta-lucene/CHANGES.txt
Index: CHANGES.txt
===================================================================
RCS file: /home/cvs/jakarta-lucene/CHANGES.txt,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- CHANGES.txt 5 Aug 2002 17:39:03 -0000 1.29
+++ CHANGES.txt 5 Aug 2002 18:05:56 -0000 1.30
@@ -71,7 +71,18 @@
have been removed.
Finally, repeating a token with an increment of zero can also be
- used to boost scores of matches on that token.
+ used to boost scores of matches on that token. (cutting)
+
+ 14. Added new Filter class, QueryFilter. This constrains search
+ results to only match those which also match a provided query.
+ Results are cached, so that searches after the first on the same
+ index using this filter are very fast.
+
+ This could be used, for example, with a RangeQuery on a formatted
+ date field to implement date filtering. One could re-use a
+ single QueryFilter that matches, e.g., only documents modified
+ within the last week. The QueryFilter and RangeQuery would only
+ need to be reconstructed once per day. (cutting)
1.2 RC6
1.1 jakarta-lucene/src/java/org/apache/lucene/search/QueryFilter.java
Index: QueryFilter.java
===================================================================
package org.apache.lucene.search;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Lucene" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Lucene", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.IOException;
import java.util.WeakHashMap;
import java.util.BitSet;
import org.apache.lucene.index.IndexReader;
/** Constrains search results to only match those which also match a provided
* query. Results are cached, so that searches after the first on the same
* index using this filter are much faster.
*
* <p> This could be used, for example, with a {@link RangeQuery} on a suitably
* formatted date field to implement date filtering. One could re-use a single
* QueryFilter that matches, e.g., only documents modified within the last
* week. The QueryFilter and RangeQuery would only need to be reconstructed
* once per day.
*/
public class QueryFilter extends Filter {
private Query query;
private transient WeakHashMap cache = new WeakHashMap();
/** Constructs a filter which only matches documents matching
* <code>query</code>.
*/
public QueryFilter(Query query) {
this.query = query;
}
public BitSet bits(IndexReader reader) throws IOException {
synchronized (cache) { // check cache
BitSet cached = (BitSet)cache.get(reader);
if (cached != null)
return cached;
}
final BitSet bits = new BitSet(reader.maxDoc());
new IndexSearcher(reader).search(query, new HitCollector() {
public final void collect(int doc, float score) {
bits.set(doc); // set bit for hit
}
});
synchronized (cache) { // update cache
cache.put(reader, bits);
}
return bits;
}
}
--
To unsubscribe, e-mail: <mailto:lucene-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:lucene-dev-help@jakarta.apache.org>