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 > >