Return-Path: Delivered-To: apmail-lucene-java-commits-archive@www.apache.org Received: (qmail 3636 invoked from network); 25 Apr 2007 21:11:06 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 25 Apr 2007 21:11:06 -0000 Received: (qmail 11739 invoked by uid 500); 25 Apr 2007 21:11:13 -0000 Delivered-To: apmail-lucene-java-commits-archive@lucene.apache.org Received: (qmail 11712 invoked by uid 500); 25 Apr 2007 21:11:13 -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 11698 invoked by uid 99); 25 Apr 2007 21:11:13 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 25 Apr 2007 14:11:13 -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, 25 Apr 2007 14:11:05 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 4A2541A9838; Wed, 25 Apr 2007 14:10:45 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r532487 - in /lucene/java/trunk: CHANGES.txt src/java/org/apache/lucene/search/MultiSearcher.java src/test/org/apache/lucene/search/TestMultiSearcher.java Date: Wed, 25 Apr 2007 21:10:45 -0000 To: java-commits@lucene.apache.org From: doronc@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070425211045.4A2541A9838@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: doronc Date: Wed Apr 25 14:10:43 2007 New Revision: 532487 URL: http://svn.apache.org/viewvc?view=rev&rev=532487 Log: LUCENE-789: fix MultiSearcher to not ignore its custom similarity. Modified: lucene/java/trunk/CHANGES.txt lucene/java/trunk/src/java/org/apache/lucene/search/MultiSearcher.java lucene/java/trunk/src/test/org/apache/lucene/search/TestMultiSearcher.java Modified: lucene/java/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?view=diff&rev=532487&r1=532486&r2=532487 ============================================================================== --- lucene/java/trunk/CHANGES.txt (original) +++ lucene/java/trunk/CHANGES.txt Wed Apr 25 14:10:43 2007 @@ -105,6 +105,11 @@ 13. LUCENE-736: Sloppy phrase query with repeating terms matches wrong docs. For example query "B C B"~2 matches the doc "A B C D E". (Doron Cohen) +14. LUCENE-789: Fixed: custom similarity is ignored when using MultiSearcher (problem reported + by Alexey Lef). Now the similarity applied by MultiSearcer.setSimilarity(sim) is being used. + Note that as before this fix, creating a multiSearcher from Searchers for whom custom similarity + was set has no effect - it is masked by the similarity of the MultiSearcher. This is as + designed, because MultiSearcher operates on Searchables (not Searchers). (Doron Cohen) New features Modified: lucene/java/trunk/src/java/org/apache/lucene/search/MultiSearcher.java URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/MultiSearcher.java?view=diff&rev=532487&r1=532486&r2=532487 ============================================================================== --- lucene/java/trunk/src/java/org/apache/lucene/search/MultiSearcher.java (original) +++ lucene/java/trunk/src/java/org/apache/lucene/search/MultiSearcher.java Wed Apr 25 14:10:43 2007 @@ -43,9 +43,10 @@ private Map dfMap; // Map from Terms to corresponding doc freqs private int maxDoc; // document count - public CachedDfSource(Map dfMap, int maxDoc) { + public CachedDfSource(Map dfMap, int maxDoc, Similarity similarity) { this.dfMap = dfMap; this.maxDoc = maxDoc; + setSimilarity(similarity); } public int docFreq(Term term) { @@ -106,7 +107,7 @@ public TopFieldDocs search(Weight weight,Filter filter,int n,Sort sort) { throw new UnsupportedOperationException(); } - }; + } private Searchable[] searchables; @@ -320,7 +321,7 @@ // step4 int numDocs = maxDoc(); - CachedDfSource cacheSim = new CachedDfSource(dfMap, numDocs); + CachedDfSource cacheSim = new CachedDfSource(dfMap, numDocs, getSimilarity()); return rewrittenQuery.weight(cacheSim); } Modified: lucene/java/trunk/src/test/org/apache/lucene/search/TestMultiSearcher.java URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/search/TestMultiSearcher.java?view=diff&rev=532487&r1=532486&r2=532487 ============================================================================== --- lucene/java/trunk/src/test/org/apache/lucene/search/TestMultiSearcher.java (original) +++ lucene/java/trunk/src/test/org/apache/lucene/search/TestMultiSearcher.java Wed Apr 25 14:10:43 2007 @@ -354,4 +354,42 @@ ramDirectory1.close(); ramDirectory2.close(); } + + /** + * test that custom similarity is in effect when using MultiSearcher (LUCENE-789). + * @throws IOException + */ + public void testCustomSimilarity () throws IOException { + RAMDirectory dir = new RAMDirectory(); + initIndex(dir, 10, true, "x"); // documents with two tokens "doc0" and "x", "doc1" and x, etc... + IndexSearcher srchr = new IndexSearcher(dir); + MultiSearcher msrchr = getMultiSearcherInstance(new Searcher[]{srchr}); + + Similarity customSimilarity = new DefaultSimilarity() { + // overide all + public float idf(int docFreq, int numDocs) { return 100.0f; } + public float coord(int overlap, int maxOverlap) { return 1.0f; } + public float lengthNorm(String fieldName, int numTokens) { return 1.0f; } + public float queryNorm(float sumOfSquaredWeights) { return 1.0f; } + public float sloppyFreq(int distance) { return 1.0f; } + public float tf(float freq) { return 1.0f; } + }; + + srchr.setSimilarity(customSimilarity); + msrchr.setSimilarity(customSimilarity); + + Query query=new TermQuery(new Term("contents", "doc0")); + + // Get a score from IndexSearcher + TopDocs topDocs = srchr.search(query, null, 1); + float score1 = topDocs.getMaxScore(); + + // Get the score from MultiSearcher + topDocs = msrchr.search(query, null, 1); + float scoreN = topDocs.getMaxScore(); + + // The scores from the IndexSearcher and Multisearcher should be the same + // if the same similarity is used. + assertEquals("MultiSearcher score must be equal to single esrcher score!", score1, scoreN, 1e-6); + } }