List of usage examples for org.apache.lucene.search CollectorManager reduce
T reduce(Collection<C> collectors) throws IOException;
From source file:com.gemstone.gemfire.cache.lucene.internal.distributed.LuceneFunction.java
License:Apache License
@Override public void execute(FunctionContext context) { RegionFunctionContext ctx = (RegionFunctionContext) context; ResultSender<TopEntriesCollector> resultSender = ctx.getResultSender(); Region region = ctx.getDataSet(); LuceneFunctionContext<IndexResultCollector> searchContext = (LuceneFunctionContext) ctx.getArguments(); if (searchContext == null) { resultSender.sendException(new IllegalArgumentException("Missing search context")); return;/* w ww. j a v a2s. c om*/ } LuceneQueryProvider queryProvider = searchContext.getQueryProvider(); if (queryProvider == null) { resultSender.sendException(new IllegalArgumentException("Missing query provider")); return; } LuceneService service = LuceneServiceProvider.get(region.getCache()); InternalLuceneIndex index = (InternalLuceneIndex) service.getIndex(searchContext.getIndexName(), region.getFullPath()); RepositoryManager repoManager = index.getRepositoryManager(); Query query = null; try { query = queryProvider.getQuery(index); } catch (QueryException e) { resultSender.sendException(e); return; } if (logger.isDebugEnabled()) { logger.debug("Executing lucene query: {}, on region {}", query, region.getFullPath()); } int resultLimit = searchContext.getLimit(); CollectorManager manager = (searchContext == null) ? null : searchContext.getCollectorManager(); if (manager == null) { manager = new TopEntriesCollectorManager(null, resultLimit); } Collection<IndexResultCollector> results = new ArrayList<>(); try { Collection<IndexRepository> repositories = repoManager.getRepositories(ctx); for (IndexRepository repo : repositories) { IndexResultCollector collector = manager.newCollector(repo.toString()); logger.debug("Executing search on repo: " + repo.toString()); repo.query(query, resultLimit, collector); results.add(collector); } } catch (IOException e) { logger.warn("", e); resultSender.sendException(e); return; } catch (BucketNotFoundException e) { logger.warn("", e); resultSender.sendException(e); return; } TopEntriesCollector mergedResult; try { mergedResult = (TopEntriesCollector) manager.reduce(results); resultSender.lastResult(mergedResult); } catch (IOException e) { logger.warn("", e); resultSender.sendException(e); return; } }
From source file:com.lucene.MyIndexSearcher.java
License:Apache License
public <C extends Collector, T> T search(Query query, CollectorManager<C, T> collectorManager) throws IOException { final C collector = collectorManager.newCollector(); search(query, collector);/*from w ww.j a v a2 s .c o m*/ List<C> co = Collections.singletonList(collector); T coll = collectorManager.reduce(co); return coll; }
From source file:org.apache.geode.cache.lucene.internal.distributed.LuceneFunction.java
License:Apache License
@Override public void execute(FunctionContext context) { RegionFunctionContext ctx = (RegionFunctionContext) context; ResultSender<TopEntriesCollector> resultSender = ctx.getResultSender(); Region region = ctx.getDataSet(); LuceneFunctionContext<IndexResultCollector> searchContext = (LuceneFunctionContext) ctx.getArguments(); if (searchContext == null) { throw new IllegalArgumentException("Missing search context"); }/*from w w w . ja va 2 s. com*/ LuceneQueryProvider queryProvider = searchContext.getQueryProvider(); if (queryProvider == null) { throw new IllegalArgumentException("Missing query provider"); } LuceneService service = LuceneServiceProvider.get(region.getCache()); LuceneIndexImpl index = (LuceneIndexImpl) service.getIndex(searchContext.getIndexName(), region.getFullPath()); RepositoryManager repoManager = index.getRepositoryManager(); LuceneIndexStats stats = index.getIndexStats(); Query query = null; try { query = queryProvider.getQuery(index); } catch (LuceneQueryException e) { logger.warn("", e); throw new FunctionException(e); } if (logger.isDebugEnabled()) { logger.debug("Executing lucene query: {}, on region {}", query, region.getFullPath()); } int resultLimit = searchContext.getLimit(); CollectorManager manager = (searchContext == null) ? null : searchContext.getCollectorManager(); if (manager == null) { manager = new TopEntriesCollectorManager(null, resultLimit); } Collection<IndexResultCollector> results = new ArrayList<>(); TopEntriesCollector mergedResult = null; try { long start = stats.startQuery(); try { Collection<IndexRepository> repositories = repoManager.getRepositories(ctx); for (IndexRepository repo : repositories) { IndexResultCollector collector = manager.newCollector(repo.toString()); if (logger.isDebugEnabled()) { logger.debug("Executing search on repo: " + repo.toString()); } repo.query(query, resultLimit, collector); results.add(collector); } mergedResult = (TopEntriesCollector) manager.reduce(results); } finally { stats.endQuery(start, mergedResult == null ? 0 : mergedResult.size()); } resultSender.lastResult(mergedResult); } catch (IOException | BucketNotFoundException e) { logger.warn("", e); throw new FunctionException(e); } }
From source file:org.apache.geode.cache.lucene.internal.distributed.LuceneFunctionJUnitTest.java
License:Apache License
@Test public void injectCustomCollectorManager() throws Exception { final CollectorManager mockManager = mock(CollectorManager.class); searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, "indexName", mockManager); when(mockContext.getDataSet()).thenReturn(mockRegion); when(mockContext.getArguments()).thenReturn(searchArgs); when(mockContext.<TopEntriesCollector>getResultSender()).thenReturn(mockResultSender); repos.remove(0);/*from www . ja v a2 s. c o m*/ when(mockRepoManager.getRepositories(eq(mockContext))).thenReturn(repos); when(mockManager.newCollector(eq("repo2"))).thenReturn(mockCollector); when(mockManager.reduce(any(Collection.class))).thenAnswer(invocation -> { Collection<IndexResultCollector> collectors = invocation.getArgumentAt(0, Collection.class); assertEquals(1, collectors.size()); assertEquals(mockCollector, collectors.iterator().next()); return new TopEntriesCollector(null); }); doAnswer(invocation -> { IndexResultCollector collector = invocation.getArgumentAt(2, IndexResultCollector.class); collector.collect(r2_1.getKey(), r2_1.getScore()); return null; }).when(mockRepository2).query(eq(query), eq(LuceneQueryFactory.DEFAULT_LIMIT), any(IndexResultCollector.class)); LuceneFunction function = new LuceneFunction(); function.execute(mockContext); verify(mockCollector).collect(eq("key-2-1"), eq(.45f)); verify(mockResultSender).lastResult(any(TopEntriesCollector.class)); }
From source file:org.apache.geode.cache.lucene.internal.distributed.LuceneFunctionJUnitTest.java
License:Apache License
@Test(expected = FunctionException.class) public void testReduceError() throws Exception { final CollectorManager mockManager = mock(CollectorManager.class); searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, "indexName", mockManager); when(mockContext.getDataSet()).thenReturn(mockRegion); when(mockContext.getArguments()).thenReturn(searchArgs); when(mockContext.<TopEntriesCollector>getResultSender()).thenReturn(mockResultSender); repos.remove(1);/*from w w w. j a va2 s. c om*/ when(mockRepoManager.getRepositories(eq(mockContext))).thenReturn(repos); when(mockManager.newCollector(eq("repo1"))).thenReturn(mockCollector); when(mockManager.reduce(any(Collection.class))).thenThrow(IOException.class); LuceneFunction function = new LuceneFunction(); function.execute(mockContext); }
From source file:org.apache.geode.cache.lucene.internal.distributed.LuceneQueryFunction.java
License:Apache License
@Override public void execute(FunctionContext<LuceneFunctionContext> context) { RegionFunctionContext ctx = (RegionFunctionContext) context; ResultSender<TopEntriesCollector> resultSender = ctx.getResultSender(); Region region = ctx.getDataSet(); LuceneFunctionContext<IndexResultCollector> searchContext = (LuceneFunctionContext) ctx.getArguments(); if (searchContext == null) { throw new IllegalArgumentException("Missing search context"); }/*w w w. j a va 2s .c o m*/ LuceneQueryProvider queryProvider = searchContext.getQueryProvider(); if (queryProvider == null) { throw new IllegalArgumentException("Missing query provider"); } LuceneIndexImpl index = getLuceneIndex(region, searchContext); if (index == null) { throw new LuceneIndexNotFoundException(searchContext.getIndexName(), region.getFullPath()); } RepositoryManager repoManager = index.getRepositoryManager(); LuceneIndexStats stats = index.getIndexStats(); Query query = getQuery(queryProvider, index); if (logger.isDebugEnabled()) { logger.debug("Executing lucene query: {}, on region {}", query, region.getFullPath()); } int resultLimit = searchContext.getLimit(); CollectorManager manager = (searchContext == null) ? null : searchContext.getCollectorManager(); if (manager == null) { manager = new TopEntriesCollectorManager(null, resultLimit); } Collection<IndexResultCollector> results = new ArrayList<>(); TopEntriesCollector mergedResult = null; try { long start = stats.startQuery(); Collection<IndexRepository> repositories = null; try { repositories = repoManager.getRepositories(ctx); for (IndexRepository repo : repositories) { IndexResultCollector collector = manager.newCollector(repo.toString()); if (logger.isDebugEnabled()) { logger.debug("Executing search on repo: " + repo.toString()); } repo.query(query, resultLimit, collector); results.add(collector); } mergedResult = (TopEntriesCollector) manager.reduce(results); } finally { stats.endQuery(start, mergedResult == null ? 0 : mergedResult.size()); } stats.incNumberOfQueryExecuted(); resultSender.lastResult(mergedResult); } catch (IOException | BucketNotFoundException | CacheClosedException | PrimaryBucketException e) { logger.debug("Exception during lucene query function", e); throw new InternalFunctionInvocationTargetException(e); } }
From source file:org.apache.geode.cache.lucene.internal.distributed.LuceneQueryFunctionJUnitTest.java
License:Apache License
@Test public void injectCustomCollectorManager() throws Exception { final CollectorManager mockManager = mock(CollectorManager.class); searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, "indexName", mockManager); when(mockContext.getDataSet()).thenReturn(mockRegion); when(mockContext.getArguments()).thenReturn(searchArgs); when(mockContext.<TopEntriesCollector>getResultSender()).thenReturn(mockResultSender); repos.remove(0);//from w w w .j a va 2s . c o m when(mockRepoManager.getRepositories(eq(mockContext))).thenReturn(repos); when(mockManager.newCollector(eq("repo2"))).thenReturn(mockCollector); when(mockManager.reduce(any(Collection.class))).thenAnswer(invocation -> { Collection<IndexResultCollector> collectors = invocation.getArgument(0); assertEquals(1, collectors.size()); assertEquals(mockCollector, collectors.iterator().next()); return new TopEntriesCollector(null); }); doAnswer(invocation -> { IndexResultCollector collector = invocation.getArgument(2); collector.collect(r2_1.getKey(), r2_1.getScore()); return null; }).when(mockRepository2).query(eq(query), eq(LuceneQueryFactory.DEFAULT_LIMIT), any(IndexResultCollector.class)); LuceneQueryFunction function = new LuceneQueryFunction(); function.execute(mockContext); verify(mockCollector).collect(eq("key-2-1"), eq(.45f)); verify(mockResultSender).lastResult(any(TopEntriesCollector.class)); }
From source file:org.apache.geode.cache.lucene.internal.distributed.LuceneQueryFunctionJUnitTest.java
License:Apache License
@Test(expected = FunctionException.class) public void testReduceError() throws Exception { final CollectorManager mockManager = mock(CollectorManager.class); searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, "indexName", mockManager); when(mockContext.getDataSet()).thenReturn(mockRegion); when(mockContext.getArguments()).thenReturn(searchArgs); when(mockContext.<TopEntriesCollector>getResultSender()).thenReturn(mockResultSender); repos.remove(1);// ww w . j a v a2 s.co m when(mockRepoManager.getRepositories(eq(mockContext))).thenReturn(repos); when(mockManager.newCollector(eq("repo1"))).thenReturn(mockCollector); when(mockManager.reduce(any(Collection.class))).thenThrow(IOException.class); LuceneQueryFunction function = new LuceneQueryFunction(); function.execute(mockContext); }