如何使用elasticsearch python中的特定字段名称从多个索引中删除文档?

时间:2018-01-23 04:55:45

标签: python curl elasticsearch logstash pyelasticsearch

这是示例文档。

{
"_index": "mqtt-index-2018.01.23",
"_type": "iot_data",
"_id": "AWEjA7LNRU4cTUO-Lyj4",
"_score": null,
"_source": {
"message": "{\"datastream_name\": \"roshni\", \"value\": 12, 
\"context\": {\"latitude\": 0, \"elevation\": 0, \"longitude\": 0}, 
\"device_id\": 31}",
"@version": "1",
"@timestamp": "2018-01-23T12:34:59.687Z",
"host": "iot-elk",
"topic": "telemetry/f2a55827ef554475a41c3c96369957f0/roshni",
"datastream_name": "roshni",
"value": 12,
"context": {
  "latitude": 0,
  "elevation": 0,
  "longitude": 0
},
"device_id": 31,
"tstamp": "2018-01-23T12:34:59.687Z"
},
"fields": {
"tstamp": [
  1516710899687
],
"@timestamp": [
  1516710899687
]
},
"sort": [
 1516710899687
]
}

我想使用device_id字段删除文档。 如何使用API​​调用或使用python客户端删除它?我已经使用Document _id和特定索引尝试了它,但我想通过使用device_id字段或其他字段来删除它。

4 个答案:

答案 0 :(得分:1)

使用以下DELETE API调用从elasticsearch中的多个索引中删除文档。

curl -XDELETE 'http://localhost:9200/mqtt-index-*/logs/_query' -d '{
"query" : {
    "match" : {"device_id": 31}
}
}' -i

答案 1 :(得分:0)

没有示例代码的简短回答:

  • 将json转换为dict(请参阅Converting JSON String to Dictionary Not List
  • 如果您有许多这样的数据结构,请根据您的搜索条件(例如pandoc *.md -o result.html )建立一个列表(例如{{1}})

答案 2 :(得分:0)

在使用原始API方面,我相信this is what you are looking for

根据您使用的python库,它在python中实际上更容易。我使用elasticesearch-dsl-py来构建查询对象。 You can call delete on these query objects

关于跨越多个索引,ElasticSearch支持使用通配符*或使用逗号分隔索引。

答案 3 :(得分:0)

您还可以删除包含多个字段的文档。

curl -XDELETE 'http://localhost:9200/mqtt-index-*/logs/_query' -d '{
"query" : {
    "bool": {
        "must":[
    {"match" : {"device_id":31}}, 
    {"match":  {"datastream_name": "test"}}
    ]
}
}' -i