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

Reply via email to