| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 | [[java-rest-high-document-delete-by-query]]=== Delete By Query API[[java-rest-high-document-delete-by-query-request]]==== Delete By Query RequestA `DeleteByQueryRequest` can be used to delete documents from an index. It requires an existing index (or a set of indices)on which deletion is to be performed.The simplest form of a `DeleteByQueryRequest` looks like:["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-request]--------------------------------------------------<1> Creates the `DeleteByQueryRequest` on a set of indices.By default version conflicts abort the `DeleteByQueryRequest` process but you can just count them by settings it to`proceed` in the request body["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-request-conflicts]--------------------------------------------------<1> Set `proceed` on version conflictYou can limit the documents by adding a type to the source or by adding a query.["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-request-typeOrQuery]--------------------------------------------------<1> Only copy `doc` type<2> Only copy documents which have field `user` set to `kimchy`It’s also possible to limit the number of processed documents by setting size.["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-request-size]--------------------------------------------------<1> Only copy 10 documentsBy default `DeleteByQueryRequest` uses batches of 1000. You can change the batch size with `setBatchSize`.["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-request-scrollSize]--------------------------------------------------<1> Use batches of 100 documents`DeleteByQueryRequest` also helps in automatically parallelizing using `sliced-scroll` toslice on `_uid`. Use `setSlices` to specify the number of slices to use.["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-request-slices]--------------------------------------------------<1> set number of slices to use`DeleteByQueryRequest` uses the `scroll` parameter to control how long it keeps the "search context" alive.["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-request-scroll]--------------------------------------------------<1> set scroll timeIf you provide routing then the routing is copied to the scroll query, limiting the process to the shards that matchthat routing value.["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-request-routing]--------------------------------------------------<1> set routing==== Optional argumentsIn addition to the options above the following arguments can optionally be also provided:["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-request-timeout]--------------------------------------------------<1> Timeout to wait for the delete by query request to be performed as a `TimeValue`["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-request-refresh]--------------------------------------------------<1> Refresh index after calling delete by query["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-request-indicesOptions]--------------------------------------------------<1> Set indices options[[java-rest-high-document-delete-by-query-sync]]==== Synchronous Execution["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-execute]--------------------------------------------------[[java-rest-high-document-delete-by-query-async]]==== Asynchronous ExecutionThe asynchronous execution of an delete by query request requires both the `DeleteByQueryRequest`instance and an `ActionListener` instance to be passed to the asynchronousmethod:["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-execute-async]--------------------------------------------------<1> The `DeleteByQueryRequest` to execute and the `ActionListener` to use whenthe execution completesThe asynchronous method does not block and returns immediately. Once it iscompleted the `ActionListener` is called back using the `onResponse` methodif the execution successfully completed or using the `onFailure` method ifit failed.A typical listener for `BulkByScrollResponse` looks like:["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-execute-listener]--------------------------------------------------<1> Called when the execution is successfully completed. The response isprovided as an argument and contains a list of individual results for eachoperation that was executed. Note that one or more operations might havefailed while the others have been successfully executed.<2> Called when the whole `DeleteByQueryRequest` fails. In this case the raisedexception is provided as an argument and no operation has been executed.[[java-rest-high-document-delete-by-query-execute-listener-response]]==== Delete By Query ResponseThe returned `BulkByScrollResponse` contains information about the executed operations and allows to iterate over each result as follows:["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-by-query-response]--------------------------------------------------<1> Get total time taken<2> Check if the request timed out<3> Get total number of docs processed<4> Number of docs that were deleted<5> Number of batches that were executed<6> Number of skipped docs<7> Number of version conflicts<8> Number of times request had to retry bulk index operations<9> Number of times request had to retry search operations<10> The total time this request has throttled itself not including the current throttle time if it is currently sleeping<11> Remaining delay of any current throttle sleep or 0 if not sleeping<12> Failures during search phase<13> Failures during bulk index operation
 |