/** User drills down on the specified range. */ public TopDocs drillDown(LongRange range) throws IOException { // Passing no baseQuery means we drill down on all // documents ("browse only"): DrillDownQuery q = new DrillDownQuery(getConfig()); q.add("timestamp", LongPoint.newRangeQuery("timestamp", range.min, range.max)); return searcher.search(q, 10); }
private DrillDownQuery getDrillDownQuery(final DrillDownQuery query, Query[] queries, final String excludedDimension) { final DrillDownQuery ddl = new DrillDownQuery(config, query.getBaseQuery()); query.getDims().forEach((dim, pos) -> { if (!dim.equals(excludedDimension)) ddl.add(dim, queries[pos]); }); return ddl.getDims().size() == queries.length ? null : ddl; }
@Override public Query rewrite(IndexReader r) throws IOException { if (getBoost() != 1f) { return super.rewrite(r); } BooleanQuery rewritten = getBooleanQuery(); if (rewritten.clauses().isEmpty()) { return new MatchAllDocsQuery(); } return rewritten; }
/** Adds one dimension of drill downs; if you pass the same * dimension more than once it is OR'd with the previous * cofnstraints on that dimension, and all dimensions are * AND'd against each other and the base query. */ public void add(String dim, String... path) { String indexedField = config.getDimConfig(dim).indexFieldName; add(dim, new TermQuery(term(indexedField, dim, path))); }
@Override public DrillDownQuery clone() { return new DrillDownQuery(config, baseQuery, dimQueries, drillDownDims); }
Query baseQuery = new MatchAllDocsQuery(); DrillDownQuery ddQuery = new DrillDownQuery(config, baseQuery); ddQuery.add("city", "california"); FacetsCollector fc = new FacetsCollector(); FacetsCollector.search(searcher, ddQuery, 10, fc);
Map<String, Integer> drillDownDims = query.getDims(); Query baseQuery = query.getBaseQuery(); if (baseQuery == null) { Query[] drillDownQueries = query.getDrillDownQueries();
final CollectorManager<?, R> hitCollectorManager) throws IOException { final Map<String, Integer> drillDownDims = query.getDims(); final List<CallableCollector> callableCollectors = new ArrayList<>(drillDownDims.size() + 1); new MultiCollectorManager(new FacetsCollectorManager(), hitCollectorManager))); int i = 0; final Query[] filters = query.getDrillDownQueries(); for (String dim : drillDownDims.keySet()) callableCollectors.add(new CallableCollector(i++, searcher, getDrillDownQuery(query, filters, dim),
@Override public String toString(String field) { return getBooleanQuery().toString(field); }
@Override public DrillDownQuery clone() { return new DrillDownQuery(config, baseQuery, dimQueries, drillDownDims); }
/** Adds one dimension of drill downs; if you pass the same * dimension more than once it is OR'd with the previous * cofnstraints on that dimension, and all dimensions are * AND'd against each other and the base query. */ public void add(String dim, String... path) { String indexedField = config.getDimConfig(dim).indexFieldName; add(dim, new TermQuery(term(indexedField, dim, path))); }
Map<String,Integer> drillDownDims = query.getDims(); Query baseQuery = query.getBaseQuery(); if (baseQuery == null) { Query[] drillDownQueries = query.getDrillDownQueries();
@Override public String toString(String field) { return getBooleanQuery().toString(field); }
private static long countPages(IndexSearcher indexSearcher, RcCollectionMetadata rcCollMd) throws IOException { Query query = new TermQuery(new Term(RcIrStaticField.DOCUMENT_TYPE.getFieldName(), RcIrDocumentType.PAGE.name())); if (rcCollMd != null) { query = new DrillDownQuery(RcIrSearcher.FACETS_CONFIG, query); RcIrFacetPath facetPath = getFacetPath(rcCollMd); ((DrillDownQuery) query).add(facetPath.getDimension(), facetPath.getPath()); } int limit = 1; TopDocs topDocs = indexSearcher.search(query, limit); return topDocs.totalHits; }
/** * 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); } }
@Override public Query rewrite(IndexReader r) throws IOException { BooleanQuery rewritten = getBooleanQuery(); if (rewritten.clauses().isEmpty()) { return new MatchAllDocsQuery(); } return rewritten; }
private static long countPages(IndexSearcher indexSearcher, String title) throws IOException { Query query = new DrillDownQuery(RcIrSearcher.FACETS_CONFIG); RcIrFacetPath facetPath = new RcIrFacetPath(RcIrStaticField.TITLE.getFieldName(), title); ((DrillDownQuery) query).add(facetPath.getDimension(), facetPath.getPath()); int limit = 1; TopDocs topDocs = indexSearcher.search(query, limit); return topDocs.totalHits; }
boolean doDocScores, boolean doMaxScore) throws IOException { if (filter != null) { query = new DrillDownQuery(config, filter, query);
@Override final public org.apache.lucene.facet.DrillDownQuery getQuery(final QueryContext queryContext) throws IOException, ParseException, ReflectiveOperationException, QueryNodeException { final org.apache.lucene.facet.DrillDownQuery drillDownQuery; final FieldMap fieldMap = queryContext.getFieldMap(); final Map<String, String> dimensions = new HashMap<>(); final Map<String, String> resolvedDimensions = new HashMap<>(); dimPath.forEach(map -> map.keySet().forEach(concreteField -> { final String genericField = genericFieldNames.getOrDefault(concreteField, concreteField); dimensions.put(concreteField, genericField); if (fieldMap != null) resolvedDimensions.put(concreteField, fieldMap.resolveQueryFieldName(genericField, concreteField)); })); final FacetsConfig facetsConfig = queryContext.getFacetsConfig(resolvedDimensions); Objects.requireNonNull(facetsConfig, "FacetsConfig is null"); if (baseQuery == null) drillDownQuery = new org.apache.lucene.facet.DrillDownQuery(facetsConfig); else drillDownQuery = new org.apache.lucene.facet.DrillDownQuery(facetsConfig, baseQuery.getQuery(queryContext)); dimPath.forEach(dimPath -> dimPath.forEach( (dim, path) -> drillDownQuery.add(resolvedDimensions.getOrDefault(dim, dim), path))); return drillDownQuery; }
/** User drills down on 'Publish Year/2010'. */ private FacetResult drillDown() throws IOException { DirectoryReader indexReader = DirectoryReader.open(indexDir); IndexSearcher searcher = new IndexSearcher(indexReader); SortedSetDocValuesReaderState state = new DefaultSortedSetDocValuesReaderState(indexReader); // Now user drills down on Publish Year/2010: DrillDownQuery q = new DrillDownQuery(config); q.add("Publish Year", "2010"); FacetsCollector fc = new FacetsCollector(); FacetsCollector.search(searcher, q, 10, fc); // Retrieve results Facets facets = new SortedSetDocValuesFacetCounts(state, fc); FacetResult result = facets.getTopChildren(10, "Author"); indexReader.close(); return result; }