CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-elasticsearch-plugin--aggs-matrix-stats-client

Elasticsearch plugin that adds matrix statistics aggregation functionality for computing statistical measures and relationships across multiple numeric fields

Pending
Overview
Eval results
Files

plugin-registration.mddocs/

Plugin Registration

Plugin main class and supporting infrastructure that registers the matrix_stats aggregation type with Elasticsearch's aggregation framework.

Capabilities

MatrixAggregationPlugin

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:

  • Aggregation Name: "matrix_stats"
  • Builder Factory: MatrixStatsAggregationBuilder::new
  • Parser: MatrixStatsParser instance for parsing query DSL
  • Result Reader: InternalMatrixStats::new for deserializing shard results

Usage 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"]
      }
    }
  }
}

MatrixStatsParser

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"
  }
}

MatrixStatsNamedXContentProvider

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:

  • Parse Field: "matrix_stats"
  • Target Class: Aggregation.class
  • Parser Function: ParsedMatrixStats.fromXContent

This enables Elasticsearch clients to automatically parse matrix stats aggregation results from JSON responses into ParsedMatrixStats objects.

MatrixAggregationInspectionHelper

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
}

Plugin Integration Architecture

The matrix stats plugin integrates with Elasticsearch through several extension points:

Search Plugin Interface

/**
 * 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
    );
}

Plugin Lifecycle

  1. Loading: Elasticsearch discovers the plugin via classpath scanning
  2. Registration: getAggregations() is called to register aggregation types
  3. Query Processing: When matrix_stats appears in queries, the registered parser handles it
  4. Execution: Elasticsearch creates aggregators using the registered builder factory
  5. Result Processing: Results are serialized/deserialized using registered result readers

Error Handling

The plugin registration system handles various error conditions:

  • Plugin Loading Errors: If the plugin fails to load, Elasticsearch logs errors and continues without the plugin
  • Registration Conflicts: If multiple plugins try to register the same aggregation name, Elasticsearch reports conflicts
  • Parser Errors: Invalid query DSL is handled by the parser with appropriate error messages
  • Version Compatibility: Plugin version compatibility is enforced by Elasticsearch's plugin system

Dependencies

The plugin depends on core Elasticsearch classes:

  • org.elasticsearch.plugins.Plugin - Base plugin interface
  • org.elasticsearch.plugins.SearchPlugin - Search extension interface
  • org.elasticsearch.search.aggregations.* - Aggregation framework classes
  • org.elasticsearch.plugins.spi.NamedXContentProvider - Content parsing SPI

Install with Tessl CLI

npx tessl i tessl/maven-org-elasticsearch-plugin--aggs-matrix-stats-client

docs

aggregation-builder.md

index.md

plugin-registration.md

statistical-results.md

tile.json