Example usage for org.apache.lucene.facet LabelAndValue LabelAndValue

List of usage examples for org.apache.lucene.facet LabelAndValue LabelAndValue

Introduction

In this page you can find the example usage for org.apache.lucene.facet LabelAndValue LabelAndValue.

Prototype

public LabelAndValue(String label, Number value) 

Source Link

Document

Sole constructor.

Usage

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);
}