/// <summary> /// Search, collecting hits with a <seealso cref="Collector"/>, and /// computing drill down and sideways counts. /// </summary> public virtual DrillSidewaysResult Search(DrillDownQuery query, Collector hitCollector) { IDictionary<string, int?> drillDownDims = query.Dims; FacetsCollector drillDownCollector = new FacetsCollector(); if (drillDownDims.Count == 0) { // There are no drill-down dims, so there is no // drill-sideways to compute: searcher.Search(query, MultiCollector.Wrap(hitCollector, drillDownCollector)); return new DrillSidewaysResult(BuildFacetsResult(drillDownCollector, null, null), null); } BooleanQuery ddq = query.BooleanQuery; BooleanClause[] clauses = ddq.Clauses; Query baseQuery; int startClause; if (clauses.Length == drillDownDims.Count) { // TODO: we could optimize this pure-browse case by // making a custom scorer instead: baseQuery = new MatchAllDocsQuery(); startClause = 0; } else { Debug.Assert(clauses.Length == 1 + drillDownDims.Count); baseQuery = clauses[0].Query; startClause = 1; } FacetsCollector[] drillSidewaysCollectors = new FacetsCollector[drillDownDims.Count]; for (int i = 0; i < drillSidewaysCollectors.Length; i++) { drillSidewaysCollectors[i] = new FacetsCollector(); } Query[] drillDownQueries = new Query[clauses.Length - startClause]; for (int i = startClause; i < clauses.Length; i++) { drillDownQueries[i - startClause] = clauses[i].Query; } DrillSidewaysQuery dsq = new DrillSidewaysQuery(baseQuery, drillDownCollector, drillSidewaysCollectors, drillDownQueries, ScoreSubDocsAtOnce()); searcher.Search(dsq, hitCollector); return new DrillSidewaysResult(BuildFacetsResult(drillDownCollector, drillSidewaysCollectors, drillDownDims.Keys.ToArray()), null); }
public WeightAnonymousInnerClassHelper(DrillSidewaysQuery outerInstance, Weight baseWeight, object[] drillDowns) { this.outerInstance = outerInstance; this.baseWeight = baseWeight; this.drillDowns = drillDowns; }
public WeightAnonymousClass(DrillSidewaysQuery outerInstance, Weight baseWeight, object[] drillDowns) { this.outerInstance = outerInstance; this.baseWeight = baseWeight; this.drillDowns = drillDowns; }