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 删除快速入门的主要内容,如果未能解决你的问题,请参考以下文章

Go Elasticsearch CRUD 快速入门

Go Elasticsearch CRUD 快速入门

Go Elasticsearch 更新快速入门

Go Elasticsearch 更新快速入门

Go Elasticsearch 查询快速入门

Go Elasticsearch 查询快速入门