{"record":{"id":"1e653d79d5302b79","repo":"elastic/elasticsearch","slug":"name-is-missing-filters-parameter","errorCode":null,"errorMessage":"[${name}] is missing : filters parameter","messagePattern":"\\[(.+?)\\] is missing : filters parameter","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"modules/aggregations/src/main/java/org/elasticsearch/aggregations/bucket/adjacency/AdjacencyMatrixAggregationBuilder.java","lineNumber":142,"sourceCode":"        separator = in.readString();\n        filters = new ArrayList<>(filtersSize);\n        for (int i = 0; i < filtersSize; i++) {\n            filters.add(new KeyedFilter(in));\n        }\n    }\n\n    @Override\n    protected void doWriteTo(StreamOutput out) throws IOException {\n        out.writeVInt(filters.size());\n        out.writeString(separator);\n        for (KeyedFilter keyedFilter : filters) {\n            keyedFilter.writeTo(out);\n        }\n    }\n\n    private void checkConsistency() {\n        if ((filters == null) || (filters.size() == 0)) {\n            throw new IllegalStateException(\"[\" + name + \"] is missing : \" + FILTERS_FIELD.getPreferredName() + \" parameter\");\n        }\n    }\n\n    private void setFiltersAsMap(Map<String, QueryBuilder> filters) {\n        // Convert uniquely named objects into internal KeyedFilters\n        this.filters = new ArrayList<>(filters.size());\n        for (Entry<String, QueryBuilder> kv : filters.entrySet()) {\n            this.filters.add(new KeyedFilter(kv.getKey(), kv.getValue()));\n        }\n        // internally we want to have a fixed order of filters, regardless of\n        // the order of the filters in the request\n        this.filters.sort(Comparator.comparing(KeyedFilter::key));\n    }\n\n    private AdjacencyMatrixAggregationBuilder setFiltersAsList(List<KeyedFilter> filters) {\n        this.filters = new ArrayList<>(filters);\n        // internally we want to have a fixed order of filters, regardless of\n        // the order of the filters in the request","sourceCodeStart":124,"sourceCodeEnd":160,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/modules/aggregations/src/main/java/org/elasticsearch/aggregations/bucket/adjacency/AdjacencyMatrixAggregationBuilder.java#L124-L160","documentation":"Thrown by AdjacencyMatrixAggregationBuilder.checkConsistency when the filters list is null or empty. The adjacency_matrix aggregation requires at least one keyed filter to build the matrix of co-occurring buckets; without filters the aggregation is undefined. The check fires during validation/rewrite of the builder.","triggerScenarios":"Constructing an `adjacency_matrix` aggregation and calling build() without ever calling filters(...)/setFiltersAsList(...). Submitting a request body with an empty `filters` object. Programmatic construction that conditionally skips setting filters.","commonSituations":"Templated aggregation builders where the filters are populated conditionally and the condition is false. Refactoring that removes the filters wiring. REST requests with malformed aggregation bodies (filters key omitted).","solutions":["Provide at least one keyed filter: `adjacencyMatrix(\"name\", filters)` where filters is non-empty.","Validate the filters map is non-empty before constructing the aggregation.","Check the REST request body contains a non-empty `filters` object.","Review conditional logic that may bypass setting filters."],"exampleFix":"// before\nnew AdjacencyMatrixAggregationBuilder(\"matrix\").build();\n// after\nMap<String,QueryBuilder> f = Map.of(\"a\", QueryBuilders.termQuery(\"t\",\"a\"));\nnew AdjacencyMatrixAggregationBuilder(\"matrix\", f).build();","handlingStrategy":"validation","validationCode":"if (filters == null || filters.isEmpty()) {\n  throw new IllegalArgumentException(\"adjacency_matrix requires at least one filter\");\n}\nnew AdjacencyMatrixAggregationBuilder(\"name\", filters).build();","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always populate the filters map before building an adjacency_matrix.","Validate aggregations built from templates for required fields.","Confirm REST request bodies contain a non-empty filters object."],"tags":["aggregations","adjacency-matrix","validation"],"analyzedSha":"db6a809a667c081ca1dc7500389d26975573215f","analyzedAt":"2026-08-12T01:39:14.192Z","schemaVersion":2},"datasetVersion":"2026-08-12T08:17:17.861Z"}