First, I decided I wasn't comfortable doing closes on the IndexReader.  So, I 
did what I hope is better.  I create a singleton SearcherManager 
(out-of-the-box from the 4.1 release) and do acquire/releases.  I assume that's 
more or less equivalent anyway.

Second, it doesn't really matter as I am still seeing the same slow searches.  
I'm becoming convinced that the problem is in the indexer (see below for why). 

 So, briefly, there are two parts to my use of lucene (all running on Windows). 
 The first part is a windows service that does the indexing.  It reads a 
directory which has new items to be indexed.  The indexing it does is totally 
serialized (meaning there are not multiple threads).  It completely indexes one 
document before it moves onto the next.  Even at that, I'm averaging about 14 
ms per document on a fairly old machine.  Each document is an xml file and 
averages about 4k bytes.

The searching happens in a tomcat web server.  Obviously, there may be multiple 
simultaneous searches.

Here's what I did today.  I did a full reindex (all the documents are in 
directories which I can walk on the local hard drive).  There were roughly 600k 
documents.  The reindex is a separate program which simply does the reindex and 
quits.  It opens the index, indexes all of the files (no commits), does a 
forceMerge, and then closes the writer (which I assume forces a commit).  
Neither the web server nor the index service were running while the reindex was 
going on (i.e., I don't think there was anything touching the index other than 
the reindex program itself).    The last thing the indexer does before closing 
the index is do a forceMerge(2).  Here's what the index directory looked like 
after the reindex completed (the value in parentheses is the total bytes for 
those files).

61 CFE (17.7KB)
61 CFS (2.09GB****)
61 si (16.9KB)
42 DEL (23.1KB
10 FDT (32.2 MB
10 FDX(12.8KB)
10 FRM 11.1KB
10 pos (157MB)
10 tim ( 28.7MB)
10 tip (582KB)
10 tvd (254kb)
10 tvf (232 MB)
10 tvx (2MB)
10 doc (62.5MB)
1 segment_1 (2KB)
1 segments.gen (1KB)

So, 377 files for a total 2.6GB and most of it in the CFS files.

I then restarted the windows service.  Since then (about 2 hours), there are 
now 82 CFS files.  51 of them range from 29.8 to 51.2 MB each (2.09GB total).

So, I'm pretty convinced the issue is in the indexing since I still haven't 
done any searching yet.

The index writer is initialized as follows:
            FSDirectory dir = FSDirectory.open(new File(indexDirectory));
            IndexWriterConfig iwc = new 
IndexWriterConfig(Constants.LUCENE_VERSION, 
                                                          oAnalyzer);
            
            LogByteSizeMergePolicy lbsm = new LogByteSizeMergePolicy();
            lbsm.setMaxMergeDocs(10);
            lbsm.setUseCompoundFile(true);
            iwc.setMergePolicy(lbsm);
            
            _oWriter = new IndexWriter(dir, iwc);

But I also notice that I added the following.  The intent was to have the 
writer flush the buffer when it had indexed enough documents to reach 50MB (an 
arbitrary number I picked out of the air because it felt right :-) ).  It seems 
odd to me that the maximum size of the CFS files is also about 50 MB.  So, I'm 
wondering if this affects the writer's ability to merge files.  

        // don't flush based on number of documents
        // flush based on buffer size
        
_oWriter.getConfig().setMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH)
                          .setRAMBufferSizeMB(50.0);

Any help in figuring out what is causing this problem would be appreciated.  I 
do now have an offline system that I can play with so I can do some intrusive 
things if need be.

Scott




-----Original Message-----
From: Scott Smith [mailto:ssm...@mainstreamdata.com] 
Sent: Saturday, March 16, 2013 1:28 PM
To: java-user@lucene.apache.org
Subject: RE: Lucene slow performance

Thanks for the help.

The reindex was done this morning and searches now take less than a second.

I will make the change to the code.

Cheers

Scott

