Opster Team
Before you begin reading this guide, we recommend you try running the Elasticsearch Error Check-Up which analyzes 2 JSON files to detect many configuration errors.
To easily locate the root cause and resolve this issue try AutoOps for Elasticsearch & OpenSearch. It diagnoses problems by analyzing hundreds of metrics collected by a lightweight agent and offers guidance for resolving them.
Take a self-guided product tour to see for yourself (no registration required).
This guide will help you check for common problems that cause the log ” Could not delete filter with ID ” + filterId + ” because it does not exist ” to appear. To understand the issues related to this log, read the explanation below about the following Elasticsearch concepts: filter, plugin, delete.
Overview
A filter in Elasticsearch is all about applying some conditions inside the query that are used to narrow down the matching result set.
What it is used for
When a query is executed, Elasticsearch by default calculates the relevance score of the matching documents. But in some conditions it does not require scores to be calculated, for instance if a document falls in the range of two given timestamps. For all these Yes/No criteria, a filter clause is used.
Examples
Return all the results of a given index that falls between a date range:
GET my_index/_search { "query": { "bool": { "filter": { "range": { "created_at": { "gte": "2020-01-01", "lte": "2020-01-10" } } } } } }
Notes
- Queries are used to find out how relevant a document is to a particular query by calculating a score for each document, whereas filters are used to match certain criteria and are cacheable to enable faster execution.
- Filters do not contribute to scoring and thus are faster to execute.
- There are major changes introduced in Elasticsearch version 2.x onward related to how query and filters are written and performed internally.
Common problems
- The most common problem with filters is incorrect use inside the query. If filters are not used correctly, query performance can be significantly affected. So filters must be used wherever there is scope of not calculating the score.
- Another problem often arises when using date range filters, if “now” is used to represent the current time. It has to be noted that “now” is continuously changing the timestamp and thus Elasticsearch cannot use caching of the response since the data set will keep changing.
Overview
DELETE is an Elasticsearch API which removes a document from a specific index. This API requires an index name and _id document to delete the document.
Delete a document
DELETE /my_index/_doc/1
Notes
- A delete request throws 404 error code if the document does not already exist in the index.
- If you want to delete a set of documents that matches a query, you need to use delete by query API.
Log Context
Log “Could not delete filter with ID [” + filterId + “] because it does not exist”classname is TransportDeleteFilterAction.java We extracted the following from Elasticsearch source code for those seeking an in-depth context :
executeAsyncWithOrigin(client; ML_ORIGIN; BulkAction.INSTANCE; bulkRequestBuilder.request(); new ActionListener() { @Override public void onResponse(BulkResponse bulkResponse) { if (bulkResponse.getItems()[0].status() == RestStatus.NOT_FOUND) { listener.onFailure( new ResourceNotFoundException("Could not delete filter with ID [" + filterId + "] because it does not exist") ); } else { listener.onResponse(AcknowledgedResponse.TRUE); } }
Find & fix Elasticsearch problems
Opster AutoOps diagnoses & fixes issues in Elasticsearch based on analyzing hundreds of metrics.
Fix Your Cluster IssuesConnect in under 2 minutes
Arpit Ghiya
Senior Lead SRE at Coupa