Return-Path: Delivered-To: apmail-jakarta-lucene-dev-archive@apache.org Received: (qmail 23860 invoked from network); 5 Aug 2002 18:12:38 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 5 Aug 2002 18:12:38 -0000 Received: (qmail 21284 invoked by uid 97); 5 Aug 2002 18:12:53 -0000 Delivered-To: qmlist-jakarta-archive-lucene-dev@jakarta.apache.org Received: (qmail 20856 invoked by uid 97); 5 Aug 2002 18:12:48 -0000 Mailing-List: contact lucene-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Lucene Developers List" Reply-To: "Lucene Developers List" Delivered-To: mailing list lucene-dev@jakarta.apache.org Received: (qmail 20652 invoked by uid 98); 5 Aug 2002 18:12:46 -0000 X-Antivirus: nagoya (v4198 created Apr 24 2002) Message-ID: From: Scott Ganyo To: 'Lucene Developers List' Subject: RE: cvs commit: jakarta-lucene/src/java/org/apache/lucene/search QueryFilter.java Date: Mon, 5 Aug 2002 13:12:54 -0500 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2650.21) Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01C23CAB.B7E61AA0" X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N ------_=_NextPart_001_01C23CAB.B7E61AA0 Content-Type: text/plain; charset="iso-8859-1" I assume that this means that my suggestion (for making Hits work as a Filter) was discarded. Was there any particular reason why? Just curious... Scott > -----Original Message----- > From: cutting@apache.org [mailto:cutting@apache.org] > Sent: Monday, August 05, 2002 1:06 PM > To: jakarta-lucene-cvs@apache.org > Subject: cvs commit: jakarta-lucene/src/java/org/apache/lucene/search > QueryFilter.java > > > 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 > * . > */ > > 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. > * > *

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 > * query. > */ > 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: > > For additional commands, e-mail: > > ------_=_NextPart_001_01C23CAB.B7E61AA0--