int expected = TestData.testdata.length;
while(!stop)
{
Searcher searcher = null;
List<ZoieIndexReader<IndexReader>> readers = null;
MultiReader reader=null;
try
{
readers=idxSystem.getIndexReaders();
reader=new MultiReader(readers.toArray(new IndexReader[readers.size()]),false);
searcher=new IndexSearcher(reader);
TopDocs hits = searcher.search(q,10);
int count = hits.totalHits;
if (count != expected)
{
mismatch = true;
message = "hit count: " + count +" / expected: "+expected;
stop = true;
StringBuffer sb = new StringBuffer();
sb.append(message + "\n");
sb.append("each\n");
sb.append(groupDump(readers, q));
sb.append("main\n");
sb.append(dump(reader, hits));
System.out.println(sb.toString());
log.info(sb.toString());
}
Thread.sleep(20);
}
catch(Exception ex)
{
ex.printStackTrace();
exception = ex;
stop = true;
}
finally
{
try{
if (searcher != null){
searcher.close();
reader.close();
reader = null;
searcher = null;
}
}
catch(IOException ioe){
log.error(ioe.getMessage(),ioe);
}
finally{
idxSystem.returnIndexReaders(readers);
}
}
}
}
private String groupDump(List<ZoieIndexReader<IndexReader>> readers, Query q) throws IOException
{
StringBuffer sb = new StringBuffer();
for(ZoieIndexReader<IndexReader> reader : readers)
{
sb.append(reader).append("\n");
Searcher searcher = new IndexSearcher(reader);
TopDocs hits = searcher.search(q, 20);
sb.append(dump(reader, hits));
searcher.close();
searcher = null;
}
return sb.toString();
}
private String dump(IndexReader reader, TopDocs hits)
throws CorruptIndexException, IOException
{
StringBuffer sb = new StringBuffer();
ScoreDoc[] sd = hits.scoreDocs;
long[] uids = new long[sd.length];
try
{
if (reader.hasDeletions()) sb.append(" there are deletions @ version: " + reader.getVersion());
} catch(UnsupportedOperationException e)
{
if (reader.hasDeletions()) sb.append(" there are deletions @ version: N/A");
}
sb.append("\n");
for(int i =0; i< sd.length; i++)
{
Document doc = reader.document(sd[i].doc);
uids[i] = Long.parseLong(doc.get("id"));
if (reader.isDeleted(sd[i].doc))
{
sb.append("doc: " + sd[i].doc + " with uid: " +
uids[i] + " has been deleted").append("\n");
}
}
sb.append(Thread.currentThread() + Arrays.toString(uids)).append("\n");
int max = reader.maxDoc();
uids = new long[max];
for(int i=0; i<max; i++)
{
Document doc = reader.document(i);
uids[i] = Long.parseLong(doc.get("id"));
if (reader.isDeleted(i))
{
sb.append("doc: " + i + " with uid: " + uids[i] + " has been deleted").append("\n");
}
}
sb.append("uids: " + Arrays.toString(uids)).append("\n");