Hi,

I'm observing below issue while getting instance of indexWriter after releasing 
searcher from searcherManager

java.lang.IllegalArgumentException: Directory 
MMapDirectory@C:\work\egain\eService\index\ARTICLE_201606160754 
lockFactory=org.apache.lucene.store.NativeFSLockFactory@1ec79746 still has 
pending deleted files; cannot initialize IndexWriter
      at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:767)

I'm suspecting issue may be with the MultiSearcher that I'm using for searcher 
over multiple index folders.

I'm getting the searcher instance by using below code -  (Note: Searchable is 
the object of searchManager)

IndexReader[] readers = new IndexReader[searchables.length];
IndexSearcher[] tempSearchers = new IndexSearcher[searchables.length];
for (int i = 0; i < searchables.length; i++)
{
tempSearchers[i] = searchables[i].getSearcher(callerContext);
readers[i] = (tempSearchers[i]).getIndexReader();
}
MultiReader multiReader = new MultiReader(readers, false);
IndexSearcher searcher = new IndexSearcher(multiReader);

and releasing the searchManager using the below code-

for (int i = 0; i < searchables.length; i++)
try
{
searchables[i].releaseSearcher(tempSearchers[i]);
      }
catch (IOException e)
{
mLogger.logException(Level.ERROR, callerContext, mSrcInfo, "Falied to release 
searcher ", e);
}
}

Do you think it's right way to use MultiSearcher? If not, please suggest a way 
to use MultiSearcher.

Thanks,
Mukul Ranjan

Visit eGain on YouTube<https://www.youtube.com/user/egainchannel> and 
LinkedIn<https://www.linkedin.com/company/egain-corporation>

Reply via email to