Search in sources :

Example 6 with NamedThreadFactory

use of org.apache.lucene.util.NamedThreadFactory in project lucene-solr by apache.

the class TestBooleanQuery method testDeMorgan.

public void testDeMorgan() throws Exception {
    Directory dir1 = newDirectory();
    RandomIndexWriter iw1 = new RandomIndexWriter(random(), dir1);
    Document doc1 = new Document();
    doc1.add(newTextField("field", "foo bar", Field.Store.NO));
    iw1.addDocument(doc1);
    IndexReader reader1 = iw1.getReader();
    iw1.close();
    Directory dir2 = newDirectory();
    RandomIndexWriter iw2 = new RandomIndexWriter(random(), dir2);
    Document doc2 = new Document();
    doc2.add(newTextField("field", "foo baz", Field.Store.NO));
    iw2.addDocument(doc2);
    IndexReader reader2 = iw2.getReader();
    iw2.close();
    // Query: +foo -ba*
    BooleanQuery.Builder query = new BooleanQuery.Builder();
    query.add(new TermQuery(new Term("field", "foo")), BooleanClause.Occur.MUST);
    WildcardQuery wildcardQuery = new WildcardQuery(new Term("field", "ba*"));
    wildcardQuery.setRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_REWRITE);
    query.add(wildcardQuery, BooleanClause.Occur.MUST_NOT);
    MultiReader multireader = new MultiReader(reader1, reader2);
    IndexSearcher searcher = newSearcher(multireader);
    assertEquals(0, searcher.search(query.build(), 10).totalHits);
    final ExecutorService es = Executors.newCachedThreadPool(new NamedThreadFactory("NRT search threads"));
    searcher = new IndexSearcher(multireader, es);
    if (VERBOSE)
        System.out.println("rewritten form: " + searcher.rewrite(query.build()));
    assertEquals(0, searcher.search(query.build(), 10).totalHits);
    es.shutdown();
    es.awaitTermination(1, TimeUnit.SECONDS);
    multireader.close();
    reader1.close();
    reader2.close();
    dir1.close();
    dir2.close();
}
Also used : SpanTermQuery(org.apache.lucene.search.spans.SpanTermQuery) MultiReader(org.apache.lucene.index.MultiReader) NamedThreadFactory(org.apache.lucene.util.NamedThreadFactory) Term(org.apache.lucene.index.Term) Document(org.apache.lucene.document.Document) IndexReader(org.apache.lucene.index.IndexReader) ExecutorService(java.util.concurrent.ExecutorService) RandomIndexWriter(org.apache.lucene.index.RandomIndexWriter) Directory(org.apache.lucene.store.Directory)

Example 7 with NamedThreadFactory

use of org.apache.lucene.util.NamedThreadFactory in project lucene-solr by apache.

the class TestSearcherManager method testIntermediateClose.

public void testIntermediateClose() throws IOException, InterruptedException {
    Directory dir = newDirectory();
    // Test can deadlock if we use SMS:
    IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())).setMergeScheduler(new ConcurrentMergeScheduler()));
    writer.addDocument(new Document());
    writer.commit();
    final CountDownLatch awaitEnterWarm = new CountDownLatch(1);
    final CountDownLatch awaitClose = new CountDownLatch(1);
    final AtomicBoolean triedReopen = new AtomicBoolean(false);
    final ExecutorService es = random().nextBoolean() ? null : Executors.newCachedThreadPool(new NamedThreadFactory("testIntermediateClose"));
    final SearcherFactory factory = new SearcherFactory() {

        @Override
        public IndexSearcher newSearcher(IndexReader r, IndexReader previous) {
            try {
                if (triedReopen.get()) {
                    awaitEnterWarm.countDown();
                    awaitClose.await();
                }
            } catch (InterruptedException e) {
            //
            }
            return new IndexSearcher(r, es);
        }
    };
    final SearcherManager searcherManager = random().nextBoolean() ? new SearcherManager(dir, factory) : new SearcherManager(writer, random().nextBoolean(), false, factory);
    if (VERBOSE) {
        System.out.println("sm created");
    }
    IndexSearcher searcher = searcherManager.acquire();
    try {
        assertEquals(1, searcher.getIndexReader().numDocs());
    } finally {
        searcherManager.release(searcher);
    }
    writer.addDocument(new Document());
    writer.commit();
    final AtomicBoolean success = new AtomicBoolean(false);
    final Throwable[] exc = new Throwable[1];
    Thread thread = new Thread(new Runnable() {

        @Override
        public void run() {
            try {
                triedReopen.set(true);
                if (VERBOSE) {
                    System.out.println("NOW call maybeRefresh");
                }
                searcherManager.maybeRefresh();
                success.set(true);
            } catch (AlreadyClosedException e) {
            // expected
            } catch (Throwable e) {
                if (VERBOSE) {
                    System.out.println("FAIL: unexpected exc");
                    e.printStackTrace(System.out);
                }
                exc[0] = e;
                // use success as the barrier here to make sure we see the write
                success.set(false);
            }
        }
    });
    thread.start();
    if (VERBOSE) {
        System.out.println("THREAD started");
    }
    awaitEnterWarm.await();
    if (VERBOSE) {
        System.out.println("NOW call close");
    }
    searcherManager.close();
    awaitClose.countDown();
    thread.join();
    expectThrows(AlreadyClosedException.class, () -> {
        searcherManager.acquire();
    });
    assertFalse(success.get());
    assertTrue(triedReopen.get());
    assertNull("" + exc[0], exc[0]);
    writer.close();
    dir.close();
    if (es != null) {
        es.shutdown();
        es.awaitTermination(1, TimeUnit.SECONDS);
    }
}
Also used : NamedThreadFactory(org.apache.lucene.util.NamedThreadFactory) ConcurrentMergeScheduler(org.apache.lucene.index.ConcurrentMergeScheduler) AlreadyClosedException(org.apache.lucene.store.AlreadyClosedException) Document(org.apache.lucene.document.Document) CountDownLatch(java.util.concurrent.CountDownLatch) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) MockAnalyzer(org.apache.lucene.analysis.MockAnalyzer) IndexWriter(org.apache.lucene.index.IndexWriter) RandomIndexWriter(org.apache.lucene.index.RandomIndexWriter) ExecutorService(java.util.concurrent.ExecutorService) IndexReader(org.apache.lucene.index.IndexReader) Directory(org.apache.lucene.store.Directory)

Aggregations

ExecutorService (java.util.concurrent.ExecutorService)7 NamedThreadFactory (org.apache.lucene.util.NamedThreadFactory)7 Document (org.apache.lucene.document.Document)4 IndexReader (org.apache.lucene.index.IndexReader)3 MockAnalyzer (org.apache.lucene.analysis.MockAnalyzer)2 RandomIndexWriter (org.apache.lucene.index.RandomIndexWriter)2 Term (org.apache.lucene.index.Term)2 IndexSearcher (org.apache.lucene.search.IndexSearcher)2 ScoreDoc (org.apache.lucene.search.ScoreDoc)2 TopDocs (org.apache.lucene.search.TopDocs)2 Directory (org.apache.lucene.store.Directory)2 BytesRef (org.apache.lucene.util.BytesRef)2 IOException (java.io.IOException)1 Path (java.nio.file.Path)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 CyclicBarrier (java.util.concurrent.CyclicBarrier)1 ExecutionException (java.util.concurrent.ExecutionException)1 ThreadPoolExecutor (java.util.concurrent.ThreadPoolExecutor)1