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

it2022-07-05  126

项目上使用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

就在我以为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代码比较简单,就不做赘述了。


最新回复(0)