Return-Path: Delivered-To: apmail-lucene-java-commits-archive@www.apache.org Received: (qmail 20258 invoked from network); 30 May 2007 23:09:47 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 30 May 2007 23:09:47 -0000 Received: (qmail 8838 invoked by uid 500); 30 May 2007 23:09:51 -0000 Delivered-To: apmail-lucene-java-commits-archive@lucene.apache.org Received: (qmail 8814 invoked by uid 500); 30 May 2007 23:09:51 -0000 Mailing-List: contact java-commits-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: java-dev@lucene.apache.org Delivered-To: mailing list java-commits@lucene.apache.org Received: (qmail 8803 invoked by uid 99); 30 May 2007 23:09:51 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 May 2007 16:09:51 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 May 2007 16:09:46 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 577521A981A; Wed, 30 May 2007 16:09:26 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r542968 - in /lucene/java/trunk: CHANGES.txt src/java/org/apache/lucene/search/FilteredQuery.java src/test/org/apache/lucene/search/TestFilteredQuery.java src/test/org/apache/lucene/search/TestSimpleExplanations.java Date: Wed, 30 May 2007 23:09:26 -0000 To: java-commits@lucene.apache.org From: buschmi@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070530230926.577521A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: buschmi Date: Wed May 30 16:09:25 2007 New Revision: 542968 URL: http://svn.apache.org/viewvc?view=rev&rev=542968 Log: LUCENE-698: FilteredQuery now takes the query boost into account for scoring. Modified: lucene/java/trunk/CHANGES.txt lucene/java/trunk/src/java/org/apache/lucene/search/FilteredQuery.java lucene/java/trunk/src/test/org/apache/lucene/search/TestFilteredQuery.java lucene/java/trunk/src/test/org/apache/lucene/search/TestSimpleExplanations.java Modified: lucene/java/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?view=diff&rev=542968&r1=542967&r2=542968 ============================================================================== --- lucene/java/trunk/CHANGES.txt (original) +++ lucene/java/trunk/CHANGES.txt Wed May 30 16:09:25 2007 @@ -147,6 +147,9 @@ anymore and ignored, but re-thrown. Some javadoc improvements. (Daniel Naber) +19. LUCENE-698: FilteredQuery now takes the query boost into account for + scoring. (Michael Busch) + New features 1. LUCENE-759: Added two n-gram-producing TokenFilters. Modified: lucene/java/trunk/src/java/org/apache/lucene/search/FilteredQuery.java URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/FilteredQuery.java?view=diff&rev=542968&r1=542967&r2=542968 ============================================================================== --- lucene/java/trunk/src/java/org/apache/lucene/search/FilteredQuery.java (original) +++ lucene/java/trunk/src/java/org/apache/lucene/search/FilteredQuery.java Wed May 30 16:09:25 2007 @@ -66,13 +66,20 @@ final Weight weight = query.createWeight (searcher); final Similarity similarity = query.getSimilarity(searcher); return new Weight() { - + private float value; + // pass these methods through to enclosed query's weight - public float getValue() { return weight.getValue(); } - public float sumOfSquaredWeights() throws IOException { return weight.sumOfSquaredWeights(); } - public void normalize (float v) { weight.normalize(v); } + public float getValue() { return value; } + public float sumOfSquaredWeights() throws IOException { + return weight.sumOfSquaredWeights() * getBoost() * getBoost(); + } + public void normalize (float v) { + weight.normalize(v); + value = weight.getValue() * getBoost(); + } public Explanation explain (IndexReader ir, int i) throws IOException { Explanation inner = weight.explain (ir, i); + inner.setValue(getBoost() * inner.getValue()); Filter f = FilteredQuery.this.filter; BitSet matches = f.bits(ir); if (matches.get(i)) @@ -121,11 +128,13 @@ return true; } - public float score() throws IOException { return scorer.score(); } + public float score() throws IOException { return getBoost() * scorer.score(); } // add an explanation about whether the document was filtered public Explanation explain (int i) throws IOException { Explanation exp = scorer.explain (i); + exp.setValue(getBoost() * exp.getValue()); + if (bitset.get(i)) exp.setDescription ("allowed by filter: "+exp.getDescription()); else Modified: lucene/java/trunk/src/test/org/apache/lucene/search/TestFilteredQuery.java URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/search/TestFilteredQuery.java?view=diff&rev=542968&r1=542967&r2=542968 ============================================================================== --- lucene/java/trunk/src/test/org/apache/lucene/search/TestFilteredQuery.java (original) +++ lucene/java/trunk/src/test/org/apache/lucene/search/TestFilteredQuery.java Wed May 30 16:09:25 2007 @@ -24,6 +24,7 @@ import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; +import org.apache.lucene.search.BooleanClause.Occur; import org.apache.lucene.store.RAMDirectory; import java.util.BitSet; @@ -116,7 +117,48 @@ filteredquery = new FilteredQuery (new TermQuery (new Term ("field", "y")), filter); hits = searcher.search (filteredquery); assertEquals (0, hits.length()); - QueryUtils.check(filteredquery,searcher); + QueryUtils.check(filteredquery,searcher); + + // test boost + Filter f = new Filter() { + public BitSet bits (IndexReader reader) { + BitSet bitset = new BitSet(5); + bitset.set(0, 5); + return bitset; + } + }; + + float boost = 2.5f; + BooleanQuery bq1 = new BooleanQuery(); + TermQuery tq = new TermQuery (new Term ("field", "one")); + tq.setBoost(boost); + bq1.add(tq, Occur.MUST); + bq1.add(new TermQuery (new Term ("field", "five")), Occur.MUST); + + BooleanQuery bq2 = new BooleanQuery(); + tq = new TermQuery (new Term ("field", "one")); + filteredquery = new FilteredQuery(tq, f); + filteredquery.setBoost(boost); + bq2.add(filteredquery, Occur.MUST); + bq2.add(new TermQuery (new Term ("field", "five")), Occur.MUST); + assertScoreEquals(bq1, bq2); + + assertEquals(boost, filteredquery.getBoost(), 0); + assertEquals(1.0f, tq.getBoost(), 0); // the boost value of the underlying query shouldn't have changed + } + + /** + * Tests whether the scores of the two queries are the same. + */ + public void assertScoreEquals(Query q1, Query q2) throws Exception { + Hits hits1 = searcher.search (q1); + Hits hits2 = searcher.search (q2); + + assertEquals(hits1.length(), hits2.length()); + + for (int i = 0; i < hits1.length(); i++) { + assertEquals(hits1.score(i), hits2.score(i), 0.0000001f); + } } /** @@ -145,4 +187,5 @@ QueryUtils.check(query,searcher); } } + Modified: lucene/java/trunk/src/test/org/apache/lucene/search/TestSimpleExplanations.java URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/search/TestSimpleExplanations.java?view=diff&rev=542968&r1=542967&r2=542968 ============================================================================== --- lucene/java/trunk/src/test/org/apache/lucene/search/TestSimpleExplanations.java (original) +++ lucene/java/trunk/src/test/org/apache/lucene/search/TestSimpleExplanations.java Wed May 30 16:09:25 2007 @@ -119,12 +119,6 @@ q.setBoost(1000); qtest(q, new int[] {3}); } - public void testFQ7() throws Exception { - Query q = new FilteredQuery(qp.parse("xx"), - new ItemizedFilter(new int[] {1,3})); - q.setBoost(0); - qtest(q, new int[] {3}); - } /* ConstantScoreQueries */