Example usage for org.apache.lucene.facet.taxonomy FacetLabel FacetLabel

List of usage examples for org.apache.lucene.facet.taxonomy FacetLabel FacetLabel

Introduction

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

Prototype

public FacetLabel(String dim, String[] path) 

Source Link

Document

Construct from the dimension plus the given path components.

Usage

From source file:org.meresco.lucene.search.MerescoTaxonomyFacetCounts.java

License:Open Source License

@Override
public Number getSpecificValue(String dim, String... path) throws IOException {
    DimConfig dimConfig = verifyDim(dim);
    if (path.length == 0) {
        if (dimConfig.hierarchical && dimConfig.multiValued == false) {
            // ok: rolled up at search time
        } else if (dimConfig.requireDimCount && dimConfig.multiValued) {
            // ok: we indexed all ords at index time
        } else {/* w  ww .  ja  v a2s  . c o m*/
            throw new IllegalArgumentException(
                    "cannot return dimension-level value alone; use getTopChildren instead");
        }
    }
    int ord = taxoReader.getOrdinal(new FacetLabel(dim, path));
    if (ord < 0) {
        return -1;
    }
    return values[ord];
}

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 + ")");
    }/* ww w .  j a va 2s  .  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);
}