Go Elasticsearch 删除快速入门
Posted 恋喵大鲤鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go Elasticsearch 删除快速入门相关的知识,希望对你有一定的参考价值。
本文借助第三方库 olivere/elastic 完成 Go 对 ES 的删除操作。
1.根据 ID 删除
可以根据文档 ID 删除对应的文档。
// Delete4ES 通过 ID 删除文档
func Delete4ES(ctx context.Context, index, id string) error
_, err := GetESClient().Delete().Index(index).Id(id).Refresh("wait_for").Do(ctx)
return err
注意:重复删除会报elastic: Error 404 (Not Found)
错。
对应 RESTful API 为:
DELETE /es_index_userinfo/_doc/1?refresh=true
2.根据条件删除文档
我们也可以根据条件来删除符合条件的文档,即 Delete by Query,即使没有符合条件的文档,也不会报 404 错误。
// DeleteByQuery4ES 根据条件删除文档
// param: index 索引; query 条件
// ret: 删除的文档数; error
func DeleteByQuery4ES(ctx context.Context, index string, query elastic.Query) (int64, error)
rsp, err := GetESClient().DeleteByQuery(index).Query(query).Refresh("true").Do(ctx)
if err != nil
return 0, err
return rsp.Deleted, nil
注意:Refresh 只能指定 true 或 false(缺省值),不能指定 wait_for。
比如我们删除昵称为 cat 且年龄小于等于18 的用户。
query := elastic.NewBoolQuery()
query.Filter(elastic.NewTermQuery("nickname", "cat"))
query.Filter(elastic.NewRangeQuery("age").Lte(18))
ret, err := DeleteByQuery4ES(context.Background(), index, query)
对应的 RESTful API 为:
POST /es_index_userinfo/_delete_by_query?refresh=true
"query":
"bool":
"filter":[
"term" : "nickname" : "cat",
"range" : "age" : "lte" : 18
]
3.批量删除
同样地,借助 BulkService + BulkDeleteRequest 可实现对文档的批量删除,具体使用可以参照增加文档的批量操作,这里不再赘述。
参考文献
以上是关于Go Elasticsearch 删除快速入门的主要内容,如果未能解决你的问题,请参考以下文章