148 lines
4.7 KiB
Plaintext
148 lines
4.7 KiB
Plaintext
[[docs-delete-by-query]]
|
|
== Delete By Query API
|
|
|
|
The delete by query API allows to delete documents from one or more
|
|
indices and one or more types based on a query. The query can either be
|
|
provided using a simple query string as a parameter, or using the
|
|
<<query-dsl,Query DSL>> defined within the request
|
|
body. Here is an example:
|
|
|
|
[source,js]
|
|
--------------------------------------------------
|
|
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query?q=user:kimchy'
|
|
|
|
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
|
|
"query" : {
|
|
"term" : { "user" : "kimchy" }
|
|
}
|
|
}
|
|
'
|
|
--------------------------------------------------
|
|
|
|
NOTE: The query being sent in the body must be nested in a `query` key, same as
|
|
the <<search-search,search api>> works
|
|
|
|
Both above examples end up doing the same thing, which is delete all
|
|
tweets from the twitter index for a certain user. The result of the
|
|
commands is:
|
|
|
|
[source,js]
|
|
--------------------------------------------------
|
|
{
|
|
"_indices" : {
|
|
"twitter" : {
|
|
"_shards" : {
|
|
"total" : 10,
|
|
"failed" : 0,
|
|
"successful" : 10,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
--------------------------------------------------
|
|
|
|
Note, delete by query bypasses versioning support. Also, it is not
|
|
recommended to delete "large chunks of the data in an index", many
|
|
times, it's better to simply reindex into a new index.
|
|
|
|
[float]
|
|
[[multiple-indices]]
|
|
=== Multiple Indices and Types
|
|
|
|
The delete by query API can be applied to multiple types within an
|
|
index, and across multiple indices. For example, we can delete all
|
|
documents across all types within the twitter index:
|
|
|
|
[source,js]
|
|
--------------------------------------------------
|
|
$ curl -XDELETE 'http://localhost:9200/twitter/_query?q=user:kimchy'
|
|
--------------------------------------------------
|
|
|
|
We can also delete within specific types:
|
|
|
|
[source,js]
|
|
--------------------------------------------------
|
|
$ curl -XDELETE 'http://localhost:9200/twitter/tweet,user/_query?q=user:kimchy'
|
|
--------------------------------------------------
|
|
|
|
We can also delete all tweets with a certain tag across several indices
|
|
(for example, when each user has his own index):
|
|
|
|
[source,js]
|
|
--------------------------------------------------
|
|
$ curl -XDELETE 'http://localhost:9200/kimchy,elasticsearch/_query?q=tag:wow'
|
|
--------------------------------------------------
|
|
|
|
Or even delete across all indices:
|
|
|
|
[source,js]
|
|
--------------------------------------------------
|
|
$ curl -XDELETE 'http://localhost:9200/_all/_query?q=tag:wow'
|
|
--------------------------------------------------
|
|
|
|
[float]
|
|
[[delete-by-query-parameters]]
|
|
=== Request Parameters
|
|
|
|
When executing a delete by query using the query parameter `q`, the
|
|
query passed is a query string using Lucene query parser. There are
|
|
additional parameters that can be passed:
|
|
|
|
[cols="<,<",options="header",]
|
|
|=======================================================================
|
|
|Name |Description
|
|
|df |The default field to use when no field prefix is defined within the
|
|
query.
|
|
|
|
|analyzer |The analyzer name to be used when analyzing the query string.
|
|
|
|
|default_operator |The default operator to be used, can be `AND` or
|
|
`OR`. Defaults to `OR`.
|
|
|=======================================================================
|
|
|
|
[float]
|
|
[[request-body]]
|
|
=== Request Body
|
|
|
|
The delete by query can use the <<query-dsl,Query
|
|
DSL>> within its body in order to express the query that should be
|
|
executed and delete all documents. The body content can also be passed
|
|
as a REST parameter named `source`.
|
|
|
|
[float]
|
|
[[delete-by-query-distributed]]
|
|
=== Distributed
|
|
|
|
The delete by query API is broadcast across all primary shards, and from
|
|
there, replicated across all shards replicas.
|
|
|
|
[float]
|
|
[[delete-by-query-routing]]
|
|
=== Routing
|
|
|
|
The routing value (a comma separated list of the routing values) can be
|
|
specified to control which shards the delete by query request will be
|
|
executed on.
|
|
|
|
[float]
|
|
[[delete-by-query-consistency]]
|
|
=== Write Consistency
|
|
|
|
Control if the operation will be allowed to execute based on the number
|
|
of active shards within that partition (replication group). The values
|
|
allowed are `one`, `quorum`, and `all`. The parameter to set it is
|
|
`consistency`, and it defaults to the node level setting of
|
|
`action.write_consistency` which in turn defaults to `quorum`.
|
|
|
|
For example, in a N shards with 2 replicas index, there will have to be
|
|
at least 2 active shards within the relevant partition (`quorum`) for
|
|
the operation to succeed. In a N shards with 1 replica scenario, there
|
|
will need to be a single shard active (in this case, `one` and `quorum`
|
|
is the same).
|
|
|
|
[float]
|
|
[[limitations]]
|
|
=== Limitations
|
|
|
|
The delete by query does not support the following queries and filters: `has_child` and `has_parent`.
|