/** * Search, sorting by score, and computing * drill down and sideways counts. */ public DrillSidewaysResult search(DrillDownQuery query, int topN) throws IOException { return search(null, query, topN); }
@Override public final FacetsBuilder execute() throws Exception { final FacetsBuilder facetsBuilder; if (queryExecution.useDrillSideways) { final DrillSideways.DrillSidewaysResult drillSidewaysResult = new DrillSideways(queryExecution.queryContext.indexSearcher, queryExecution.facetsConfig, queryExecution.queryContext.taxonomyReader, queryExecution.queryContext.docValueReaderState) .search((org.apache.lucene.facet.DrillDownQuery) queryExecution.query, finalCollector); facetsBuilder = new FacetsBuilder.WithSideways(queryExecution.queryContext, queryExecution.facetsConfig, queryExecution.queryDef.facets, queryExecution.query, queryExecution.timeTracker, drillSidewaysResult).build(); } else { try { queryExecution.queryContext.indexSearcher.search(queryExecution.query, finalCollector); } catch (TimeLimitingCollector.TimeExceededException e) { LOGGER.log(Level.WARNING, e, e::getMessage); } facetsBuilder = facetsCollector == null ? null : new FacetsBuilder.WithCollectors(queryExecution.queryContext, queryExecution.facetsConfig, queryExecution.queryDef.facets, queryExecution.query, queryExecution.timeTracker, facetsCollector).build(); } return facetsBuilder; }
return new DrillSidewaysResult(buildFacetsResult(drillDownCollector, null, null), null); scoreSubDocsAtOnce()); if (hitCollector.needsScores() == false) { return new DrillSidewaysResult(buildFacetsResult(drillDownCollector, drillSidewaysCollectors, drillDownDims.keySet().toArray(new String[drillDownDims.size()])), null);
final Query[] filters = query.getDrillDownQueries(); for (String dim : drillDownDims.keySet()) callableCollectors.add(new CallableCollector(i++, searcher, getDrillDownQuery(query, filters, dim), new FacetsCollectorManager())); return new ConcurrentDrillSidewaysResult<>(buildFacetsResult(mainFacetsCollector, facetsCollectors, drillDownDims.keySet().toArray(new String[drillDownDims.size()])), null, collectorResult);
/** User drills down on 'Publish Date/2010', and we * return facets for both 'Publish Date' and 'Author', * using DrillSideways. */ private List<FacetResult> drillSideways() throws IOException { DirectoryReader indexReader = DirectoryReader.open(indexDir); IndexSearcher searcher = new IndexSearcher(indexReader); TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir); // Passing no baseQuery means we drill down on all // documents ("browse only"): DrillDownQuery q = new DrillDownQuery(config); // Now user drills down on Publish Date/2010: q.add("Publish Date", "2010"); DrillSideways ds = new DrillSideways(searcher, config, taxoReader); DrillSidewaysResult result = ds.search(q, 10); // Retrieve results List<FacetResult> facets = result.facets.getAllDims(10); indexReader.close(); taxoReader.close(); return facets; }
return new DrillSidewaysResult(buildFacetsResult(drillDownCollector, null, null), null); DrillSidewaysQuery dsq = new DrillSidewaysQuery(baseQuery, drillDownCollector, drillSidewaysCollectors, drillDownQueries, scoreSubDocsAtOnce()); if (hitCollector.needsScores() == false) { return new DrillSidewaysResult(buildFacetsResult(drillDownCollector, drillSidewaysCollectors, drillDownDims.keySet().toArray(new String[drillDownDims.size()])), null);
Map<String, ColumnDefinition> indices = this.lookupIndices(tenantId, drillDownRequest.getTableName()); FacetsConfig config = this.getFacetsConfigurations(indices); DrillSideways drillSideways = new DrillSideways(indexSearcher, config, taxonomyReader); DrillDownQuery drillDownQuery = this.createDrillDownQuery(drillDownRequest, indices, config, rangeField, range); drillSideways.search(drillDownQuery, facetsCollector); int topResultCount = drillDownRequest.getRecordStartIndex() + drillDownRequest.getRecordCount(); TopDocs topDocs;
/** * Search, sorting by score, and computing * drill down and sideways counts. */ public DrillSidewaysResult search(DrillDownQuery query, int topN) throws IOException { return search(null, query, topN); }
Map<String, ColumnDefinition> indices = this.lookupIndices(tenantId, drillDownRequest.getTableName()); FacetsConfig config = this.getFacetsConfigurations(indices); DrillSideways drillSideways = new DrillSideways(indexSearcher, config, taxonomyReader); Query queryObj = new MatchAllDocsQuery(); if (drillDownRequest.getQuery() != null && !drillDownRequest.getQuery().isEmpty()) { drillSideways.search(drillDownQuery, facetsCollector); ValueSource valueSource = this.getCompiledScoreFunction(drillDownRequest.getScoreFunction(), indices);
/** * Search, sorting by score, and computing * drill down and sideways counts. */ public DrillSidewaysResult search(ScoreDoc after, DrillDownQuery query, int topN) throws IOException { int limit = searcher.getIndexReader().maxDoc(); if (limit == 0) { limit = 1; // the collector does not alow numHits = 0 } topN = Math.min(topN, limit); TopScoreDocCollector hitCollector = TopScoreDocCollector.create(topN, after); DrillSidewaysResult r = search(query, hitCollector); return new DrillSidewaysResult(r.facets, hitCollector.topDocs()); }
/** * Search, sorting by {@link Sort}, and computing * drill down and sideways counts. */ public DrillSidewaysResult search(DrillDownQuery query, Query filter, FieldDoc after, int topN, Sort sort, boolean doDocScores, boolean doMaxScore) throws IOException { if (filter != null) { query = new DrillDownQuery(config, filter, query); } if (sort != null) { int limit = searcher.getIndexReader().maxDoc(); if (limit == 0) { limit = 1; // the collector does not alow numHits = 0 } topN = Math.min(topN, limit); final TopFieldCollector hitCollector = TopFieldCollector.create(sort, topN, after, true, doDocScores, doMaxScore); DrillSidewaysResult r = search(query, hitCollector); return new DrillSidewaysResult(r.facets, hitCollector.topDocs()); } else { return search(after, query, topN); } }
/** User drills down on the specified range. */ public TopDocs drillDown(DoubleRange range) throws IOException { // Passing no baseQuery means we drill down on all // documents ("browse only"): DrillDownQuery q = new DrillDownQuery(null); final DoubleValuesSource vs = getDistanceValueSource(); q.add("field", range.getQuery(getBoundingBoxQuery(ORIGIN_LATITUDE, ORIGIN_LONGITUDE, range.max), vs)); DrillSideways ds = new DrillSideways(searcher, config, (TaxonomyReader) null) { @Override protected Facets buildFacetsResult(FacetsCollector drillDowns, FacetsCollector[] drillSideways, String[] drillSidewaysDims) throws IOException { assert drillSideways.length == 1; return new DoubleRangeFacetCounts("field", vs, drillSideways[0], ONE_KM, TWO_KM, FIVE_KM, TEN_KM); } }; return ds.search(q, 10).hits; }