List of usage examples for org.apache.lucene.facet LabelAndValue LabelAndValue
public LabelAndValue(String label, Number value)
From source file:org.apache.jackrabbit.oak.plugins.index.lucene.util.FilteredSortedSetDocValuesFacetCounts.java
License:Apache License
private LabelAndValue[] filterFacet(int docId, String dimension, LabelAndValue[] labelAndValues) throws IOException { boolean filterd = false; Map<String, Long> newValues = new HashMap<String, Long>(); Document document = reader.document(docId); SortedSetDocValues docValues = state.getDocValues(); docValues.setDocument(docId);/*w w w. j a v a 2 s .co m*/ // filter using doc values (avoiding requiring stored values) if (!filter.isAccessible(document.getField(FieldNames.PATH).stringValue() + "/" + dimension)) { filterd = true; for (LabelAndValue lv : labelAndValues) { long existingCount = lv.value.longValue(); BytesRef key = new BytesRef(FacetsConfig.pathToString(dimension, new String[] { lv.label })); long l = docValues.lookupTerm(key); if (l >= 0) { if (existingCount > 0) { newValues.put(lv.label, existingCount - 1); } else { if (newValues.containsKey(lv.label)) { newValues.remove(lv.label); } } } } } LabelAndValue[] filteredLVs; if (filterd) { filteredLVs = new LabelAndValue[newValues.size()]; int i = 0; for (Map.Entry<String, Long> entry : newValues.entrySet()) { filteredLVs[i] = new LabelAndValue(entry.getKey(), entry.getValue()); i++; } } else { filteredLVs = labelAndValues; } return filteredLVs; }
From source file:org.fao.geonet.kernel.search.facet.ItemBuilderTest.java
License:Open Source License
private Facets buildFacets() throws IOException { Facets mockFacets = mock(Facets.class); LabelAndValue facet1 = new LabelAndValue("test1", 2); LabelAndValue facet2 = new LabelAndValue("test2", 1); LabelAndValue facet3 = new LabelAndValue("test3", 5); when(mockFacets.getTopChildren(MAX_RESULTS, DIMENSION_NAME, path())) .thenReturn(buildFacetResult(7, path(), facet1, facet2, facet3)); when(mockFacets.getTopChildren(MAX_RESULTS, DIMENSION_NAME, path(facet1.label))) .thenReturn(buildFacetResult(facet1, path(facet1.label))); when(mockFacets.getTopChildren(MAX_RESULTS, DIMENSION_NAME, path(facet2.label))) .thenReturn(buildFacetResult(facet2, path(facet2.label))); when(mockFacets.getTopChildren(MAX_RESULTS, DIMENSION_NAME, path(facet3.label))) .thenReturn(buildFacetResult(facet3, path(facet3.label))); return mockFacets; }
From source file:org.meresco.lucene.search.MerescoTaxonomyFacetCounts.java
License:Open Source License
@Override public FacetResult getTopChildren(int topN, String dim, String... path) throws IOException { if (topN <= 0) { throw new IllegalArgumentException("topN must be > 0 (got: " + topN + ")"); }// w ww .ja v a2 s .co m DimConfig dimConfig = verifyDim(dim); FacetLabel cp = new FacetLabel(dim, path); int dimOrd = taxoReader.getOrdinal(cp); if (dimOrd == -1) { return null; } TopOrdAndIntQueue q = new TopOrdAndIntQueue(Math.min(taxoReader.getSize(), topN)); int bottomValue = 0; int ord = children[dimOrd]; int totValue = 0; int childCount = 0; TopOrdAndIntQueue.OrdAndValue reuse = null; while (ord != TaxonomyReader.INVALID_ORDINAL) { if (values[ord] > 0) { totValue += values[ord]; childCount++; if (values[ord] > bottomValue) { if (reuse == null) { reuse = new TopOrdAndIntQueue.OrdAndValue(); } reuse.ord = ord; reuse.value = values[ord]; reuse = q.insertWithOverflow(reuse); if (q.size() == topN) { bottomValue = q.top().value; } } } ord = siblings[ord]; } if (totValue == 0) { return null; } if (dimConfig.multiValued) { if (dimConfig.requireDimCount) { totValue = values[dimOrd]; } else { // Our sum'd value is not correct, in general: totValue = -1; } } else { // Our sum'd dim value is accurate, so we keep it } LabelAndValue[] labelValues = new LabelAndValue[q.size()]; for (int i = labelValues.length - 1; i >= 0; i--) { TopOrdAndIntQueue.OrdAndValue ordAndValue = q.pop(); FacetLabel child = taxoReader.getPath(ordAndValue.ord); labelValues[i] = new LabelAndValue(child.components[cp.length], ordAndValue.value); } return new FacetResult(dim, path, totValue, labelValues, childCount); }
From source file:org.meresco.lucene.SuperCollectorTest.java
License:Open Source License
@Test public void testFacetSuperCollector() throws Throwable { Lucene I = new Lucene(this.tmpDir, new LuceneSettings()); for (int i = 0; i < 1000; i++) { Map<String, String> fields = new HashMap<String, String>(); fields.put("field1", Integer.toString(i)); fields.put("field2", new String(new char[1000]).replace("\0", Integer.toString(i))); Map<String, String> facets = new HashMap<String, String>(); facets.put("facet1", "value" + (i % 100)); Document document1 = createDocument(fields, facets); I.addDocument("id" + i, document1); }/* www . j a v a2 s . c o m*/ I.close(); I = new Lucene(this.tmpDir, new LuceneSettings()); FacetSuperCollector C = new FacetSuperCollector(I.data.getManager().acquire().taxonomyReader, I.data.getFacetsConfig(), new DocValuesOrdinalsReader()); MatchAllDocsQuery Q = new MatchAllDocsQuery(); I.search(Q, null, C); FacetResult tc = C.getTopChildren(10, "facet1"); LabelAndValue[] expected = new LabelAndValue[] { new LabelAndValue("value90", 10), new LabelAndValue("value91", 10), new LabelAndValue("value92", 10), new LabelAndValue("value93", 10), new LabelAndValue("value94", 10), new LabelAndValue("value95", 10), new LabelAndValue("value96", 10), new LabelAndValue("value97", 10), new LabelAndValue("value98", 10), new LabelAndValue("value99", 10) }; assertArrayEquals(expected, tc.labelValues); }
From source file:org.meresco.lucene.SuperCollectorTest.java
License:Open Source License
@Test public void testFacetAndTopsMultiCollector() throws Throwable { Lucene I = new Lucene(this.tmpDir, new LuceneSettings()); for (int i = 0; i < 99; i++) { Map<String, String> fields = new HashMap<String, String>(); fields.put("field1", Integer.toString(i)); fields.put("field2", new String(new char[1000]).replace("\0", Integer.toString(i))); Map<String, String> facets = new HashMap<String, String>(); facets.put("facet1", "value" + (i % 10)); Document document1 = createDocument(fields, facets); I.addDocument("id" + i, document1); }/*from w ww .j ava 2 s. c om*/ I.maybeCommitAfterUpdate(); I.close(); I = new Lucene(this.tmpDir, new LuceneSettings()); FacetSuperCollector f = new FacetSuperCollector(I.data.getManager().acquire().taxonomyReader, I.data.getFacetsConfig(), new DocValuesOrdinalsReader()); TopScoreDocSuperCollector t = new TopScoreDocSuperCollector(10, true); List<SuperCollector<?>> collectors = new ArrayList<SuperCollector<?>>(); collectors.add(t); collectors.add(f); MultiSuperCollector C = new MultiSuperCollector(collectors); MatchAllDocsQuery Q = new MatchAllDocsQuery(); I.search(Q, null, C); assertEquals(99, t.topDocs(0).totalHits); assertEquals(10, t.topDocs(0).scoreDocs.length); FacetResult tc = f.getTopChildren(10, "facet1"); LabelAndValue[] expected = new LabelAndValue[] { new LabelAndValue("value0", 10), new LabelAndValue("value1", 10), new LabelAndValue("value2", 10), new LabelAndValue("value3", 10), new LabelAndValue("value4", 10), new LabelAndValue("value5", 10), new LabelAndValue("value6", 10), new LabelAndValue("value7", 10), new LabelAndValue("value8", 10), new LabelAndValue("value9", 9) }; assertArrayEquals(expected, tc.labelValues); }