Reputation: 11151
I want to remove data from ElasticSearch. I have deleted my indexes. However, that doesn't seem to actually remove the data itself. The other stuff I've seen points to the Delete by Query feature. However, I'm not even sure what to query on. I know my indexes. Essentially, I'd like to figure out how to do a
DELETE FROM [Index]
From PostMan in Chrome. However, I'm not having any luck. It seems like no matter what I do, the data hangs around. Thus far, I've successfully deleted the indexes by using the DELETE HTTP Verb in PostMan and using a url like:
http://localhost:9200/[indexName]
However, that doesn't seem to actually remove the data (aka docs) themselves.
Upvotes: 503
Views: 974945
Reputation: 1160
For delete whole content of index in Elastic:
in Dev Tool
of Elastic. (you can find it in hamburger menu)
and white bellow query:
POST /index_name/_delete_by_query
{
"query": {
"match_all": {}
}
}
Remeber: write your own index instead of index_name
Upvotes: 1
Reputation: 2204
Case 1: If you want to delete the index and its document too then,
command : DELETE /INDEX_NAME_TO_DELETE
example : DELETE student
here student is index name.
Case 2: if you want delete only documents not index then,
command:
POST INDEX_NAME/_delete_by_query
{
"query": {
"match_all": {}
}
}
Example :
POST students/_delete_by_query
{
"query": {
"match_all": {}
}
}
Note : Use the POST method in case 2.
Upvotes: 0
Reputation: 2152
The year is 2023, I came across this question as I had the same problem, however, I needed to remove an item only from an index.
Scenario data:
Index name: requisitions-index
Item Id I needed to remove: 3d70b8eb-0889-445e-9e17-d5d96a97febc
Item type: _doc
CURL command used:
curl --request DELETE \
--url http://localhost:9201/requisicoes-index/_doc/3d70b8eb-0889-445e-9e17-d5d96a97febc \
--header 'Accept: application/json' \
--header 'Authorization: Basic AWthc6GpYzpjvGFuZ2RhXW==' \
--header 'Content-Type: application/json'
Remembering that the Elasticsearch instance required authentication, so I sent the authentication data using BASIC in the Insomnia tool
Details in the images below:
Insomnia client - for CURL DELETE command:
Upvotes: 0
Reputation: 1194
To delete all red indices you can execute:
es_host=127.0.0.1:9210
curl -s "$es_host/_cat/indices?v" | grep red | tr -s " " | cut -d" " -f3 | xargs -I '{}' curl -XDELETE $es_host/{}
Upvotes: 0
Reputation: 20023
If you ever need to delete all the indexes, this may come in handy:
curl -X DELETE 'http://localhost:9200/_all'
Powershell:
Invoke-WebRequest -method DELETE http://localhost:9200/_all
Note: This will delete all data, including your x-pack access credentials and Kibana dashboard and visualizations
Upvotes: 595
Reputation: 8347
You can delete using cURL
or visually using one of the many tools that open source enthusiasts have created for Elasticsearch.
Using cURL
curl -XDELETE localhost:9200/index/type/documentID
e.g.
curl -XDELETE localhost:9200/shop/product/1
You will then receive a reply as to whether this was successful or not. You can delete an entire index or types with an index also, you can delete a type by leaving out the document ID like so -
curl -XDELETE localhost:9200/shop/product
If you wish to delete an index -
curl -XDELETE localhost:9200/shop
If you wish to delete more than one index that follows a certain naming convention (note the *
, a wildcard), -
curl -XDELETE localhost:9200/.mar*
Visually
There are various tools as mentioned above, I wont list them here but I will link you to one which enables you to get started straight away, located here. This tool is called Cerebro (former KOPF), to connect to your host please click on the logo on top left hand corner and enter the URL of your cluster.
Once connected you will be able to administer your entire cluster, delete, optimise and tune your cluster.
Upvotes: 513
Reputation: 434
I am using Kibana as a tool for viewing and searching elastic search data and I recommend it based on good user experience.
Following queries would help remove data from elastic search -
Case 1:
If you know the id of that data row:
DELETE /index_name/_doc/{id}
Case 2:
Delete based on a column value:
Suppose I have a column named abc
.
Now I have to get _id
field based in column_name to finally delete for that row.
GET /uts_checkout_configurations/_search { "query" : { "constant_score" : { "filter" : { "bool": { "must": {"exists": {"field": "ABC"}} } } } } }
Finally you would get your data with _id
as one the fields in it.
Delete based on that -
DELETE /index_name/_doc/{_id}
Upvotes: 0
Reputation: 663
I used Dev Tools to delete data
POST <index_name>/_delete_by_query
{
"query": {
"match_all": {}
}
}
Example
POST vehicle-data/_delete_by_query
{
"query": {
"match_all": {}
}
}
Upvotes: 6
Reputation: 1613
1. Delete API
Removes a document from the specified index.
DELETE /<index>/_doc/<_id>
Example:
DELETE http://localhost:9200/my-index-000001/_doc/1
Reference : ES Guide >> Delete API
2. Delete by query API
Deletes documents that match the specified query.
Example:
POST http://localhost:9200/my-index-000001/_delete_by_query
{
"query": {
"match": {
"user.id": "elkbee"
}
}
}
Reference : ES Guide >> Delete by query API
Upvotes: 12
Reputation: 61
Adding to the delete_by_query
suggestion, if you want to quickly delete all records in a given index it may be also important to set the scroll_size
and conflicts
parameters.
POST http://localhost:9200/my-index-000001/_delete_by_query?scroll_size=100&conflicts=proceed
{
"query": {
"match_all": {}
}
}
Upvotes: 1
Reputation: 5282
A python script in order to delete all indexes:
import requests
import json
ES_HOST = "http://localhost:9200"
ES_URL = f"{ES_HOST}/_cat/indices?format=json"
indexes = requests.get(ES_URL).content
indexes = json.loads(index.decode())
for i in index:
index_name = i['index']
content = requests.delete(f"{ES_HOST}/{index_name}").content
print(content)
Upvotes: 0
Reputation: 6566
You can try this curl
:
curl --location --request DELETE 'http://<username>:<password>@<url>:9200/<index name>/<doc type>/<document id>
Or if you do not want to set the username and password at URL, then can also try this curl:
curl --location --request DELETE 'http://<url>:9200/<index name>/<doc type>/<document id>' --header 'Authorization: Basic <Base64 encoded username:password>'
After executing the response body will contains a result
field. If this field's value is deleted
, then it means that the document deleted successfully.
In this curl
I assumed that you have configured your elastic to use http
. If you are using https
, simply change the protocol to https
.
Upvotes: 0
Reputation: 553
You can also use chrome extension elasticsearch-head to delete index
Upvotes: 3
Reputation: 2609
Say I need to delete an index filebeat-7.6.2-2020.04.30-000001
and I performed it using a curl DELETE option (curl -X DELETE "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty"
) and results in an authentication problem as below;
{
"error" : {
"type" : "security_exception",
"reason" : "missing authentication credentials for REST request [/filebeat-7.6.2-2020.04.30-000001?pretty]"
},
"status" : 401
}
Here you should authenticate the curl request using the username and password you have provided for Elasticsearch. Try then
curl -X DELETE -u myelasticuser:myelasticpassword "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty"
will results in { "acknowledged" : true }.
Upvotes: 1
Reputation: 1134
You can delete one or more indices, which really deletes their files from disk. For example:
curl -XDELETE localhost:9200/$INDEXNAME
Where $INDEXNAME
can be an index name (e.g. users_v2
), N indices separated by comma (e.g. users_v2,users_v3
). An index pattern (e.g. users_*
) or _all
, also works, unless it's blocked in the config via action.destructive_requires_name: true
.
Deleting individual documents is possible, but this won't immediately purge them. A delete is only a soft delete, and documents are really removed during segment merges. You'll find lots of details about segments and merges in this presentation. It's about Solr, but merges are from Lucene, so you have the same options in Elasticsearch.
Back to the API, you can either delete individual documents by ID (provide a routing value if you index with routing):
curl -XDELETE localhost:9200/users_v2/_doc/user1
Or by query:
curl -XPOST -H 'Content-Type: application/json' localhost:9200/users_v2/_delete_by_query -d '{
"query": {
"match": {
"description_field": "bad user"
}
}
}'
Upvotes: 6
Reputation: 657
You can delete either whole index,doc-type or a perticular id data. these are the three ways:
curl -XDELETE localhost:9200/index_name
curl -XDELETE localhost:9200/index_name/doc-type
curl -XDELETE localhost:9200/index_name/doc-type/documentId
and if you wish to delete all the index then go for wildcard.
Upvotes: 7
Reputation: 747
You can delete the index by Kibana Console:
To get all index:
GET /_cat/indices?v
To delete a specific index:
DELETE /INDEX_NAME_TO_DELETE
Upvotes: 15
Reputation: 792
curl -X DELETE 'https://localhost:9200/_all'
Change http
to https
if you are using SSL certificate in you application
Upvotes: 18
Reputation: 1339
To list down the indices
curl -L localhost:9200/_cat/indices
9200
default port[change the port if using some other port]
You will likely find all indices starting with logstash-yyyy-mm-dd
format(logstash-*)
You can see all the indices and use
To delete the indices and data trigger following command.
curl -XDELETE localhost:9200/index_name
(Which will remove the data and indices both).
Upvotes: 12
Reputation: 10284
The documentation (or The Definitive Guide) says, that you can also use the next query to delete all indices:
curl -XDELETE 'http://localhost:9200/*'
And there's an important note:
For some, the ability to delete all your data with a single command is a very scary prospect. If you want to eliminate the possibility of an accidental mass-deletion, you can set the following to
true
in yourelasticsearch.yml
:
action.destructive_requires_name: true
Upvotes: 62
Reputation: 5359
For mass-delete by query you may use special delete by query API:
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
"query" : {
"term" : { "user" : "kimchy" }
}
}
Who interesting it has long history.
Upvotes: 8
Reputation: 51
You can also delete the index using DELETE action in 'elasticsearch head' (Chrome plugin ). Add it to your chrome and connect it to your host. There you will find all your indices and if you click on actions button below the index you want to delete, you will find a DELETE option in the drop down. click on it and enter DELETE in the pop-up. Your index will be deleted. 'Elasticsearch head' extension is an easy way to view and manage your indices and data.
Upvotes: 4
Reputation: 5276
simplest way !
Endpoint :
http://localhost:9201/twitter/_delete_by_query
Payload :
{
"query": {
"match": {
"message": "some message"
}
}
}
where twitter
is the index in elastic search
ref ; https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html
Upvotes: 11
Reputation: 61
I wanted to delete logstash index and searched a lot regarding different tools like curl. But found the solution at the end.
Login into Kibana. Go to Dev Tools tab and type DELETE /logstash-*
in query field and hit green arrow button. if you get "acknowledged": true in response that means the data has been cleared.
Upvotes: 6
Reputation: 1071
#list all index: curl -XGET http://localhost:9200/_cat/indices?v
#delete index: curl -XDELETE 'localhost:9200/index_name'
#delete all indices: curl -XDELETE 'localhost:9200/_all'
#delete document : curl -XDELETE 'localhost:9200/index_name/type_name/document_id'
Install kibana. Kibana has a smarter dev tool which helps to build query easily.
Upvotes: 30
Reputation: 291
You can delete an index in python as follows
from elasticsearch import Elasticsearch
es = Elasticsearch([{'host':'localhost', 'port':'9200'}])
es.index(index='grades',doc_type='ist_samester',id=1,body={
"Name":"Programming Fundamentals",
"Grade":"A"
})
es.indices.delete(index='grades')
Upvotes: 11
Reputation: 599
You have to send a DELETE
request to
http://[your_host]:9200/[your_index_name_here]
You can also delete a single document:
http://[your_host]:9200/[your_index_name_here]/[your_type_here]/[your_doc_id]
I suggest you to use elastichammer.
After deleting you can look up if the index still exists with the following URL: http://[your_host]:9200/_stats/
Good luck!
Upvotes: 38
Reputation: 3876
There are lots of good answers here, but there is also something i'd like to add:
Upvotes: 5
Reputation: 221
Deleting the index will delete the mapping and type along. you can delete all rows by the following query
curl -XDELETE 'localhost:9200/twitter/tweet/_query?pretty' -d'
{
"query": {
"match_all":
}
}'
However for above query you need to install delete-by-query plugin as of Elasticsearch's 2.0.0-beta1 delete-by-query was removed from main api
Install delete-by-query plugin
sudo bin/plugin install delete-by-query
For more
http://blog.appliedinformaticsinc.com/how-to-delete-elasticsearch-data-records-by-dsl-query/
Upvotes: 22