+++ /dev/null
-package org.apache.lucene.facet.example.simple;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.TermQuery;
-import org.apache.lucene.search.TopScoreDocCollector;
-
-import org.apache.lucene.search.MultiCollector;
-import org.apache.lucene.facet.example.ExampleUtils;
-import org.apache.lucene.facet.index.params.DefaultFacetIndexingParams;
-import org.apache.lucene.facet.index.params.FacetIndexingParams;
-import org.apache.lucene.facet.search.DrillDown;
-import org.apache.lucene.facet.search.FacetsCollector;
-import org.apache.lucene.facet.search.params.CountFacetRequest;
-import org.apache.lucene.facet.search.params.FacetRequest;
-import org.apache.lucene.facet.search.params.FacetSearchParams;
-import org.apache.lucene.facet.search.results.FacetResult;
-import org.apache.lucene.facet.search.results.FacetResultNode;
-import org.apache.lucene.facet.taxonomy.CategoryPath;
-import org.apache.lucene.facet.taxonomy.TaxonomyReader;
-
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * SampleSearcer searches index with facets.
- *
- * @lucene.experimental
- */
-public class SimpleSearcher {
-
- /**
- * Search an index with facets.
- * @param indexReader index reader.
- * @param taxoReader taxonomy reader.
- * @throws Exception on error (no detailed exception handling here for sample simplicity
- * @return facet results
- */
- public static List<FacetResult> searchWithFacets (IndexReader indexReader,
- TaxonomyReader taxoReader) throws Exception {
- CountFacetRequest facetRequest = new CountFacetRequest(new CategoryPath("root","a"), 10);
- return searchWithRequest(indexReader, taxoReader, null, facetRequest);
- }
-
- /**
- * Search an index with facets for given facet requests.
- * @param indexReader index reader.
- * @param taxoReader taxonomy reader.
- * @param indexingParams the facet indexing params
- * @param facetRequests facet requests of interest
- * @throws Exception on error (no detailed exception handling here for sample simplicity
- * @return facet results
- */
- public static List<FacetResult> searchWithRequest(IndexReader indexReader,
- TaxonomyReader taxoReader, FacetIndexingParams indexingParams,
- FacetRequest... facetRequests) throws Exception {
- Query q = new TermQuery(new Term(SimpleUtils.TEXT, "white"));
- return searchWithRequestAndQuery(q, indexReader, taxoReader,
- indexingParams, facetRequests);
- }
-
- /**
- * Search an index with facets for given query and facet requests.
- * @param q query of interest
- * @param indexReader index reader.
- * @param taxoReader taxonomy reader.
- * @param indexingParams the facet indexing params
- * @param facetRequests facet requests of interest
- * @throws Exception on error (no detailed exception handling here for sample simplicity
- * @return facet results
- */
- public static List<FacetResult> searchWithRequestAndQuery(Query q,
- IndexReader indexReader, TaxonomyReader taxoReader,
- FacetIndexingParams indexingParams, FacetRequest... facetRequests)
- throws Exception {
-
- ExampleUtils.log("Query: " + q);
- // prepare searcher to search against
- IndexSearcher searcher = new IndexSearcher(indexReader);
-
- // collect matching documents into a collector
- TopScoreDocCollector topDocsCollector = TopScoreDocCollector.create(10, true);
-
- if (indexingParams == null) {
- indexingParams = new DefaultFacetIndexingParams();
- }
-
- // Faceted search parameters indicate which facets are we interested in
- FacetSearchParams facetSearchParams = new FacetSearchParams(indexingParams);
-
- // Add the facet requests of interest to the search params
- for (FacetRequest frq : facetRequests) {
- facetSearchParams.addFacetRequest(frq);
- }
-
- FacetsCollector facetsCollector = new FacetsCollector(facetSearchParams, indexReader, taxoReader);
-
- // perform documents search and facets accumulation
- searcher.search(q, MultiCollector.wrap(topDocsCollector, facetsCollector));
-
- // Obtain facets results and print them
- List<FacetResult> res = facetsCollector.getFacetResults();
-
- int i = 0;
- for (FacetResult facetResult : res) {
- ExampleUtils.log("Res " + (i++) + ": " + facetResult);
- }
-
- return res;
- }
-
- /**
- * Search an index with facets drill-down.
- * @param indexReader index reader.
- * @param taxoReader taxonomy reader.
- * @throws Exception on error (no detailed exception handling here for sample simplicity
- * @return facet results
- */
- public static List<FacetResult> searchWithDrillDown(IndexReader indexReader,
- TaxonomyReader taxoReader) throws Exception {
-
- // base query the user is interested in
- Query baseQuery = new TermQuery(new Term(SimpleUtils.TEXT, "white"));
-
- // facet of interest
- CountFacetRequest facetRequest = new CountFacetRequest(new CategoryPath("root","a"), 10);
-
- // initial search - all docs matching the base query will contribute to the accumulation
- List<FacetResult> res1 = searchWithRequest(indexReader, taxoReader, null, facetRequest);
-
- // a single result (because there was a single request)
- FacetResult fres = res1.get(0);
-
- // assume the user is interested in the second sub-result
- // (just take the second sub-result returned by the iterator - we know there are 3 results!)
- Iterator<? extends FacetResultNode> resIterator = fres.getFacetResultNode().getSubResults().iterator();
- resIterator.next(); // skip first result
- CategoryPath categoryOfInterest = resIterator.next().getLabel();
-
- // drill-down preparation: turn the base query into a drill-down query for the category of interest
- Query q2 = DrillDown.query(baseQuery, categoryOfInterest);
-
- // that's it - search with the new query and we're done!
- // only documents both matching the base query AND containing the
- // category of interest will contribute to the new accumulation
- return searchWithRequestAndQuery(q2, indexReader, taxoReader, null, facetRequest);
- }
-
-}