Elasticsearch plugin that adds matrix statistics aggregation functionality for computing statistical measures and relationships across multiple numeric fields
—
Plugin main class and supporting infrastructure that registers the matrix_stats aggregation type with Elasticsearch's aggregation framework.
Main plugin class that integrates the matrix stats aggregation with Elasticsearch's plugin system.
/**
* Main plugin class for the Matrix Stats aggregation
* Registers the matrix_stats aggregation type with Elasticsearch
*/
public class MatrixAggregationPlugin extends Plugin implements SearchPlugin {
/**
* Returns the list of aggregation specifications provided by this plugin
* @return List containing the matrix_stats aggregation specification
*/
public List<AggregationSpec> getAggregations();
}Implementation Details:
The plugin registers a single aggregation type with the following components:
"matrix_stats"MatrixStatsAggregationBuilder::newMatrixStatsParser instance for parsing query DSLInternalMatrixStats::new for deserializing shard resultsUsage Context:
This plugin class is automatically loaded by Elasticsearch when the aggs-matrix-stats module is available. Users don't directly instantiate this class - it's managed by Elasticsearch's plugin framework.
// Plugin registration happens automatically in Elasticsearch
// The following aggregation becomes available in search requests:
{
"aggs": {
"my_matrix_stats": {
"matrix_stats": {
"fields": ["price", "quantity", "discount"]
}
}
}
}Parser class for processing matrix_stats aggregation definitions from Elasticsearch query DSL.
/**
* Parser for matrix stats aggregation query DSL
* Extends NumericValuesSourceParser to handle numeric field aggregations
*/
public class MatrixStatsParser extends NumericValuesSourceParser {
/**
* Default constructor enabling formatting support
*/
public MatrixStatsParser();
/**
* Creates a MatrixStatsAggregationBuilder from parsed aggregation definition
* @param aggregationName Name of the aggregation instance
* @param valuesSourceType Type of values source (numeric)
* @param targetValueType Target value type for the aggregation
* @param otherOptions Additional parsed options (like multiValueMode)
* @return Configured MatrixStatsAggregationBuilder
*/
protected MatrixStatsAggregationBuilder createFactory(
String aggregationName,
ValuesSourceType valuesSourceType,
ValueType targetValueType,
Map<ParseField, Object> otherOptions
);
}Supported Query DSL Options:
{
"matrix_stats": {
"fields": ["field1", "field2", "field3"],
"missing": {
"field1": 0,
"field2": 10.5
},
"mode": "avg"
}
}Service Provider Interface (SPI) class for registering XContent parsers with Elasticsearch's content parsing framework.
/**
* SPI provider for registering matrix stats XContent parsers
* Enables parsing of matrix stats aggregation results from JSON responses
*/
public class MatrixStatsNamedXContentProvider implements NamedXContentProvider {
/**
* Returns the list of named XContent parser entries for this plugin
* @return List containing parser entry for ParsedMatrixStats
*/
public List<NamedXContentRegistry.Entry> getNamedXContentParsers();
}Registration Details:
This SPI provider registers a parser for the "matrix_stats" aggregation type that:
"matrix_stats"Aggregation.classParsedMatrixStats.fromXContentThis enables Elasticsearch clients to automatically parse matrix stats aggregation results from JSON responses into ParsedMatrixStats objects.
Helper class providing inspection and testing utilities for matrix aggregations.
/**
* Helper class for aggregation inspection and testing
* Provides utilities for examining matrix aggregation internals
*/
public class MatrixAggregationInspectionHelper {
// Implementation details are internal to Elasticsearch testing framework
// This class is primarily used for unit testing and debugging
}The matrix stats plugin integrates with Elasticsearch through several extension points:
/**
* Elasticsearch's SearchPlugin interface allows plugins to extend search functionality
*/
public interface SearchPlugin {
/**
* Returns aggregation specifications provided by this plugin
* @return List of AggregationSpec instances
*/
default List<AggregationSpec> getAggregations() {
return Collections.emptyList();
}
}
/**
* Specification for registering an aggregation type
*/
public static class AggregationSpec {
/**
* Create aggregation specification
* @param name Aggregation type name used in queries
* @param builderReader Function to create builder from stream input
* @param parser Parser for query DSL
*/
public AggregationSpec(
String name,
Writeable.Reader<? extends AggregationBuilder> builderReader,
Aggregator.Parser parser
);
/**
* Add result reader for deserializing aggregation results
* @param resultReader Function to create result from stream input
* @return This specification for chaining
*/
public AggregationSpec addResultReader(
Writeable.Reader<? extends InternalAggregation> resultReader
);
}getAggregations() is called to register aggregation typesmatrix_stats appears in queries, the registered parser handles itThe plugin registration system handles various error conditions:
The plugin depends on core Elasticsearch classes:
org.elasticsearch.plugins.Plugin - Base plugin interfaceorg.elasticsearch.plugins.SearchPlugin - Search extension interfaceorg.elasticsearch.search.aggregations.* - Aggregation framework classesorg.elasticsearch.plugins.spi.NamedXContentProvider - Content parsing SPIInstall with Tessl CLI
npx tessl i tessl/maven-org-elasticsearch-plugin--aggs-matrix-stats-client