Return-Path: X-Original-To: apmail-lucene-dev-archive@www.apache.org Delivered-To: apmail-lucene-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8F613687D for ; Sat, 14 May 2011 07:26:35 +0000 (UTC) Received: (qmail 57510 invoked by uid 500); 14 May 2011 07:26:34 -0000 Delivered-To: apmail-lucene-dev-archive@lucene.apache.org Received: (qmail 56802 invoked by uid 500); 14 May 2011 07:26:33 -0000 Mailing-List: contact dev-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@lucene.apache.org Delivered-To: mailing list dev@lucene.apache.org Received: (qmail 56795 invoked by uid 99); 14 May 2011 07:26:31 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 14 May 2011 07:26:31 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,T_RP_MATCHES_RCVD X-Spam-Check-By: apache.org Received: from [140.211.11.116] (HELO hel.zones.apache.org) (140.211.11.116) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 14 May 2011 07:26:27 +0000 Received: from hel.zones.apache.org (hel.zones.apache.org [140.211.11.116]) by hel.zones.apache.org (Postfix) with ESMTP id 553D8B2130 for ; Sat, 14 May 2011 07:25:47 +0000 (UTC) Date: Sat, 14 May 2011 07:25:47 +0000 (UTC) From: "Uwe Schindler (JIRA)" To: dev@lucene.apache.org Message-ID: <452004996.12688.1305357947346.JavaMail.tomcat@hel.zones.apache.org> In-Reply-To: <59516446.12490.1305349847335.JavaMail.tomcat@hel.zones.apache.org> Subject: [jira] [Commented] (LUCENE-3096) MultiSearcher does not work correctly with Not on NumericRange MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/LUCENE-3096?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13033479#comment-13033479 ] Uwe Schindler commented on LUCENE-3096: --------------------------------------- This was also already reported and answered on the java-user@lao list: [http://www.gossamer-threads.com/lists/lucene/java-user/123996] > MultiSearcher does not work correctly with Not on NumericRange > -------------------------------------------------------------- > > Key: LUCENE-3096 > URL: https://issues.apache.org/jira/browse/LUCENE-3096 > Project: Lucene - Java > Issue Type: Bug > Components: Search > Affects Versions: 3.0.2 > Reporter: John Wang > > Hi, Keith > My colleague xiaoyang and I just confirmed that this is actually due to a lucene bug on Multisearcher. In particular, > If we search with Not on NumericRange and we use MultiSearcher, we > will wrong search results (However, if we use IndexSearcher, the > result is correct). Basically the NotOfNumericRange does not have > impact on multisearcher. We suspect it is because the createWeight() > function in MultiSearcher and hope you can help us to fix this bug of > lucene. I attached the code to reproduce this case. Please check it > out. > In the attached code, I have two separate functions : > (1) testNumericRangeSingleSearcher(Query query) > where I create 6 documents, with a field called "id"= 1,2,3,4,5,6 > respectively . Then I search by the query which is > +MatchAllDocs -NumericRange(3,3). The expected result then should > be 5 hits since the document 3 is MUST_NOT. > (2) testNumericRangeMultiSearcher(Query query) > where i create 2 RamDirectory(), each of which has 3 documents, > 1,2,3; and 4,5,6. Then I search by the same query as above using > multiSearcher. The expected result should also be 5 hits. > However, from (1), we get 5 hits = expected results, while in (2) we > get 6 hits != expected results. > We also experimented this with our zoie/bobo open source tools and get > the same results because our multi-bobo-browser is built on > multi-searcher in lucene. > I already emailed the lucene community group. Hopefully we can get some feedback soon. > If you have any further concern, pls let me know! > Thank you very much! > Code: (based on lucene 3.0.x) > import java.io.IOException; > import java.io.PrintStream; > import java.text.DecimalFormat; > import org.apache.lucene.analysis.WhitespaceAnalyzer; > import org.apache.lucene.document.Document; > import org.apache.lucene.document.Field; > import org.apache.lucene.document.NumericField; > import org.apache.lucene.index.CorruptIndexException; > import org.apache.lucene.index.IndexWriter; > import org.apache.lucene.index.Term; > import org.apache.lucene.search.BooleanQuery; > import org.apache.lucene.search.FieldCache; > import org.apache.lucene.search.IndexSearcher; > import org.apache.lucene.search.MatchAllDocsQuery; > import org.apache.lucene.search.MultiSearcher; > import org.apache.lucene.search.NumericRangeQuery; > import org.apache.lucene.search.Query; > import org.apache.lucene.search.ScoreDoc; > import org.apache.lucene.search.Searchable; > import org.apache.lucene.search.Sort; > import org.apache.lucene.search.SortField; > import org.apache.lucene.search.TermQuery; > import org.apache.lucene.search.TopDocs; > import org.apache.lucene.search.BooleanClause.Occur; > import org.apache.lucene.store.Directory; > import org.apache.lucene.store.LockObtainFailedException; > import org.apache.lucene.store.RAMDirectory; > import com.convertlucene.ConvertFrom2To3; > public class TestNumericRange > { > public final static void main(String[] args) > { > try > { > BooleanQuery query = new BooleanQuery(); > query.add(NumericRangeQuery.newIntRange("numId", 3, 3, true, > true), Occur.MUST_NOT); > query.add(new MatchAllDocsQuery(), Occur.MUST); > testNumericRangeSingleSearcher(query); > testNumericRangeMultiSearcher(query); > } > catch(Exception e) > { > e.printStackTrace(); > } > } > public static void testNumericRangeSingleSearcher(Query query) > throws CorruptIndexException, LockObtainFailedException, IOException > { > String[] ids = {"1", "2", "3", "4", "5", "6"}; > Directory directory = new RAMDirectory(); > IndexWriter writer = new IndexWriter(directory, new > WhitespaceAnalyzer(), IndexWriter.MaxFieldLength.UNLIMITED); > for (int i = 0; i < ids.length; i++) > { > Document doc = new Document(); > doc.add(new Field("id", ids[i], > Field.Store.YES, > Field.Index.NOT_ANALYZED)); > doc.add(new NumericField("numId").setIntValue(Integer.valueOf(ids[i]))); > writer.addDocument(doc); > } > writer.close(); > IndexSearcher searcher = new IndexSearcher(directory); > TopDocs docs = searcher.search(query, 10); > System.out.println("SingleSearcher: testNumericRange: hitNum: " + > docs.totalHits); > for(ScoreDoc doc : docs.scoreDocs) > { > System.out.println(searcher.explain(query, doc.doc)); > } > searcher.close(); > directory.close(); > } > public static void testNumericRangeMultiSearcher(Query query) throws > CorruptIndexException, LockObtainFailedException, IOException > { > String[] ids1 = {"1", "2", "3"}; > Directory directory1 = new RAMDirectory(); > IndexWriter writer1 = new IndexWriter(directory1, new > WhitespaceAnalyzer(), IndexWriter.MaxFieldLength.UNLIMITED); > for (int i = 0; i < ids1.length; i++) > { > Document doc = new Document(); > doc.add(new Field("id", ids1[i], > Field.Store.YES, > Field.Index.NOT_ANALYZED)); > doc.add(new NumericField("numId").setIntValue(Integer.valueOf(ids1[i]))); > writer1.addDocument(doc); > } > writer1.close(); > String[] ids2 = {"4", "5", "6"}; > Directory directory2 = new RAMDirectory(); > IndexWriter writer2 = new IndexWriter(directory2, new > WhitespaceAnalyzer(), IndexWriter.MaxFieldLength.UNLIMITED); > for (int i = 0; i < ids2.length; i++) > { > Document doc = new Document(); > doc.add(new Field("id", ids2[i], > Field.Store.YES, > Field.Index.NOT_ANALYZED)); > doc.add(new NumericField("numId").setIntValue(Integer.valueOf(ids2[i]))); > writer2.addDocument(doc); > } > writer2.close(); > IndexSearcher[] searchers = new IndexSearcher[2]; > searchers[0] = new IndexSearcher(directory1); > searchers[1] = new IndexSearcher(directory2); > MultiSearcher multiSearcher = new MultiSearcher(searchers); > TopDocs docs = multiSearcher.search(query, 10); > System.out.println("MultiSearcher: testNumericRange: hitNum: " + > docs.totalHits); > for(ScoreDoc doc : docs.scoreDocs) > { > System.out.println(multiSearcher.explain(query, doc.doc)); > } > multiSearcher.close(); > directory1.close(); > directory2.close(); > } > } -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org For additional commands, e-mail: dev-help@lucene.apache.org