@Override public QueryResponse perform() { query.afterDeserialise(getSearchFactory()); DocumentExtractor extractor = query.queryDocumentExtractor(); try { int resultSize = query.queryResultSize(); QueryResponse queryResponse = new QueryResponse(resultSize); return queryResponse; } finally { extractor.close(); } }
@Override QueryResponse perform() { HSQuery query = queryDefinition.getHsQuery(); query.afterDeserialise(getSearchFactory()); try (DocumentExtractor ignored = query.queryDocumentExtractor()) { int resultSize = query.queryResultSize(); return new QueryResponse(resultSize); } } }
@Override QueryResponse perform() { HSQuery query = queryDefinition.getHsQuery(); query.afterDeserialise(getSearchFactory()); try (DocumentExtractor extractor = query.queryDocumentExtractor()) { int resultSize = query.queryResultSize(); return resultSize == 0 ? new QueryResponse(0) : new QueryResponse(collectKeys(extractor, query)); } }
@Override public ScrollableResultsImpl scroll() { //keep the searcher open until the resultset is closed hSearchQuery.getTimeoutManager().start(); final DocumentExtractor documentExtractor = hSearchQuery.queryDocumentExtractor(); //stop timeout manager, the iterator pace is in the user's hands hSearchQuery.getTimeoutManager().stop(); Loader loader = getLoader(); return new ScrollableResultsImpl( fetchSize, documentExtractor, loader, this.session, hSearchQuery.hasThisProjection() ); }
@Override public ResultIterator<E> iterator(FetchOptions fetchOptions) throws SearchException { if (fetchOptions.getFetchMode() == FetchOptions.FetchMode.EAGER) { hSearchQuery.getTimeoutManager().start(); List<EntityInfo> entityInfos = hSearchQuery.queryEntityInfos(); return filterNulls(new EagerIterator<>(entityInfos, getResultLoader(), fetchOptions.getFetchSize())); } else if (fetchOptions.getFetchMode() == FetchOptions.FetchMode.LAZY) { DocumentExtractor extractor = hSearchQuery.queryDocumentExtractor(); //triggers actual Lucene search return filterNulls(new LazyIterator<>(extractor, getResultLoader(), fetchOptions.getFetchSize())); } else { throw new IllegalArgumentException("Unknown FetchMode " + fetchOptions.getFetchMode()); } }
@Override QueryResponse perform() { HSQuery query = queryDefinition.getHsQuery(); query.afterDeserialise(getSearchFactory()); DocumentExtractor extractor = query.queryDocumentExtractor(); // registering... getQueryBox().put(queryId, extractor); // returning the QueryResponse TopDocs topDocs = extractor.getTopDocs(); return new QueryResponse(new NodeTopDocs(cache.getRpcManager().getAddress(), topDocs)); } }
@Override public ResultIterator<E> iterator(FetchOptions fetchOptions) throws SearchException { partitionHandlingSupport.checkCacheAvailable(); HSQuery hSearchQuery = queryDefinition.getHsQuery(); if (fetchOptions.getFetchMode() == FetchOptions.FetchMode.EAGER) { hSearchQuery.getTimeoutManager().start(); List<EntityInfo> entityInfos = hSearchQuery.queryEntityInfos(); return filterNulls(new EagerIterator<>(entityInfos, getResultLoader(hSearchQuery), fetchOptions.getFetchSize())); } else if (fetchOptions.getFetchMode() == FetchOptions.FetchMode.LAZY) { DocumentExtractor extractor = hSearchQuery.queryDocumentExtractor(); //triggers actual Lucene search return filterNulls(new LazyIterator<>(extractor, getResultLoader(hSearchQuery), fetchOptions.getFetchSize())); } else { throw new IllegalArgumentException("Unknown FetchMode " + fetchOptions.getFetchMode()); } }
@Override public QueryResponse perform() { query.afterDeserialise(getSearchFactory()); DocumentExtractor extractor = query.queryDocumentExtractor(); try { int resultSize = query.queryResultSize(); NodeTopDocs eagerTopDocs = resultSize == 0 ? null : collectKeys(extractor); QueryResponse queryResponse = new QueryResponse(eagerTopDocs, getQueryBox().getMyId(), resultSize); queryResponse.setAddress(cache.getAdvancedCache().getRpcManager().getAddress()); return queryResponse; } finally { extractor.close(); } }
@Override public QueryResponse perform() { query.afterDeserialise(getSearchFactory()); DocumentExtractor extractor = query.queryDocumentExtractor(); int resultSize = query.queryResultSize(); QueryBox box = getQueryBox(); // registering... box.put(lazyQueryId, extractor); // returning the QueryResponse TopDocs topDocs = extractor.getTopDocs(); QueryResponse queryResponse = new QueryResponse(new NodeTopDocs(topDocs), box.getMyId(), resultSize); queryResponse.setAddress(cache.getAdvancedCache().getRpcManager().getAddress()); return queryResponse; }
@Test public void scrollBeyondMaxResultWindow() throws Exception { generateData( 0, DEFAULT_MAX_RESULT_WINDOW + 10 ); Query query = builder().all().createQuery(); try ( DocumentExtractor extractor = getQuery( query ) .queryDocumentExtractor() ) { for ( int i = 0; i < DEFAULT_MAX_RESULT_WINDOW + 10; ++i ) { EntityInfo info = extractor.extract( i ); assertNotNull( info ); assertEquals( i, info.getId() ); } } }
@Test public void scrollForwardToArbitraryPosition() throws Exception { generateData( 0, 1000 ); Query query = builder().all().createQuery(); try ( DocumentExtractor extractor = getQuery( query ) .queryDocumentExtractor() ) { EntityInfo info = extractor.extract( 1 ); assertNotNull( info ); assertEquals( 1, info.getId() ); info = extractor.extract( 500 ); assertNotNull( info ); assertEquals( 500, info.getId() ); } }
@Test public void scrollBackward() throws Exception { generateData( 0, 1001 ); Query query = builder().all().createQuery(); try ( DocumentExtractor extractor = getQuery( query ) .queryDocumentExtractor() ) { EntityInfo info = extractor.extract( 1000 ); assertNotNull( info ); assertEquals( 1000, info.getId() ); // Backtrack exactly 1000 positions info = extractor.extract( 0 ); assertNotNull( info ); assertEquals( 0, info.getId() ); } }