Java Code Examples for org.apache.lucene.facet.Facets#getTopChildren()
The following examples show how to use
org.apache.lucene.facet.Facets#getTopChildren() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: RangeFacetsExample.java From lucene-solr with Apache License 2.0 | 6 votes |
/** User runs a query and counts facets. */ public FacetResult search() throws IOException { // Aggregates the facet counts FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for "browsing" (counts facets // for all non-deleted docs in the index); normally // you'd use a "normal" query: FacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, fc); Facets facets = new LongRangeFacetCounts("timestamp", fc, PAST_HOUR, PAST_SIX_HOURS, PAST_DAY); return facets.getTopChildren(10, "timestamp"); }
Example 2
Source File: SimpleFacetsExample.java From lucene-solr with Apache License 2.0 | 6 votes |
/** User drills down on 'Publish Date/2010', and we * return facets for 'Author' */ private FacetResult drillDown() 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"); FacetsCollector fc = new FacetsCollector(); FacetsCollector.search(searcher, q, 10, fc); // Retrieve results Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc); FacetResult result = facets.getTopChildren(10, "Author"); indexReader.close(); taxoReader.close(); return result; }
Example 3
Source File: SimpleSortedSetFacetsExample.java From lucene-solr with Apache License 2.0 | 6 votes |
/** 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; }
Example 4
Source File: DistanceFacetsExample.java From lucene-solr with Apache License 2.0 | 6 votes |
/** User runs a query and counts facets. */ public FacetResult search() throws IOException { FacetsCollector fc = new FacetsCollector(); searcher.search(new MatchAllDocsQuery(), fc); Facets facets = new DoubleRangeFacetCounts("field", getDistanceValueSource(), fc, getBoundingBoxQuery(ORIGIN_LATITUDE, ORIGIN_LONGITUDE, 10.0), ONE_KM, TWO_KM, FIVE_KM, TEN_KM); return facets.getTopChildren(10, "field"); }
Example 5
Source File: AssociationsFacetsExample.java From lucene-solr with Apache License 2.0 | 6 votes |
/** User drills down on 'tags/solr'. */ private FacetResult drillDown() 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("tags", "solr"); FacetsCollector fc = new FacetsCollector(); FacetsCollector.search(searcher, q, 10, fc); // Retrieve results Facets facets = new TaxonomyFacetSumFloatAssociations("$genre", taxoReader, config, fc); FacetResult result = facets.getTopChildren(10, "genre"); indexReader.close(); taxoReader.close(); return result; }
Example 6
Source File: FacetStorageTest.java From lumongo with Apache License 2.0 | 6 votes |
/** User drills down on 'Publish Year/2010'. */ private FacetResult drillDown() throws IOException { DirectoryReader indexReader = DirectoryReader.open(directory); 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; }
Example 7
Source File: TestTaxonomyFacetCounts.java From lucene-solr with Apache License 2.0 | 5 votes |
public void testMultiValuedHierarchy() throws Exception { Directory dir = newDirectory(); Directory taxoDir = newDirectory(); DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir, IndexWriterConfig.OpenMode.CREATE); FacetsConfig config = new FacetsConfig(); config.setHierarchical("a", true); config.setMultiValued("a", true); RandomIndexWriter writer = new RandomIndexWriter(random(), dir); Document doc = new Document(); doc.add(newTextField("field", "text", Field.Store.NO)); doc.add(new FacetField("a", "path", "x")); doc.add(new FacetField("a", "path", "y")); writer.addDocument(config.build(taxoWriter, doc)); // NRT open IndexSearcher searcher = newSearcher(writer.getReader()); // NRT open TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoWriter); Facets facets = getAllFacets(FacetsConfig.DEFAULT_INDEX_FIELD_NAME, searcher, taxoReader, config); expectThrows(IllegalArgumentException.class, () -> { facets.getSpecificValue("a"); }); FacetResult result = facets.getTopChildren(10, "a"); assertEquals(1, result.labelValues.length); assertEquals(1, result.labelValues[0].value.intValue()); writer.close(); IOUtils.close(taxoWriter, searcher.getIndexReader(), taxoReader, dir, taxoDir); }
Example 8
Source File: TestOrdinalMappingLeafReader.java From lucene-solr with Apache License 2.0 | 5 votes |
private void verifyResults(Directory indexDir, Directory taxoDir) throws IOException { DirectoryReader indexReader = DirectoryReader.open(indexDir); DirectoryTaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir); IndexSearcher searcher = newSearcher(indexReader); FacetsCollector collector = new FacetsCollector(); FacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, collector); // tag facets Facets tagFacets = new FastTaxonomyFacetCounts("$tags", taxoReader, facetConfig, collector); FacetResult result = tagFacets.getTopChildren(10, "tag"); for (LabelAndValue lv: result.labelValues) { if (VERBOSE) { System.out.println(lv); } assertEquals(NUM_DOCS, lv.value.intValue()); } // id facets Facets idFacets = new FastTaxonomyFacetCounts(taxoReader, facetConfig, collector); FacetResult idResult = idFacets.getTopChildren(10, "id"); assertEquals(NUM_DOCS, idResult.childCount); assertEquals(NUM_DOCS * 2, idResult.value); // each "id" appears twice BinaryDocValues bdv = MultiDocValues.getBinaryValues(indexReader, "bdv"); BinaryDocValues cbdv = MultiDocValues.getBinaryValues(indexReader, "cbdv"); for (int i = 0; i < indexReader.maxDoc(); i++) { assertEquals(i, bdv.nextDoc()); assertEquals(i, cbdv.nextDoc()); assertEquals(Integer.parseInt(cbdv.binaryValue().utf8ToString()), Integer.parseInt(bdv.binaryValue().utf8ToString())*2); } IOUtils.close(indexReader, taxoReader); }
Example 9
Source File: TestTaxonomyFacetCounts.java From lucene-solr with Apache License 2.0 | 5 votes |
public void testSegmentsWithoutCategoriesOrResults() throws Exception { // tests the accumulator when there are segments with no results Directory indexDir = newDirectory(); Directory taxoDir = newDirectory(); IndexWriterConfig iwc = newIndexWriterConfig(new MockAnalyzer(random())); iwc.setMergePolicy(NoMergePolicy.INSTANCE); // prevent merges IndexWriter indexWriter = new IndexWriter(indexDir, iwc); TaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir); FacetsConfig config = new FacetsConfig(); indexTwoDocs(taxoWriter, indexWriter, config, false); // 1st segment, no content, with categories indexTwoDocs(taxoWriter, indexWriter, null, true); // 2nd segment, with content, no categories indexTwoDocs(taxoWriter, indexWriter, config, true); // 3rd segment ok indexTwoDocs(taxoWriter, indexWriter, null, false); // 4th segment, no content, or categories indexTwoDocs(taxoWriter, indexWriter, null, true); // 5th segment, with content, no categories indexTwoDocs(taxoWriter, indexWriter, config, true); // 6th segment, with content, with categories indexTwoDocs(taxoWriter, indexWriter, null, true); // 7th segment, with content, no categories indexWriter.close(); IOUtils.close(taxoWriter); DirectoryReader indexReader = DirectoryReader.open(indexDir); TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir); IndexSearcher indexSearcher = newSearcher(indexReader); // search for "f:a", only segments 1 and 3 should match results Query q = new TermQuery(new Term("f", "a")); FacetsCollector sfc = new FacetsCollector(); indexSearcher.search(q, sfc); Facets facets = getTaxonomyFacetCounts(taxoReader, config, sfc); FacetResult result = facets.getTopChildren(10, "A"); assertEquals("wrong number of children", 2, result.labelValues.length); for (LabelAndValue labelValue : result.labelValues) { assertEquals("wrong weight for child " + labelValue.label, 2, labelValue.value.intValue()); } IOUtils.close(indexReader, taxoReader, indexDir, taxoDir); }
Example 10
Source File: TestTaxonomyFacetCounts.java From lucene-solr with Apache License 2.0 | 5 votes |
public void testManyFacetsInOneDocument() throws Exception { assumeTrue("default Codec doesn't support huge BinaryDocValues", TestUtil.fieldSupportsHugeBinaryDocValues(FacetsConfig.DEFAULT_INDEX_FIELD_NAME)); Directory dir = newDirectory(); Directory taxoDir = newDirectory(); IndexWriterConfig iwc = newIndexWriterConfig(new MockAnalyzer(random())); RandomIndexWriter writer = new RandomIndexWriter(random(), dir, iwc); DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir, IndexWriterConfig.OpenMode.CREATE); FacetsConfig config = new FacetsConfig(); config.setMultiValued("dim", true); int numLabels = TEST_NIGHTLY ? TestUtil.nextInt(random(), 40000, 100000) : TestUtil.nextInt(random(), 4000, 10000); Document doc = new Document(); doc.add(newTextField("field", "text", Field.Store.NO)); for (int i = 0; i < numLabels; i++) { doc.add(new FacetField("dim", "" + i)); } writer.addDocument(config.build(taxoWriter, doc)); // NRT open IndexSearcher searcher = newSearcher(writer.getReader()); // NRT open TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoWriter); Facets facets = getAllFacets(FacetsConfig.DEFAULT_INDEX_FIELD_NAME, searcher, taxoReader, config); FacetResult result = facets.getTopChildren(Integer.MAX_VALUE, "dim"); assertEquals(numLabels, result.labelValues.length); Set<String> allLabels = new HashSet<>(); for (LabelAndValue labelValue : result.labelValues) { allLabels.add(labelValue.label); assertEquals(1, labelValue.value.intValue()); } assertEquals(numLabels, allLabels.size()); writer.close(); IOUtils.close(searcher.getIndexReader(), taxoWriter, taxoReader, dir, taxoDir); }
Example 11
Source File: TestTaxonomyFacetCounts.java From lucene-solr with Apache License 2.0 | 5 votes |
public void testLabelWithDelimiter() throws Exception { Directory dir = newDirectory(); Directory taxoDir = newDirectory(); RandomIndexWriter writer = new RandomIndexWriter(random(), dir); DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir, IndexWriterConfig.OpenMode.CREATE); FacetsConfig config = new FacetsConfig(); config.setMultiValued("dim", true); Document doc = new Document(); doc.add(newTextField("field", "text", Field.Store.NO)); doc.add(new FacetField("dim", "test\u001Fone")); doc.add(new FacetField("dim", "test\u001Etwo")); writer.addDocument(config.build(taxoWriter, doc)); // NRT open IndexSearcher searcher = newSearcher(writer.getReader()); // NRT open TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoWriter); Facets facets = getAllFacets(FacetsConfig.DEFAULT_INDEX_FIELD_NAME, searcher, taxoReader, config); assertEquals(1, facets.getSpecificValue("dim", "test\u001Fone")); assertEquals(1, facets.getSpecificValue("dim", "test\u001Etwo")); // no hierarchy assertFalse(((TaxonomyFacets) facets).siblingsLoaded()); assertFalse(((TaxonomyFacets) facets).childrenLoaded()); FacetResult result = facets.getTopChildren(10, "dim"); assertEquals("dim=dim path=[] value=-1 childCount=2\n test\u001Fone (1)\n test\u001Etwo (1)\n", result.toString()); writer.close(); IOUtils.close(taxoWriter, searcher.getIndexReader(), taxoReader, dir, taxoDir); }
Example 12
Source File: ExpressionAggregationFacetsExample.java From lucene-solr with Apache License 2.0 | 5 votes |
/** User runs a query and aggregates facets. */ private FacetResult search() throws IOException, ParseException { DirectoryReader indexReader = DirectoryReader.open(indexDir); IndexSearcher searcher = new IndexSearcher(indexReader); TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir); // Aggregate categories by an expression that combines the document's score // and its popularity field Expression expr = JavascriptCompiler.compile("_score * sqrt(popularity)"); SimpleBindings bindings = new SimpleBindings(); bindings.add("_score", DoubleValuesSource.SCORES); // the score of the document bindings.add("popularity", DoubleValuesSource.fromLongField("popularity")); // the value of the 'popularity' field // Aggregates the facet values FacetsCollector fc = new FacetsCollector(true); // MatchAllDocsQuery is for "browsing" (counts facets // for all non-deleted docs in the index); normally // you'd use a "normal" query: FacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, fc); // Retrieve results Facets facets = new TaxonomyFacetSumValueSource(taxoReader, config, fc, expr.getDoubleValuesSource(bindings)); FacetResult result = facets.getTopChildren(10, "A"); indexReader.close(); taxoReader.close(); return result; }
Example 13
Source File: TestRangeFacetCounts.java From lucene-solr with Apache License 2.0 | 5 votes |
public void testOverlappedEndStart() throws Exception { Directory d = newDirectory(); RandomIndexWriter w = new RandomIndexWriter(random(), d); Document doc = new Document(); NumericDocValuesField field = new NumericDocValuesField("field", 0L); doc.add(field); for(long l=0;l<100;l++) { field.setLongValue(l); w.addDocument(doc); } field.setLongValue(Long.MAX_VALUE); w.addDocument(doc); IndexReader r = w.getReader(); w.close(); FacetsCollector fc = new FacetsCollector(); IndexSearcher s = newSearcher(r); s.search(new MatchAllDocsQuery(), fc); Facets facets = new LongRangeFacetCounts("field", fc, new LongRange("0-10", 0L, true, 10L, true), new LongRange("10-20", 10L, true, 20L, true), new LongRange("20-30", 20L, true, 30L, true), new LongRange("30-40", 30L, true, 40L, true)); FacetResult result = facets.getTopChildren(10, "field"); assertEquals("dim=field path=[] value=41 childCount=4\n 0-10 (11)\n 10-20 (11)\n 20-30 (11)\n 30-40 (11)\n", result.toString()); r.close(); d.close(); }
Example 14
Source File: TestRangeFacetCounts.java From lucene-solr with Apache License 2.0 | 5 votes |
public void testLongMinMax() throws Exception { Directory d = newDirectory(); RandomIndexWriter w = new RandomIndexWriter(random(), d); Document doc = new Document(); NumericDocValuesField field = new NumericDocValuesField("field", 0L); doc.add(field); field.setLongValue(Long.MIN_VALUE); w.addDocument(doc); field.setLongValue(0); w.addDocument(doc); field.setLongValue(Long.MAX_VALUE); w.addDocument(doc); IndexReader r = w.getReader(); w.close(); FacetsCollector fc = new FacetsCollector(); IndexSearcher s = newSearcher(r); s.search(new MatchAllDocsQuery(), fc); Facets facets = new LongRangeFacetCounts("field", fc, new LongRange("min", Long.MIN_VALUE, true, Long.MIN_VALUE, true), new LongRange("max", Long.MAX_VALUE, true, Long.MAX_VALUE, true), new LongRange("all0", Long.MIN_VALUE, true, Long.MAX_VALUE, true), new LongRange("all1", Long.MIN_VALUE, false, Long.MAX_VALUE, true), new LongRange("all2", Long.MIN_VALUE, true, Long.MAX_VALUE, false), new LongRange("all3", Long.MIN_VALUE, false, Long.MAX_VALUE, false)); FacetResult result = facets.getTopChildren(10, "field"); assertEquals("dim=field path=[] value=3 childCount=6\n min (1)\n max (1)\n all0 (3)\n all1 (2)\n all2 (2)\n all3 (1)\n", result.toString()); r.close(); d.close(); }
Example 15
Source File: TestRangeFacetCounts.java From lucene-solr with Apache License 2.0 | 5 votes |
public void testBasicLong() throws Exception { Directory d = newDirectory(); RandomIndexWriter w = new RandomIndexWriter(random(), d); Document doc = new Document(); NumericDocValuesField field = new NumericDocValuesField("field", 0L); doc.add(field); for(long l=0;l<100;l++) { field.setLongValue(l); w.addDocument(doc); } // Also add Long.MAX_VALUE field.setLongValue(Long.MAX_VALUE); w.addDocument(doc); IndexReader r = w.getReader(); w.close(); FacetsCollector fc = new FacetsCollector(); IndexSearcher s = newSearcher(r); s.search(new MatchAllDocsQuery(), fc); Facets facets = new LongRangeFacetCounts("field", fc, new LongRange("less than 10", 0L, true, 10L, false), new LongRange("less than or equal to 10", 0L, true, 10L, true), new LongRange("over 90", 90L, false, 100L, false), new LongRange("90 or above", 90L, true, 100L, false), new LongRange("over 1000", 1000L, false, Long.MAX_VALUE, true)); FacetResult result = facets.getTopChildren(10, "field"); assertEquals("dim=field path=[] value=22 childCount=5\n less than 10 (10)\n less than or equal to 10 (11)\n over 90 (9)\n 90 or above (10)\n over 1000 (1)\n", result.toString()); r.close(); d.close(); }
Example 16
Source File: TestSearcherTaxonomyManager.java From lucene-solr with Apache License 2.0 | 4 votes |
public void testNRT() throws Exception { Directory dir = newDirectory(); Directory taxoDir = newDirectory(); IndexWriterConfig iwc = newIndexWriterConfig(new MockAnalyzer(random())); // Don't allow tiny maxBufferedDocs; it can make this // test too slow: iwc.setMaxBufferedDocs(Math.max(500, iwc.getMaxBufferedDocs())); // MockRandom/AlcololicMergePolicy are too slow: TieredMergePolicy tmp = new TieredMergePolicy(); tmp.setFloorSegmentMB(.001); iwc.setMergePolicy(tmp); final IndexWriter w = new IndexWriter(dir, iwc); final DirectoryTaxonomyWriter tw = new DirectoryTaxonomyWriter(taxoDir); final FacetsConfig config = new FacetsConfig(); config.setMultiValued("field", true); final AtomicBoolean stop = new AtomicBoolean(); // How many unique facets to index before stopping: final int ordLimit = TEST_NIGHTLY ? 100000 : 6000; Thread indexer = new IndexerThread(w, config, tw, null, ordLimit, stop); final SearcherTaxonomyManager mgr = new SearcherTaxonomyManager(w, true, null, tw); Thread reopener = new Thread() { @Override public void run() { while(!stop.get()) { try { // Sleep for up to 20 msec: Thread.sleep(random().nextInt(20)); if (VERBOSE) { System.out.println("TEST: reopen"); } mgr.maybeRefresh(); if (VERBOSE) { System.out.println("TEST: reopen done"); } } catch (Exception ioe) { throw new RuntimeException(ioe); } } } }; reopener.setName("reopener"); reopener.start(); indexer.setName("indexer"); indexer.start(); try { while (!stop.get()) { SearcherAndTaxonomy pair = mgr.acquire(); try { //System.out.println("search maxOrd=" + pair.taxonomyReader.getSize()); FacetsCollector sfc = new FacetsCollector(); pair.searcher.search(new MatchAllDocsQuery(), sfc); Facets facets = getTaxonomyFacetCounts(pair.taxonomyReader, config, sfc); FacetResult result = facets.getTopChildren(10, "field"); if (pair.searcher.getIndexReader().numDocs() > 0) { //System.out.println(pair.taxonomyReader.getSize()); assertTrue(result.childCount > 0); assertTrue(result.labelValues.length > 0); } //if (VERBOSE) { //System.out.println("TEST: facets=" + FacetTestUtils.toString(results.get(0))); //} } finally { mgr.release(pair); } } } finally { indexer.join(); reopener.join(); } if (VERBOSE) { System.out.println("TEST: now stop"); } w.close(); IOUtils.close(mgr, tw, taxoDir, dir); }
Example 17
Source File: TestSearcherTaxonomyManager.java From lucene-solr with Apache License 2.0 | 4 votes |
public void testDirectory() throws Exception { Directory indexDir = newDirectory(); Directory taxoDir = newDirectory(); final IndexWriter w = new IndexWriter(indexDir, newIndexWriterConfig(new MockAnalyzer(random()))); final DirectoryTaxonomyWriter tw = new DirectoryTaxonomyWriter(taxoDir); // first empty commit w.commit(); tw.commit(); final SearcherTaxonomyManager mgr = new SearcherTaxonomyManager(indexDir, taxoDir, null); final FacetsConfig config = new FacetsConfig(); config.setMultiValued("field", true); final AtomicBoolean stop = new AtomicBoolean(); // How many unique facets to index before stopping: final int ordLimit = TEST_NIGHTLY ? 100000 : 600; Thread indexer = new IndexerThread(w, config, tw, mgr, ordLimit, stop); indexer.start(); try { while (!stop.get()) { SearcherAndTaxonomy pair = mgr.acquire(); try { //System.out.println("search maxOrd=" + pair.taxonomyReader.getSize()); FacetsCollector sfc = new FacetsCollector(); pair.searcher.search(new MatchAllDocsQuery(), sfc); Facets facets = getTaxonomyFacetCounts(pair.taxonomyReader, config, sfc); FacetResult result = facets.getTopChildren(10, "field"); if (pair.searcher.getIndexReader().numDocs() > 0) { //System.out.println(pair.taxonomyReader.getSize()); assertTrue(result.childCount > 0); assertTrue(result.labelValues.length > 0); } //if (VERBOSE) { //System.out.println("TEST: facets=" + FacetTestUtils.toString(results.get(0))); //} } finally { mgr.release(pair); } } } finally { indexer.join(); } if (VERBOSE) { System.out.println("TEST: now stop"); } w.close(); IOUtils.close(mgr, tw, taxoDir, indexDir); }
Example 18
Source File: LumongoSegment.java From lumongo with Apache License 2.0 | 4 votes |
private void searchWithFacets(FacetRequest facetRequest, Query q, IndexSearcher indexSearcher, TopDocsCollector<?> collector, SegmentResponse.Builder segmentReponseBuilder) throws Exception { FacetsCollector facetsCollector = new FacetsCollector(); indexSearcher.search(q, MultiCollector.wrap(collector, facetsCollector)); Facets facets = new FastTaxonomyFacetCounts(taxoReader, facetsConfig, facetsCollector); for (CountRequest countRequest : facetRequest.getCountRequestList()) { String label = countRequest.getFacetField().getLabel(); if (!indexConfig.existingFacet(label)) { throw new Exception(label + " is not defined as a facetable field"); } if (countRequest.hasSegmentFacets()) { if (indexConfig.getNumberOfSegments() == 1) { log.info("Segment facets is ignored with segments of 1 for facet <" + label + "> on index <" + indexName + ">"); } if (countRequest.getSegmentFacets() < countRequest.getMaxFacets()) { throw new IllegalArgumentException("Segment facets must be greater than or equal to max facets"); } } int numOfFacets; if (indexConfig.getNumberOfSegments() > 1) { if (countRequest.getSegmentFacets() != 0) { numOfFacets = countRequest.getSegmentFacets(); } else { numOfFacets = countRequest.getMaxFacets() * 8; } } else { numOfFacets = countRequest.getMaxFacets(); } FacetResult facetResult = null; try { if (indexConfig.getNumberOfSegments() > 1) { if (countRequest.hasSegmentFacets() && countRequest.getSegmentFacets() == 0) { //TODO: this not ideal numOfFacets = taxoReader.getSize(); } } facetResult = facets.getTopChildren(numOfFacets, label); } catch (UncheckedExecutionException e) { Throwable cause = e.getCause(); if (cause.getMessage().contains(" was not indexed with SortedSetDocValues")) { //this is when no data has been indexing into a facet or facet does not exist } else { throw e; } } FacetGroup.Builder fg = FacetGroup.newBuilder(); fg.setCountRequest(countRequest); if (facetResult != null) { for (LabelAndValue subResult : facetResult.labelValues) { FacetCount.Builder facetCountBuilder = FacetCount.newBuilder(); facetCountBuilder.setCount(subResult.value.longValue()); facetCountBuilder.setFacet(subResult.label); fg.addFacetCount(facetCountBuilder); } } segmentReponseBuilder.addFacetGroup(fg); } }