How to Delete Data from Elasticsearch

Data Tutorial

One of the unique design features of Elasticsearch is that, unlike most traditional systems or databases, all tasks such as connecting to and manipulating Elasticsearch are performed using a REST API, meaning that nearly every query or command executed on your Elasticsearch node is a simple HTTP request to a particular URL.

Depending on the HTTP verb sent and the URL that verb it is sent to, Elasticsearch can perform a huge variety of actions on the node or even the cluster.

The Elasticsearch REST API URL Structure

At the most basic level, to execute a command in Elasticsearch, you’ll need to send an HTTP verb to the URL of your Elasticsearch node. For development, typically this is localhost:9200.

In most cases, the simplest method for sending a request to the REST API of Elasticsearch is through the useful command-line tool, cURL, which is a simple tool used to transfer nearly any kind of Internet data.

For example, to list all indices, you may execute the following curl command from the shell prompt of your development server (as indicated in the official documentation):

$ curl 'localhost:9200/_cat/indices?v'
health index pri rep docs.count docs.deleted bookstore.size pri.bookstore.size

Here we’re accessing the cat API (indicated by the leading _ underscore) and viewing the indices, which shows a cross-section of each index in the cluster.

Indices, Types, Documents, and Properties

With an example in place, we can explore in more detail the specific structure of Elasticsearch REST APIs, which are most often going to consist of three structured components, the index, the type, and the document:

localhost:9200/index/type/document

The index is the parent structure and is most simply thought of as a database that houses many types. And index can represent any concept, but often will represent a whole system of components such as a shop or a bookstore.

Types are contained in an index and are similar to database tables, with each type representing a collection of similar objects (like shirt or book).

Finally, the document is a single instance or representation of an object of the parent type. Thus, the book “The Hobbit” may exist as a book type in the index named bookstore.

Deleting Data from Elasticsearch

With the basic REST API syntax out of the way, we can explore how to perform specific actions like deleting data.

Delete a Single Document

Taking our basic syntax as seen above, we need to use curl and send the DELETE HTTP verb, using the -XDELETE option:

$ curl -XDELETE 'localhost:9200/index/type/document'

For example, to delete our aforementioned book document, we might use the following command:

$ curl -XDELETE 'localhost:9200/bookstore/book/1'

This will delete the document with an ID of 1 from the book type that is within the bookstore index.

Delete a Type

As you might guess, with the syntax only broadening slightly, we’re able to remove an entire type. Here we’re deleting the book type:

$ curl -XDELETE 'localhost:9200/bookstore/book'

Delete an Index

Lastly, if we wish to delete an entire index, this can be done using the same syntax as before:

$ curl -XDELETE 'localhost:9200/bookstore'