-----Original Message-----
From: Uwe Schindler [mailto:u...@thetaphi.de]
Sent: Friday, March 15, 2013 11:17 PM
To: java-user@lucene.apache.org
Subject: RE: Lucene slow performance

Please forceMerge only one time not every time (only to clean up your index)! 
If you are doing a reindex already, just fix your close logic as discussed 
before. 



Scott Smith <ssm...@mainstreamdata.com> schrieb:

>Unfortunately, this is a production system which I can't touch (though 
>I was able to get a full reindex scheduled for tomorrow morning).
>
>Are you suggesting that I do:
>
>writer.forceMerge(1);
>writer.close();
>
>instead of just doing the close()?
>
>-----Original Message-----
>From: Simon Willnauer [mailto:simon.willna...@gmail.com]
>Sent: Friday, March 15, 2013 5:08 PM
>To: java-user@lucene.apache.org
>Subject: Re: Lucene slow performance
>
>On Sat, Mar 16, 2013 at 12:02 AM, Scott Smith 
><ssm...@mainstreamdata.com> wrote:
>> " Do you always close IndexWriter after adding few documents and when
>closing, disable "wait for merge"? In that case, all merges are 
>interrupted and the merge policy never has a chance to merge at all 
>(because you are opening and closing IndexWriter all the time with 
>cancelling all merges)?"
>>
>> Frankly I don't quite understand what this means.  When I "close" the
>indexwriter, I simply call close().  Is that the wrong thing?
>that should be fine...
>
>this sounds very odd though, do you see file that get actually removed 
>/ merged if you call IndexWriter#forceMerge(1)
>
>simon
>>
>> Thanks
>>
>> Scott
>>
>> -----Original Message-----
>> From: Uwe Schindler [mailto:u...@thetaphi.de]
>> Sent: Friday, March 15, 2013 4:49 PM
>> To: java-user@lucene.apache.org
>> Subject: RE: Lucene slow performance
>>
>> Hi,
>>
>> with standard configuartion, this cannot happen. What merge policy do
>you use? This looks to me like a misconfigured merge policy or using 
>the NoMergePolicy. With 3,000 segments, it will be slow, the question 
>is, why do you get those?
>>
>> Another thing could be: Do you always close IndexWriter after adding
>few documents and when closing, disable "wait for merge"? In that case, 
>all merges are interrupted and the merge policy never has a chance to 
>merge at all (because you are opening and closing IndexWriter all the 
>time with cancelling all merges)?
>>
>> Uwe
>>
>> -----
>> Uwe Schindler
>> H.-H.-Meier-Allee 63, D-28213 Bremen
>> http://www.thetaphi.de
>> eMail: u...@thetaphi.de
>>
>>> -----Original Message-----
>>> From: Scott Smith [mailto:ssm...@mainstreamdata.com]
>>> Sent: Friday, March 15, 2013 11:15 PM
>>> To: java-user@lucene.apache.org
>>> Subject: Lucene slow performance
>>>
>>> We have a system that is using lucene and the searches are very
>slow.
>>> The number of documents is fairly small (less than 30,000) and each 
>>> document is typically only 2 to 10 kilo-characters.  Yet, searches
>are taking 15-16 seconds.
>>>
>>> One of the things I noticed was that the index directory has several
>
>>> thousand
>>> (3000+) .cfs files.  We do optimize the index once per day.  This is
>
>>> a system that probably gets several thousand document deletes and 
>>> additions per day (spread out across the day).
>>>
>>> Any thoughts.  We didn't really notice this until we went to 4.x.
>>>
>>> Scott
>>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> 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

--
Uwe Schindler
H.-H.-Meier-Allee 63, 28213 Bremen
http://www.thetaphi.de
B KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKCB  [  
X  ܚX KK[XZ[
  ] K]\ \ ][  X  ܚX PX [ K \X K ܙ B  ܈Y][ۘ[  [X[  K[XZ[
  ] K]\ \ Z[X [ K \X K ܙ B B

Reply via email to