I haven't been following this thread, but shouldn't you be replacing the old searcher in your list of searchers rather than just adding the new one on the end? Could be wrong - I find the names in your code snippet rather confusing.
-- Ian. On Wed, Jan 21, 2009 at 6:59 PM, Amin Mohammed-Coleman <ami...@gmail.com> wrote: > Hi > I did the following according to java docs: > > for (IndexSearcher indexSearcher: searchers) { > > IndexReader reader = indexSearcher.getIndexReader(); > > IndexReader newReader = reader.reopen(); > > if (newReader != reader) { > > reader.close(); > > } > > reader = newReader; > > IndexSearcher indexSearch = new IndexSearcher(reader); > > indexSearchers.add(indexSearch); > > } > > > First search works ok, susequent search result in: > > > org.apache.lucene.store.AlreadyClosedException: this IndexReader is closed > > > > Cheers > > > > On Wed, Jan 21, 2009 at 1:47 PM, Amin Mohammed-Coleman > <ami...@gmail.com>wrote: > >> Hi >> Will give that a go. >> >> Thanks >> >> Sent from my iPhone >> >> On 21 Jan 2009, at 12:26, "Ganesh" <emailg...@yahoo.co.in> wrote: >> >> I am closing the old reader and it is working fine for me. Refer to >>> IndexReader.Reopen javadoc. >>> >>> ///Below is the code snipper from IndexReader.reopen javadoc >>> >>> IndexReader reader = ... >>> ... >>> IndexReader new = r.reopen(); >>> if (new != reader) { >>> ... // reader was reopened >>> reader.close(); //Old reader is closed. >>> } >>> reader = new; >>> >>> Regards >>> Ganesh >>> >>> ----- Original Message ----- From: "Amin Mohammed-Coleman" < >>> ami...@gmail.com> >>> To: <java-user@lucene.apache.org> >>> Cc: <java-user@lucene.apache.org> >>> Sent: Wednesday, January 21, 2009 1:07 AM >>> >>> Subject: Re: Indexing and Searching Web Application >>> >>> >>> Hi >>>> >>>> Yes I am using the reopen method on indexreader. I am not closing the >>>> old indexer as per Ganesh's instruction. It seems to be working correctly >>>> so I presume it's ok not to close. >>>> >>>> Thanks >>>> >>>> >>>> Amin >>>> >>>> On 20 Jan 2009, at 19:27, "Angel, Eric" <ean...@business.com> wrote: >>>> >>>> There's a reopen() method in the IndexReader class. You can use that. >>>>> >>>>> -----Original Message----- >>>>> From: Amin Mohammed-Coleman [mailto:ami...@gmail.com] >>>>> Sent: Tuesday, January 20, 2009 5:02 AM >>>>> To: java-user@lucene.apache.org >>>>> Subject: Re: Indexing and Searching Web Application >>>>> >>>>> Am I supposed to close the oldIndexReader? I just tried this and I get >>>>> an >>>>> exception stating that the IndexReader is closed. >>>>> >>>>> Cheers >>>>> >>>>> On Tue, Jan 20, 2009 at 9:33 AM, Ganesh <emailg...@yahoo.co.in> wrote: >>>>> >>>>> Reopen the reader, only if it is modified. >>>>>> >>>>>> IndexReader oldIndexReader = indexSearcher.getIndexReader(); >>>>>> if (!oldIndexReader.isCurrent()) { >>>>>> IndexReader newIndexReader = oldIndexReader.reOpen(); >>>>>> oldIndexReader.close(); >>>>>> indexSearcher.close(); >>>>>> IndexSearcher indexSearch = new IndexSearcher(newIndexReader); >>>>>> } >>>>>> >>>>>> Regards >>>>>> Ganesh >>>>>> >>>>>> ----- Original Message ----- From: "Amin Mohammed-Coleman" < >>>>>> ami...@gmail.com> >>>>>> To: <java-user@lucene.apache.org> >>>>>> Sent: Tuesday, January 20, 2009 1:38 PM >>>>>> Subject: Re: Indexing and Searching Web Application >>>>>> >>>>>> >>>>>> >>>>>> Hi >>>>>> >>>>>>> >>>>>>> After your email I had a look around and came up with the below >>>>>>> solution (I'm not sure if this is the right approach or there is a >>>>>>> performance implication to doing this) >>>>>>> >>>>>>> public Summary[] search(SearchRequest searchRequest) { >>>>>>> List<Summary> summaryList = new ArrayList<Summary>(); >>>>>>> StopWatch stopWatch = new StopWatch("searchStopWatch"); >>>>>>> stopWatch.start(); >>>>>>> MultiSearcher multiSearcher = null; >>>>>>> List<IndexSearcher> newIndexSearchers = new >>>>>>> ArrayList<IndexSearcher>(); >>>>>>> try { >>>>>>> for (IndexSearcher indexSearcher: searchers) { >>>>>>> IndexReader indexReader = indexSearcher.getIndexReader().reopen(); >>>>>>> IndexSearcher indexSearch = new IndexSearcher(indexReader); >>>>>>> newIndexSearchers.add(indexSearch); >>>>>>> } >>>>>>> >>>>>>> multiSearcher = new MultiSearcher(newIndexSearchers.toArray(new >>>>>>> IndexSearcher[] {})); >>>>>>> QueryParser queryParser = new >>>>>>> MultiFieldQueryParser(FieldNameEnum.fieldNameDescriptions(), >>>>>>> >>>>>> analyzer); >>>>> >>>>>> Query query = queryParser.parse(searchRequest.getSearchTerm()); >>>>>>> >>>>>>> //TODO: Sort and Filters >>>>>>> >>>>>>> TopDocs topDocs = multiSearcher.search(query, 100); >>>>>>> ScoreDoc[] scoreDocs = topDocs.scoreDocs; >>>>>>> LOGGER.debug("total number of hits for [" + query.toString() + " ] >>>>>>> = " +topDocs.totalHits); >>>>>>> >>>>>>> for (ScoreDoc scoreDoc : scoreDocs) { >>>>>>> final Document doc = multiSearcher.doc(scoreDoc.doc); >>>>>>> float score = scoreDoc.score; >>>>>>> final BaseDocument baseDocument = new BaseDocument(doc, score); >>>>>>> Summary documentSummary = new DocumentSummaryImpl(baseDocument); >>>>>>> summaryList.add(documentSummary); >>>>>>> } >>>>>>> >>>>>>> } catch (Exception e) { >>>>>>> throw new IllegalStateException(e); >>>>>>> } >>>>>>> >>>>>>> stopWatch.stop(); >>>>>>> >>>>>>> LOGGER.debug("total time taken for seach: " + >>>>>>> stopWatch.getTotalTimeMillis() + " ms"); >>>>>>> return summaryList.toArray(new Summary[] {}); >>>>>>> } >>>>>>> >>>>>>> >>>>>>> The searchers are configured in spring using which looks like this: >>>>>>> >>>>>>> <bean id="rtfIndexSearcher" >>>>>>> class="org.apache.lucene.search.IndexSearcher" scope="prototype" >>>>>>> >>>>>> lazy- >>>>> >>>>>> init="true" > >>>>>>> <constructor-arg type="org.apache.lucene.store.Directory" >>>>>>> ref="rtfDirectory" /> >>>>>>> </bean> >>>>>>> >>>>>>> I set the dependencies on the DocumentSearcher class. >>>>>>> >>>>>>> >>>>>>> Cheers >>>>>>> Amin >>>>>>> >>>>>>> >>>>>>> On 19 Jan 2009, at 21:45, Amin Mohammed-Coleman wrote: >>>>>>> >>>>>>> I make a call to my search class which looks like this: >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> public Summary[] search(SearchRequest searchRequest) { >>>>>>>> List<Summary> summaryList = new ArrayList<Summary>(); >>>>>>>> StopWatch stopWatch = new StopWatch("searchStopWatch"); >>>>>>>> stopWatch.start(); >>>>>>>> MultiSearcher multiSearcher = null; >>>>>>>> try { >>>>>>>> multiSearcher = new MultiSearcher(searchers.toArray(new >>>>>>>> IndexSearcher[] {})); >>>>>>>> QueryParser queryParser = new >>>>>>>> MultiFieldQueryParser(FieldNameEnum.fieldNameDescriptions(), >>>>>>>> analyzer); >>>>>>>> Query query = queryParser.parse(searchRequest.getSearchTerm()); >>>>>>>> >>>>>>>> //TODO: Sort and Filters >>>>>>>> >>>>>>>> TopDocs topDocs = multiSearcher.search(query, 100); >>>>>>>> ScoreDoc[] scoreDocs = topDocs.scoreDocs; >>>>>>>> LOGGER.debug("total number of hits for [" + query.toString() + >>>>>>>> " ] = " +topDocs.totalHits); >>>>>>>> >>>>>>>> for (ScoreDoc scoreDoc : scoreDocs) { >>>>>>>> final Document doc = multiSearcher.doc(scoreDoc.doc); >>>>>>>> float score = scoreDoc.score; >>>>>>>> final BaseDocument baseDocument = new BaseDocument(doc, score); >>>>>>>> Summary documentSummary = new DocumentSummaryImpl(baseDocument); >>>>>>>> summaryList.add(documentSummary); >>>>>>>> } >>>>>>>> >>>>>>>> } catch (Exception e) { >>>>>>>> throw new IllegalStateException(e); >>>>>>>> } >>>>>>>> stopWatch.stop(); >>>>>>>> >>>>>>>> LOGGER.debug("total time taken for seach: " + >>>>>>>> stopWatch.getTotalTimeMillis() + " ms"); >>>>>>>> return summaryList.toArray(new Summary[] {}); >>>>>>>> } >>>>>>>> >>>>>>>> Do I need to do this explicitly? >>>>>>>> >>>>>>>> >>>>>>>> Cheers >>>>>>>> Amin >>>>>>>> >>>>>>>> On 19 Jan 2009, at 20:48, Greg Shackles wrote: >>>>>>>> >>>>>>>> After you make the commit to the index, are you reloading the index >>>>>>>> >>>>>>>>> in the >>>>>>>>> searchers? >>>>>>>>> >>>>>>>>> - Greg >>>>>>>>> >>>>>>>>> >>>>>>>>> On Mon, Jan 19, 2009 at 3:29 PM, Amin Mohammed-Coleman < >>>>>>>>> ami...@gmail.com >>>>>>>>> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>> >>>>>>>>> Hi >>>>>>>>> >>>>>>>>>> >>>>>>>>>> I have recently worked on developing an application which allows >>>>>>>>>> you to >>>>>>>>>> upload a file (which is indexed so you can search later). I have >>>>>>>>>> numerous >>>>>>>>>> tests to show that you can index and search documents (in some >>>>>>>>>> instances >>>>>>>>>> within the same test), however when I perform the operation in the >>>>>>>>>> site: >>>>>>>>>> >>>>>>>>>> 1) Upload File and Index >>>>>>>>>> 2) Search >>>>>>>>>> >>>>>>>>>> I don't get any hits. When I restart the application then if I >>>>>>>>>> >>>>>>>>> make >>>>> >>>>>> another search I can find the results. It seems as though indexes >>>>>>>>>> aren't >>>>>>>>>> being committed when I do the initial upload. This is strange. I >>>>>>>>>> explicitly call commit in my code when I upload the file. Has >>>>>>>>>> anyone >>>>>>>>>> experienced this before? >>>>>>>>>> >>>>>>>>>> Any help would be appreciated. >>>>>>>>>> >>>>>>>>>> Kind Regards >>>>>>>>>> >>>>>>>>>> Amin >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> --------------------------------------------------------------------- >>>>> >>>>>> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org >>>>>>>>>> For additional commands, e-mail: java-user-h...@lucene.apache.org >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>> >>>>>>> Send instant messages to your online friends >>>>>> >>>>> http://in.messenger.yahoo.com >>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org >>>>>> For additional commands, e-mail: java-user-h...@lucene.apache.org >>>>>> >>>>>> >>>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org >>>>> For additional commands, e-mail: java-user-h...@lucene.apache.org >>>>> >>>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org >>>> For additional commands, e-mail: java-user-h...@lucene.apache.org >>>> >>> >>> Send instant messages to your online friends >>> http://in.messenger.yahoo.com >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org >>> For additional commands, e-mail: java-user-h...@lucene.apache.org >>> >>> > --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org For additional commands, e-mail: java-user-h...@lucene.apache.org