ES问题记录--清空文档数据

项目上使用ES作为辅存储,主要是因为订单中心数据量大,数据库使用了分库分表策略,ES主要的作用就是捞取分库建。但是开发测试经常为了验证会手动修改数据库,却不将修改后的数据推送至ES,导致数据经常不一致,很多看起来是bug的到头来是数据一致性导致的,浪费了很多时间,于是就搞了项目专门来推送ES。因为有脏数据存在,一般先清空数据,再全量推送,但是ES的操作用的是jest,找了半天只有根据id删除的,没有批量删除或者保留索引清空文档数据的,最后直接使用http请求发送命令,因为ES采用了Rest风格API。
下面是在KIbana上清空文档数据的命令。

POST index/type/_delete_by_query
{  
  "query": {
    "match_all": {}
  }
}

用Postman请求只需要将IP和port加上,请求体加上JSON格式的命令即可。

http://IP:port/index/type/_delete_by_query

ES问题记录--清空文档数据_第1张图片
就在我以为soeasy的时候,响应401,没认证,因为设置了账号密码。

{
    "error": {
        "root_cause": [
            {
                "type": "security_exception",
                "reason": "missing authentication token for REST request [/dev_sg_b_phy_out_result/sg_b_phy_out_result/_delete_by_query]",
                "header": {
                    "WWW-Authenticate": "Basic realm=\"security\" charset=\"UTF-8\""
                }
            }
        ],
        "type": "security_exception",
        "reason": "missing authentication token for REST request [/dev_sg_b_phy_out_result/sg_b_phy_out_result/_delete_by_query]",
        "header": {
            "WWW-Authenticate": "Basic realm=\"security\" charset=\"UTF-8\""
        }
    },
    "status": 401
}

问题知道了,加在哪里?最后在ES的社区找到了答案,账号密码直接加在url中,格式如下,@符号不能丢。

http://username:password@IP:port/index/type/_delete_by_query

再次请求ok。

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

移植到Java代码比较简单,就不做赘述了。

你可能感兴趣的:(ES)