Search in sources :

Example 11 with Metric

use of org.apache.solr.client.solrj.io.stream.metrics.Metric in project lucene-solr by apache.

the class FacetStream method appendJson.

private void appendJson(StringBuilder buf, Bucket[] _buckets, Metric[] _metrics, FieldComparator[] _sorts, int _limit, int level) {
    buf.append('"');
    buf.append(_buckets[level].toString());
    buf.append('"');
    buf.append(":{");
    buf.append("\"type\":\"terms\"");
    buf.append(",\"field\":\"" + _buckets[level].toString() + "\"");
    buf.append(",\"limit\":" + _limit);
    buf.append(",\"sort\":{\"" + getFacetSort(_sorts[level].getLeftFieldName(), _metrics) + "\":\"" + _sorts[level].getOrder() + "\"}");
    buf.append(",\"facet\":{");
    int metricCount = 0;
    for (Metric metric : _metrics) {
        String identifier = metric.getIdentifier();
        if (!identifier.startsWith("count(")) {
            if (metricCount > 0) {
                buf.append(",");
            }
            buf.append("\"facet_" + metricCount + "\":\"" + identifier + "\"");
            ++metricCount;
        }
    }
    ++level;
    if (level < _buckets.length) {
        if (metricCount > 0) {
            buf.append(",");
        }
        appendJson(buf, _buckets, _metrics, _sorts, _limit, level);
    }
    buf.append("}}");
}
Also used : Metric(org.apache.solr.client.solrj.io.stream.metrics.Metric)

Example 12 with Metric

use of org.apache.solr.client.solrj.io.stream.metrics.Metric in project lucene-solr by apache.

the class FacetStream method toExpression.

@Override
public StreamExpressionParameter toExpression(StreamFactory factory) throws IOException {
    // function name
    StreamExpression expression = new StreamExpression(factory.getFunctionName(this.getClass()));
    // collection
    expression.addParameter(collection);
    // parameters
    ModifiableSolrParams tmpParams = new ModifiableSolrParams(params);
    for (Entry<String, String[]> param : tmpParams.getMap().entrySet()) {
        expression.addParameter(new StreamExpressionNamedParameter(param.getKey(), String.join(",", param.getValue())));
    }
    // buckets
    {
        StringBuilder builder = new StringBuilder();
        for (Bucket bucket : buckets) {
            if (0 != builder.length()) {
                builder.append(",");
            }
            builder.append(bucket.toString());
        }
        expression.addParameter(new StreamExpressionNamedParameter("buckets", builder.toString()));
    }
    // bucketSorts
    {
        StringBuilder builder = new StringBuilder();
        for (FieldComparator sort : bucketSorts) {
            if (0 != builder.length()) {
                builder.append(",");
            }
            builder.append(sort.toExpression(factory));
        }
        expression.addParameter(new StreamExpressionNamedParameter("bucketSorts", builder.toString()));
    }
    // metrics
    for (Metric metric : metrics) {
        expression.addParameter(metric.toExpression(factory));
    }
    // limit
    expression.addParameter(new StreamExpressionNamedParameter("bucketSizeLimit", Integer.toString(bucketSizeLimit)));
    // zkHost
    expression.addParameter(new StreamExpressionNamedParameter("zkHost", zkHost));
    return expression;
}
Also used : StreamExpression(org.apache.solr.client.solrj.io.stream.expr.StreamExpression) StreamExpressionNamedParameter(org.apache.solr.client.solrj.io.stream.expr.StreamExpressionNamedParameter) Bucket(org.apache.solr.client.solrj.io.stream.metrics.Bucket) FieldComparator(org.apache.solr.client.solrj.io.comp.FieldComparator) MultipleFieldComparator(org.apache.solr.client.solrj.io.comp.MultipleFieldComparator) Metric(org.apache.solr.client.solrj.io.stream.metrics.Metric) ModifiableSolrParams(org.apache.solr.common.params.ModifiableSolrParams)

Example 13 with Metric

use of org.apache.solr.client.solrj.io.stream.metrics.Metric in project lucene-solr by apache.

the class FacetStream method fillTuples.

private void fillTuples(int level, List<Tuple> tuples, Tuple currentTuple, NamedList facets, Bucket[] _buckets, Metric[] _metrics) {
    String bucketName = _buckets[level].toString();
    NamedList nl = (NamedList) facets.get(bucketName);
    if (nl == null) {
        return;
    }
    List allBuckets = (List) nl.get("buckets");
    for (int b = 0; b < allBuckets.size(); b++) {
        NamedList bucket = (NamedList) allBuckets.get(b);
        Object val = bucket.get("val");
        Tuple t = currentTuple.clone();
        t.put(bucketName, val);
        int nextLevel = level + 1;
        if (nextLevel < _buckets.length) {
            fillTuples(nextLevel, tuples, t.clone(), bucket, _buckets, _metrics);
        } else {
            int m = 0;
            for (Metric metric : _metrics) {
                String identifier = metric.getIdentifier();
                if (!identifier.startsWith("count(")) {
                    double d = (double) bucket.get("facet_" + m);
                    if (metric.outputLong) {
                        t.put(identifier, Math.round(d));
                    } else {
                        t.put(identifier, d);
                    }
                    ++m;
                } else {
                    long l = ((Number) bucket.get("count")).longValue();
                    t.put("count(*)", l);
                }
            }
            tuples.add(t);
        }
    }
}
Also used : NamedList(org.apache.solr.common.util.NamedList) ArrayList(java.util.ArrayList) NamedList(org.apache.solr.common.util.NamedList) List(java.util.List) Metric(org.apache.solr.client.solrj.io.stream.metrics.Metric) Tuple(org.apache.solr.client.solrj.io.Tuple)

Example 14 with Metric

use of org.apache.solr.client.solrj.io.stream.metrics.Metric in project lucene-solr by apache.

the class RollupStream method read.

public Tuple read() throws IOException {
    while (true) {
        Tuple tuple = tupleStream.read();
        if (tuple.EOF) {
            if (!finished) {
                if (currentMetrics == null) {
                    return tuple;
                }
                Map<String, Object> map = new HashMap<String, Object>();
                for (Metric metric : currentMetrics) {
                    map.put(metric.getIdentifier(), metric.getValue());
                }
                for (int i = 0; i < buckets.length; i++) {
                    map.put(buckets[i].toString(), currentKey.getParts()[i]);
                }
                Tuple t = new Tuple(map);
                tupleStream.pushBack(tuple);
                finished = true;
                return t;
            } else {
                return tuple;
            }
        }
        Object[] bucketValues = new Object[buckets.length];
        for (int i = 0; i < buckets.length; i++) {
            bucketValues[i] = buckets[i].getBucketValue(tuple);
        }
        HashKey hashKey = new HashKey(bucketValues);
        if (hashKey.equals(currentKey)) {
            for (Metric bucketMetric : currentMetrics) {
                bucketMetric.update(tuple);
            }
        } else {
            Tuple t = null;
            if (currentMetrics != null) {
                Map<String, Object> map = new HashMap<String, Object>();
                for (Metric metric : currentMetrics) {
                    map.put(metric.getIdentifier(), metric.getValue());
                }
                for (int i = 0; i < buckets.length; i++) {
                    map.put(buckets[i].toString(), currentKey.getParts()[i]);
                }
                t = new Tuple(map);
            }
            currentKey = hashKey;
            if (metrics != null) {
                currentMetrics = new Metric[metrics.length];
                for (int i = 0; i < metrics.length; i++) {
                    Metric bucketMetric = metrics[i].newInstance();
                    bucketMetric.update(tuple);
                    currentMetrics[i] = bucketMetric;
                }
            }
            if (t != null) {
                return t;
            }
        }
    }
}
Also used : HashMap(java.util.HashMap) Metric(org.apache.solr.client.solrj.io.stream.metrics.Metric) HashKey(org.apache.solr.client.solrj.io.comp.HashKey) Tuple(org.apache.solr.client.solrj.io.Tuple)

Example 15 with Metric

use of org.apache.solr.client.solrj.io.stream.metrics.Metric in project lucene-solr by apache.

the class StatsStream method addStats.

private void addStats(ModifiableSolrParams params, Metric[] _metrics) {
    Map<String, List<String>> m = new HashMap<>();
    for (Metric metric : _metrics) {
        String metricId = metric.getIdentifier();
        if (metricId.contains("(")) {
            metricId = metricId.substring(0, metricId.length() - 1);
            String[] parts = metricId.split("\\(");
            String function = parts[0];
            String column = parts[1];
            List<String> stats = m.get(column);
            if (stats == null) {
                stats = new ArrayList<>();
            }
            if (!column.equals("*")) {
                m.put(column, stats);
            }
            if (function.equals("min")) {
                stats.add("min");
            } else if (function.equals("max")) {
                stats.add("max");
            } else if (function.equals("sum")) {
                stats.add("sum");
            } else if (function.equals("avg")) {
                stats.add("mean");
            } else if (function.equals("count")) {
                this.doCount = true;
            }
        }
    }
    for (String field : m.keySet()) {
        StringBuilder buf = new StringBuilder();
        List<String> stats = m.get(field);
        buf.append("{!");
        for (String stat : stats) {
            buf.append(stat).append("=").append("true ");
        }
        buf.append("}").append(field);
        params.add("stats.field", buf.toString());
    }
}
Also used : HashMap(java.util.HashMap) SolrDocumentList(org.apache.solr.common.SolrDocumentList) ArrayList(java.util.ArrayList) NamedList(org.apache.solr.common.util.NamedList) List(java.util.List) Metric(org.apache.solr.client.solrj.io.stream.metrics.Metric)

Aggregations

Metric (org.apache.solr.client.solrj.io.stream.metrics.Metric)22 CountMetric (org.apache.solr.client.solrj.io.stream.metrics.CountMetric)10 MaxMetric (org.apache.solr.client.solrj.io.stream.metrics.MaxMetric)10 MeanMetric (org.apache.solr.client.solrj.io.stream.metrics.MeanMetric)10 MinMetric (org.apache.solr.client.solrj.io.stream.metrics.MinMetric)10 SumMetric (org.apache.solr.client.solrj.io.stream.metrics.SumMetric)10 Test (org.junit.Test)10 Tuple (org.apache.solr.client.solrj.io.Tuple)8 ModifiableSolrParams (org.apache.solr.common.params.ModifiableSolrParams)8 Bucket (org.apache.solr.client.solrj.io.stream.metrics.Bucket)6 SolrClientCache (org.apache.solr.client.solrj.io.SolrClientCache)5 UpdateRequest (org.apache.solr.client.solrj.request.UpdateRequest)5 SolrParams (org.apache.solr.common.params.SolrParams)5 FieldComparator (org.apache.solr.client.solrj.io.comp.FieldComparator)4 MultipleFieldComparator (org.apache.solr.client.solrj.io.comp.MultipleFieldComparator)4 StreamExpression (org.apache.solr.client.solrj.io.stream.expr.StreamExpression)4 StreamExpressionNamedParameter (org.apache.solr.client.solrj.io.stream.expr.StreamExpressionNamedParameter)4 ArrayList (java.util.ArrayList)3 HashMap (java.util.HashMap)3 List (java.util.List)3