Return-Path: X-Original-To: apmail-lucene-java-user-archive@www.apache.org Delivered-To: apmail-lucene-java-user-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D2788D59D for ; Wed, 10 Oct 2012 00:17:25 +0000 (UTC) Received: (qmail 31774 invoked by uid 500); 10 Oct 2012 00:17:23 -0000 Delivered-To: apmail-lucene-java-user-archive@lucene.apache.org Received: (qmail 31729 invoked by uid 500); 10 Oct 2012 00:17:23 -0000 Mailing-List: contact java-user-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: java-user@lucene.apache.org Delivered-To: mailing list java-user@lucene.apache.org Received: (qmail 31719 invoked by uid 99); 10 Oct 2012 00:17:23 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 10 Oct 2012 00:17:23 +0000 X-ASF-Spam-Status: No, hits=2.5 required=5.0 tests=FREEMAIL_REPLY,HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of vfunstein@gmail.com designates 209.85.215.48 as permitted sender) Received: from [209.85.215.48] (HELO mail-la0-f48.google.com) (209.85.215.48) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 10 Oct 2012 00:17:17 +0000 Received: by mail-la0-f48.google.com with SMTP id u2so3844074lag.35 for ; Tue, 09 Oct 2012 17:16:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=8coC8w7Qu4i8NknPEx3pi8HpJ2APulP5GITcVe7W1Gw=; b=OV/Ui7sCdtEn44EZV17RpNKMaez9nkgCZ3Iw3CRmU1DlpKWmnMBWsMyuSnfzjspBKJ y7U2FbfrPcDk7WOpp0/Jd+33YI6vh6TG1T41GnbGbXKV0849pwq3whcmUMdoX0Skn2cr EVNc7Ye2wjr1Au+XRiOKBkR8QAMsSKZ6n/FvAlcdBH0cqq5XSjkOaDg0/VKrRnHFl4IH 4ibS8Q3kVYkQeUcfyXlvNWCGTNxgcDmd3WEyGUpiSkDQHNqlcQHzvNV6pdobTtykV+zx JXFFVy4NIyjtcIaozEwqTtfqwraTxtRyn+J2FAehw2qRwDgotrlKqqqSMYssbBgUDEul ZDyg== MIME-Version: 1.0 Received: by 10.152.133.140 with SMTP id pc12mr18372003lab.53.1349828216517; Tue, 09 Oct 2012 17:16:56 -0700 (PDT) Received: by 10.114.13.161 with HTTP; Tue, 9 Oct 2012 17:16:56 -0700 (PDT) In-Reply-To: References: Date: Tue, 9 Oct 2012 17:16:56 -0700 Message-ID: Subject: Re: Lucene 4.0-BETA : MultiReader isCurrent openIfChanged From: Vitaly Funstein To: java-user@lucene.apache.org Content-Type: multipart/alternative; boundary=f46d042dfe995a745104cba95f88 --f46d042dfe995a745104cba95f88 Content-Type: text/plain; charset=ISO-8859-1 You have probably figured it out by now, but my suggestion would be to use SearcherManager the way it is documented for maintaining a searcher backed by an NRT reader. On Sun, Aug 26, 2012 at 2:03 PM, Mossaab Bagdouri wrote: > Thanks for the quick reply. > > I've changed my code to the following. The problem now is that the > MultiReader doesn't seem to get closed. In fact, the number of open files > (returned by "lsof | grep index/ | wc -l") keeps increasing whenever the > IndexWriter adds new documents until the webapp crashes. Am I missing > something? > > private IndexSearcher getIndexSearcher() { > try { > boolean refresh = false; > if (is == null) { > refresh = true; > } else { > MultiReader ir = ((MultiReader) is.getIndexReader()); > if (ir.getRefCount() == 0) { > refresh = true; > } else { > for (DirectoryReader dr : (List) > ir.getSequentialSubReaders()) { > if (!dr.isCurrent()) { > refresh = true; > ir.close(); > break; > } > } > } > } > > if (refresh) { > DirectoryReader readers[] = new DirectoryReader[2]; > for (int i = 0; i < 2; i++) { > readers[i] = > DirectoryReader.open(MyFSDirectories.get(i)); > } > is = new IndexSearcher(new MultiReader(readers, true)); > } > } catch (Exception e) { > e.printStackTrace(); > } > return is; > } > > Regards, > Mossaab > > 2012/8/26 Uwe Schindler > > > 1. getRefCount() > > 2. No > > > > > > > > Mossaab Bagdouri schrieb: > > > > >Hi, > > > > > >I've just migrated my webapp from Lucene 3.6 to 4.0-BETA. My 2 indexes > > >are > > >updated every couple of minutes by a batch. The webapp searcher needs > > >to > > >get refreshed whenever this happens. In 3.6, I was doing it this way: > > > > > >private IndexSearcher getIndexSearcher() { > > > try { > > > if (is == null || !is.getIndexReader().isCurrent()) { > > > if (is != null) { > > > is.close(); > > > } > > > IndexReader readers[] = new IndexReader[2]; > > > for (int i = 0; i < 2; i++) { > > > readers[i] = IndexReader.open(MyFSDirectories.get(i)); > > > } > > > is = new IndexSearcher(new MultiReader(readers)); > > > } > > > } catch (Exception e) { > > > e.printStackTrace(); > > > } > > > return is; > > > } > > > > > >Now that the API changed in 4.0-BETA. I'm doing it this odd way: > > > > > >private IndexSearcher getIndexSearcher() { > > > try { > > > boolean refresh = false; > > > if (is == null) { > > > refresh = true; > > > } else { > > > MultiReader ir = ((MultiReader) is.getIndexReader()); > > > List list = (List) > > >ir.getSequentialSubReaders(); > > > try { > > > if (!list.get(0).isCurrent() || > > >!list.get(1).isCurrent()) { > > > refresh = true; > > > } > > > } catch (Exception e) { > > > e.printStackTrace(); > > > refresh = true; > > > } > > > > > > } > > > if (refresh) { > > > if (is != null) { > > > ((MultiReader) is.getIndexReader()).close(); > > > } > > > DirectoryReader readers[] = new DirectoryReader[2]; > > > for (int i = 0; i < 2; i++) { > > > readers[i] = > > >DirectoryReader.open(MyFSDirectories.get(i)); > > > } > > > is = new IndexSearcher(new MultiReader(readers)); > > > } > > > } catch (Exception e) { > > > e.printStackTrace(); > > > } > > > return is; > > > } > > > > > >The problem is that sometimes isCurrent() returns an exception > > >indicating > > >that the underlying IndexReader is closed. > > > > > >My questions are: > > >1. How can I verify of the IndexReader is open before calling > > >isCurrent(); > > >2. Is there a better way to deal with MultiReaders? > > > > > >Regards, > > >Mossaab > > > > -- > > Uwe Schindler > > H.-H.-Meier-Allee 63, 28213 Bremen > > http://www.thetaphi.de > --f46d042dfe995a745104cba95f88--