Skip to content

Instantly share code, notes, and snippets.

@need4spd
Created November 27, 2012 07:20
Show Gist options
  • Save need4spd/4152916 to your computer and use it in GitHub Desktop.
Save need4spd/4152916 to your computer and use it in GitHub Desktop.
SearcherLifeTimeManager 설명
@Test
public void customPrunerTest() throws CorruptIndexException, LockObtainFailedException, IOException, InterruptedException {
SearcherManager searcherManager = new SearcherManager(directory, new SearcherFactory());
SearcherLifetimeManager lifetimeManager = new SearcherLifetimeManager();
IndexSearcher indexSearcher = searcherManager.acquire();
long firstSearcherToken = lifetimeManager.record(indexSearcher);
IndexSearcher newSearcher = lifetimeManager.acquire(firstSearcherToken);
Assert.assertEquals(indexSearcher, newSearcher);
Assert.assertTrue(indexSearcher == newSearcher);
lifetimeManager.prune(new Pruner() {
@Override
public boolean doPrune(double arg0, IndexSearcher arg1) {
return true;
}
}); //sec
IndexSearcher thirdSearcher = lifetimeManager.acquire(firstSearcherToken);
Assert.assertNull(thirdSearcher);
}
@Test
public void differentSearcherTest() throws CorruptIndexException, LockObtainFailedException, IOException {
SearcherManager searcherManager = new SearcherManager(directory, new SearcherFactory());
SearcherLifetimeManager lifetimeManager = new SearcherLifetimeManager();
IndexSearcher indexSearcher = searcherManager.acquire();
Term t = new Term("id", "4");
Query q = new TermQuery(t);
TopDocs docs = indexSearcher.search(q, 10);
Assert.assertEquals(1, docs.totalHits);
long firstSearcherToken = lifetimeManager.record(indexSearcher);
Document doc = new Document();
doc.add(new Field("id", String.valueOf(4), Field.Store.YES, Field.Index.NOT_ANALYZED));
IndexWriter writer = getWriter();
writer.addDocument(doc);
writer.commit();
writer.close();
searcherManager.maybeRefresh();
IndexSearcher newSearcher = searcherManager.acquire();
docs = newSearcher.search(q, 10);
Assert.assertEquals(2, docs.totalHits);
long newSearcherToken = lifetimeManager.record(newSearcher);
//searcher release...
searcherManager.release(indexSearcher);
searcherManager.release(newSearcher);
indexSearcher = null;
newSearcher = null;
indexSearcher = lifetimeManager.acquire(firstSearcherToken);
newSearcher = lifetimeManager.acquire(newSearcherToken);
docs = indexSearcher.search(q, 10);
Assert.assertEquals(1, docs.totalHits);
docs = newSearcher.search(q, 10);
Assert.assertEquals(2, docs.totalHits);
}
@Test
public void prunerByAgeTest() throws CorruptIndexException, LockObtainFailedException, IOException, InterruptedException {
SearcherManager searcherManager = new SearcherManager(directory, new SearcherFactory());
SearcherLifetimeManager lifetimeManager = new SearcherLifetimeManager();
IndexSearcher indexSearcher = searcherManager.acquire();
long firstSearcherToken = lifetimeManager.record(indexSearcher);
Document doc = new Document();
doc.add(new Field("id", String.valueOf(4), Field.Store.YES, Field.Index.NOT_ANALYZED));
IndexWriter writer = getWriter();
writer.addDocument(doc);
writer.commit();
writer.close();
searcherManager.maybeRefresh();
IndexSearcher newSearcher = searcherManager.acquire();
long secondSearcherToken = lifetimeManager.record(newSearcher);
Thread.sleep(2000);
IndexSearcher thirdSearcher = lifetimeManager.acquire(firstSearcherToken);
Assert.assertNotNull(thirdSearcher);
lifetimeManager.prune(new PruneByAge(1.0));
thirdSearcher = lifetimeManager.acquire(firstSearcherToken);
Assert.assertNull(thirdSearcher);
thirdSearcher = lifetimeManager.acquire(secondSearcherToken);
Assert.assertNotNull(thirdSearcher);
Assert.assertTrue(newSearcher == thirdSearcher);
}
@Test
public void SearcherLifetimeSimpleTest() throws CorruptIndexException, LockObtainFailedException, IOException {
SearcherManager searcherManager = new SearcherManager(directory, new SearcherFactory());
SearcherLifetimeManager lifetimeManager = new SearcherLifetimeManager();
IndexSearcher indexSearcher = searcherManager.acquire();
Term t = new Term("id", "4");
Query q = new TermQuery(t);
TopDocs docs = indexSearcher.search(q, 10);
Assert.assertEquals(1, docs.totalHits);
IndexSearcher newSearcher = lifetimeManager.acquire(1);
Assert.assertNull(newSearcher);
long token = lifetimeManager.record(indexSearcher);
Assert.assertTrue(token > 0L);
newSearcher = lifetimeManager.acquire(token);
Assert.assertNotNull(newSearcher);
docs = newSearcher.search(q, 10);
Assert.assertEquals(1, docs.totalHits);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment