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("}}");
}
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;
}
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);
}
}
}
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;
}
}
}
}
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());
}
}
Aggregations