【Elasticsearch】查询并删除匹配文档之_delete_by_query

思路:先查询确认,后精准删除

假设我想删除title是”小明今晚真的不加班“这条记录,先查看一下现有的记录:

(不加班不好吗?为什么要删除呢?)

tips:可以使用match_phrase精准查询,查询命令可以通过curl查询,也可以通过其他工具请求(其实道理都一样)

curl -X POST "http://192.168.16.65:9211/blog/_search" -H 'Content-Type: application/json' -d'
{
    "query": {
        "match_phrase": {
            "title": "小明今晚真的不加班"
        }
    }
}
'

blog为索引,_search为es的查询指令,查询结果如下:

{
	"took": 13,
	"timed_out": false,
	"_shards": {
		"total": 3,
		"successful": 3,
		"skipped": 0,
		"failed": 0
	},
	"hits": {
		"total": {
			"value": 1,
			"relation": "eq"
		},
		"max_score": 110.28655,
		"hits": [{
			"_index": "blog",
			"_type": "_doc",
			"_id": "6a0d343fb629da2e2cdf6f4bf250af04",
			"_score": 110.28655,
			"_source": {
				"author": "程序员小明",
				"capture_time": 1583820020000,
				"content": "今晚可以终于可以王者荣耀带妹了",
				"title": "小明今晚真的不加班",
				"top_domain": "mynamecoder.com",
				"url": "http://blog.mynamecoder.com"
			}
		}]
	}
}

可以看到数据中有一条符合条件的文档,我们现在就要删除该文档。

删除title为"小明今晚真的不加班"的文档(忍痛):

curl -X POST "http://192.168.16.65:9211/blog/_delete_by_query" -H 'Content-Type: application/json' -d'
{
  "query":{
    "match":{
      "title":"小明今晚真的不加班"
    }
  }
}
'

tips: 使用_delete_by_query时,必须指定索引,此处blog就是索引,_delete_by_query是elasticsearch的删除指令

删除结果:

{
  "took" : 147,
  "timed_out": false,
  "deleted": 1,
  "batches": 1,
  "version_conflicts": 0,
  "noops": 0,
  "retries": {
    "bulk": 0,
    "search": 0
  },
  "throttled_millis": 0,
  "requests_per_second": -1.0,
  "throttled_until_millis": 0,
  "total": 119,
  "failures" : [ ]
}

重点关注total(查询到的条数)和deleted(删除的总数)两个字段,最后不放心的话,可以再查询一下刚才那个文档是否还存在。

tips:es执行删除的时候es并不是立即删除,虽然我们再次查询已经找不到了,但es自身是将该文档先标记准备删除状态,一段时间后,异步删除。

posted @   Coder小明  阅读(4637)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示