Return-Path: Delivered-To: apmail-lucene-java-dev-archive@www.apache.org Received: (qmail 55743 invoked from network); 1 May 2006 18:33:28 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 1 May 2006 18:33:28 -0000 Received: (qmail 83892 invoked by uid 500); 1 May 2006 18:33:26 -0000 Delivered-To: apmail-lucene-java-dev-archive@lucene.apache.org Received: (qmail 83580 invoked by uid 500); 1 May 2006 18:33:25 -0000 Mailing-List: contact java-dev-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-dev@lucene.apache.org Received: (qmail 83568 invoked by uid 99); 1 May 2006 18:33:25 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 01 May 2006 11:33:25 -0700 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received-SPF: neutral (asf.osuosl.org: local policy) Received: from [209.86.89.65] (HELO elasmtp-kukur.atl.sa.earthlink.net) (209.86.89.65) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 01 May 2006 11:33:24 -0700 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=dk20050327; d=ix.netcom.com; b=WpWrUqjPlrMbiwigf2cqpzKaGwCvhMmBMPbtdSYYtjysfywbFMI1FQWQOeuw2w/H; h=Received:Reply-To:From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:X-Priority:X-MSMail-Priority:X-Mailer:In-Reply-To:X-MimeOLE:Importance:X-ELNK-Trace:X-Originating-IP; Received: from [66.245.135.50] (helo=ENGELSSERVER) by elasmtp-kukur.atl.sa.earthlink.net with asmtp (Exim 4.34) id 1FadCg-00062p-HC; Mon, 01 May 2006 14:33:02 -0400 Reply-To: From: "Robert Engels" To: , "jason rutherglen" Subject: RE: GData, updateable IndexSearcher Date: Mon, 1 May 2006 13:33:06 -0500 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook IMO, Build 9.0.6604 (9.0.2911.0) In-Reply-To: <20060501182357.25220.qmail@web50008.mail.yahoo.com> X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 Importance: Normal X-ELNK-Trace: 33cbdd8ed9881ca8776432462e451d7bd15d05d9470ff710e6916b333bf3021871bbeabd4c1c2a8d350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c X-Originating-IP: 66.245.135.50 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N fyi, using my reopen(0 implementation (which rereads the deletions) on a 135mb index, with 5000 iterations open & close time using new reader = 585609 open & close time using reopen = 27422 Almost 20x faster. Important in a highly interactive/incremental updating index. -----Original Message----- From: jason rutherglen [mailto:jasonhusong@yahoo.com] Sent: Monday, May 01, 2006 1:24 PM To: java-dev@lucene.apache.org Subject: Re: GData, updateable IndexSearcher I wanted to post a quick hack to see if it is along the correct lines. A few of the questions regard whether to resuse existing MultiReaders or simply strip out only the SegmentReaders. I do a compare on the segment name and made it public. Thanks! public static IndexReader reopen(IndexReader indexReader) throws IOException { if (indexReader instanceof MultiReader) { MultiReader multiReader = (MultiReader)indexReader; SegmentInfos segmentInfos = new SegmentInfos(); segmentInfos.read(indexReader.directory()); if (segmentInfos.size() == 1) { // index is optimized return SegmentReader.get(segmentInfos, segmentInfos.info(0), false); } IndexReader[] existingIndexReaders = multiReader.getSubReaders(); // now go through and compare the segment readers Map existingSegmentMap = new HashMap(); getSegmentReaders(existingIndexReaders, existingSegmentMap); Map newSegmentInfosMap = new HashMap(); List newSegmentReaders = new ArrayList(); Iterator segmentInfosIterator = segmentInfos.iterator(); while (segmentInfosIterator.hasNext()) { SegmentInfo segmentInfo = (SegmentInfo)segmentInfosIterator.next(); if (!existingSegmentMap.containsKey(segmentInfo.name)) { // it's new SegmentReader newSegmentReader = SegmentReader.get(segmentInfo); newSegmentReaders.add(newSegmentReader); } } List allSegmentReaders = new ArrayList(); allSegmentReaders.add(multiReader); allSegmentReaders.addAll(newSegmentReaders); return new MultiReader(indexReader.directory(), segmentInfos, false, (IndexReader[])allSegmentReaders.toArray(new IndexReader[0])); } throw new RuntimeException("indexReader not supported at this time"); } public static void getSegmentReaders(IndexReader[] indexReaders, Map map) { for (int x=0; x < indexReaders.length; x++) { if (indexReaders[x] instanceof MultiReader) { MultiReader multiReader = (MultiReader)indexReaders[x]; IndexReader[] subReaders = multiReader.getSubReaders(); getSegmentReaders(subReaders, map); } else if (indexReaders[x] instanceof SegmentReader) { SegmentReader segmentReader = (SegmentReader)indexReaders[x]; map.put(segmentReader.segment, segmentReader); } } } --------------------------------------------------------------------- To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org For additional commands, e-mail: java-dev-help@lucene.apache.org