• 【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自身是将该文档先标记准备删除状态,一段时间后,异步删除。

  • 相关阅读:
    MyBatis简介
    JDBC报错:Cannot find class: com.mysql.jdbc.Driver
    进程,线程,协程
    mamp提示 more elements...
    获取html页面的参数
    php基础函数
    返回接口
    生成订单号
    xml转数组
    判断是否是微信浏览器
  • 原文地址:https://www.cnblogs.com/coderxx/p/12539949.html
Copyright © 2020-2023  润新知