我是ElasticSearch的新手。我试图弄清楚如何从ElasticSearch中删除数据。我删除了索引。但是,这似乎并没有真正删除数据本身。我见过的其他内容指向Delete by Query功能。但是,我甚至不确定要查询什么。我知道我的索引。从本质上讲,我想知道如何做一个
DELETE FROM [Index]
来自Chrome中的PostMan。但是,我没有运气。似乎无论我做什么,数据都会悬而未决。到目前为止,我已经使用PostMan中的DELETE HTTP Verb并使用类似的URL成功删除了索引:
http://localhost:9200/[indexName]
但是,这似乎并没有真正删除数据(也称为文档)。
答案 0 :(得分:382)
如果您需要删除所有索引,这可能会派上用场:
curl -X DELETE 'http://localhost:9200/_all'
Powershell的:
Invoke-WebRequest -method DELETE http://localhost:9200/_all
答案 1 :(得分:329)
您可以使用cURL
删除,也可以使用开源爱好者为Elasticsearch创建的众多工具之一进行直观删除。
使用cURL
curl -XDELETE localhost:9200/index/type/documentID
e.g。
curl -XDELETE localhost:9200/shop/product/1
然后,您将收到有关这是否成功的回复。您也可以使用索引删除整个索引或类型,您可以通过省略文档ID来删除类型 -
curl -XDELETE localhost:9200/shop/product
如果您想删除索引 -
curl -XDELETE localhost:9200/shop
如果您希望删除遵循某个命名约定的多个索引(请注意*
,一个通配符), -
curl -XDELETE localhost:9200/.mar*
<强>目视强>
上面提到了各种各样的工具,我不会在这里列出,但我会将你链接到一个让你立即开始的工具,位于here。此工具称为KOPF,要连接到您的主机,请单击左上角的徽标并输入群集的URL。
连接后,您将能够管理整个群集,删除,优化和调整群集。
答案 2 :(得分:43)
documentation(或The Definitive Guide)表示您还可以使用下一个查询删除所有索引:
curl -XDELETE 'http://localhost:9200/*'
还有一个重要的注意事项:
对于某些人来说,使用单个命令删除所有数据的能力是一个非常可怕的前景。如果您想消除意外批量删除的可能性,可以将以下内容设置为
true
中的elasticsearch.yml
:
action.destructive_requires_name: true
答案 3 :(得分:23)
您必须向
发送DELETE
个请求
http://[your_host]:9200/[your_index_name_here]
您也可以删除单个文档:
http://[your_host]:9200/[your_index_name_here]/[your_type_here]/[your_doc_id]
我建议您使用elastichammer。
删除后,您可以使用以下网址查找索引是否仍然存在:http://[your_host]:9200/_stats/
答案 4 :(得分:14)
删除索引将删除映射并键入。您可以通过以下查询删除所有行
curl -XDELETE 'localhost:9200/twitter/tweet/_query?pretty' -d'
{
"query": {
"match_all":
}
}'
但是对于上述查询,您需要安装按查询删除插件,从Elasticsearch开始,2.0.0-beta1从主api中删除了逐个查询
Install delete-by-query plugin
sudo bin/plugin install delete-by-query
了解更多
http://blog.appliedinformaticsinc.com/how-to-delete-elasticsearch-data-records-by-dsl-query/
答案 5 :(得分:9)
#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'
安装kibana。 Kibana有一个更智能的开发工具,可以帮助您轻松构建查询。
答案 6 :(得分:6)
您可以在python中删除索引,如下所示
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')
答案 7 :(得分:5)
Endpoint :
http://localhost:9201/twitter/_delete_by_query
Payload :
{
"query": {
"match": {
"message": "some message"
}
}
}
其中twitter
是弹性搜索中的索引
参考; https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html
答案 8 :(得分:4)
这里有很多好的答案,但也有一些我想补充的内容:
答案 9 :(得分:4)
对于按查询进行批量删除,您可以使用特殊delete by query API:
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
"query" : {
"term" : { "user" : "kimchy" }
}
}
有趣的是它有悠久的历史。
答案 10 :(得分:4)
curl -X DELETE 'https://localhost:9200/_all'
如果您在应用程序中使用SSL证书,请将http
更改为https
答案 11 :(得分:3)
我想删除logstash索引,并搜索了很多关于curl等不同工具的信息。但最终找到了解决方案。
登录Kibana。转到开发工具选项卡,在查询字段中键入DELETE /logstash-*
,然后单击绿色箭头按钮。如果你得到'#34;确认&#34;:回答为真,这意味着数据已被清除。
答案 12 :(得分:3)
您可以删除整个索引,doc-type或特定的id数据。 这些是三种方式:
curl -XDELETE localhost:9200 / index_name
curl -XDELETE localhost:9200 / index_name / doc-type
curl -XDELETE localhost:9200 / index_name / doc-type / documentId
如果您想删除所有索引,请转到通配符。
答案 13 :(得分:3)
使用Curl -L localhost:9200 / _cat / indices - 列出索引
9200:默认端口[如果使用其他端口则更改端口]
您可能会发现所有索引都以logstash-yyyy-mm-dd格式开头。(logstash - *)
您现在可以列出所有索引并使用
卷曲-XDELETE localhost:9200 / index_name(这将删除数据和索引)。
答案 14 :(得分:2)
您还可以使用“elasticsearch head”(Chrome plugin)中的DELETE操作删除索引。将其添加到您的Chrome并将其连接到您的主机。在那里,您将找到所有索引,如果单击要删除的索引下方的“操作”按钮,则会在下拉列表中找到“删除”选项。单击它并在弹出窗口中输入DELETE。您的索引将被删除。 “Elasticsearch head”扩展是查看和管理索引和数据的简便方法。
答案 15 :(得分:2)
您可以通过Kibana控制台删除索引:
获取所有索引:
class ProductForm(PlaceholderMixin, ModelForm):
class Meta:
model = Product
fields = ('name', 'description', 'location', 'store')
要删除特定索引,请执行以下操作:
class PlaceholderMixin:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs):
field_names = [field_name for field_name, _ in self.fields.items()]
for field_name in field_names:
field = self.fields.get(field_name)
field.widget.attrs.update({'placeholder': field.label})
答案 16 :(得分:2)
您可以删除一个或多个索引,这实际上会从磁盘上删除其文件。例如:
'0'
其中curl -XDELETE localhost:9200/$INDEXNAME
可以是索引名称(例如$INDEXNAME
),N个索引以逗号分隔(例如users_v2
)。索引模式(例如users_v2,users_v3
)或users_*
也可以使用,除非它通过_all
在配置中被阻止。
可以删除单个文档,但这不会立即清除它们。删除只是一个软删除,在segment merges期间确实删除了文档。您可以在this presentation中找到有关细分和合并的许多详细信息。它与Solr有关,但是合并来自Lucene,因此您在Elasticsearch中具有相同的选项。
返回API,您可以按ID删除单个文档(如果使用路由编制索引,则提供路由值):
action.destructive_requires_name: true
或通过查询:
curl -XDELETE localhost:9200/users_v2/_doc/user1
答案 17 :(得分:1)
您可以使用Chrome扩展名elasticsearch-head删除索引
答案 18 :(得分:0)
说我需要删除索引filebeat-7.6.2-2020.04.30-000001
,然后使用curl DELETE选项(curl -X DELETE "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty"
)进行索引,并导致如下的验证问题;
{
"error" : {
"type" : "security_exception",
"reason" : "missing authentication credentials for REST request [/filebeat-7.6.2-2020.04.30-000001?pretty]"
},
"status" : 401
}
在这里,您应该使用为Elasticsearch提供的用户名和密码来验证curl请求。然后尝试
curl -X DELETE -u myelasticuser:myelasticpassword "localhost:9200/filebeat-7.6.2-2020.04.30-000001?pretty"
将产生 { “确认”:true } 。
答案 19 :(得分:0)
按查询删除 API
删除与指定查询匹配的文档。
示例:
POST /my-index-000001/_delete_by_query
{
"query": {
"match": {
"user.id": "elkbee"
}
}
}
答案 20 :(得分:0)
你可以试试这个curl
:
curl --location --request DELETE 'http://<username>:<password>@<url>:9200/<index name>/<doc type>/<document id>
或者如果你不想在 URL 设置用户名和密码,那么也可以试试这个 curl:
curl --location --request DELETE 'http://<url>:9200/<index name>/<doc type>/<document id>' --header 'Authorization: Basic <Base64 encoded username:password>'
执行后响应正文将包含一个 result
字段。如果该字段的值为deleted
,则表示文档删除成功。
在此 curl
中,我假设您已将弹性配置为使用 http
。如果您使用的是 https
,只需将协议更改为 https
。