
org.elasticsearch.search.aggregations.matrix.ArrayValuesSource Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of aggs-matrix-stats-client Show documentation
Show all versions of aggs-matrix-stats-client Show documentation
Adds aggregations whose input are a list of numeric fields and output includes a matrix.
The newest version!
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
package org.elasticsearch.search.aggregations.matrix;
import org.apache.lucene.index.LeafReaderContext;
import org.elasticsearch.index.fielddata.NumericDoubleValues;
import org.elasticsearch.search.MultiValueMode;
import org.elasticsearch.search.aggregations.support.ValuesSource;
import java.io.IOException;
import java.util.Map;
/**
* Class to encapsulate a set of ValuesSource objects labeled by field name
*/
public abstract class ArrayValuesSource {
protected MultiValueMode multiValueMode;
protected String[] names;
protected VS[] values;
public static class NumericArrayValuesSource extends ArrayValuesSource {
public NumericArrayValuesSource(Map valuesSources, MultiValueMode multiValueMode) {
super(valuesSources, multiValueMode);
if (valuesSources != null) {
this.values = valuesSources.values().toArray(new ValuesSource.Numeric[0]);
} else {
this.values = new ValuesSource.Numeric[0];
}
}
public NumericDoubleValues getField(final int ordinal, LeafReaderContext ctx) throws IOException {
if (ordinal > names.length) {
throw new IndexOutOfBoundsException("ValuesSource array index " + ordinal + " out of bounds");
}
return multiValueMode.select(values[ordinal].doubleValues(ctx));
}
}
public static class BytesArrayValuesSource extends ArrayValuesSource {
public BytesArrayValuesSource(Map valuesSources, MultiValueMode multiValueMode) {
super(valuesSources, multiValueMode);
this.values = valuesSources.values().toArray(new ValuesSource.Bytes[0]);
}
public Object getField(final int ordinal, LeafReaderContext ctx) throws IOException {
return values[ordinal].bytesValues(ctx);
}
}
public static class GeoPointValuesSource extends ArrayValuesSource {
public GeoPointValuesSource(Map valuesSources, MultiValueMode multiValueMode) {
super(valuesSources, multiValueMode);
this.values = valuesSources.values().toArray(new ValuesSource.GeoPoint[0]);
}
}
private ArrayValuesSource(Map valuesSources, MultiValueMode multiValueMode) {
if (valuesSources != null) {
this.names = valuesSources.keySet().toArray(new String[0]);
}
this.multiValueMode = multiValueMode;
}
public boolean needsScores() {
boolean needsScores = false;
for (ValuesSource value : values) {
needsScores |= value.needsScores();
}
return needsScores;
}
public String[] fieldNames() {
return this.names;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy