Add support for the "Delete by Query" API
This commit adds support for ElasticSearch's Delete by Query API. Usage
is very similar to that of Search and Count requests:
    esquery.Delete().
        Index("index_1, "index_2").
        Query(esquery.Bool()...).
        Run(
            es,
            esapi.WithAnalyzeWildcard(true),
        )
			
			
This commit is contained in:
		
							parent
							
								
									b3b6dff2be
								
							
						
					
					
						commit
						7ab8621d76
					
				
							
								
								
									
										63
									
								
								delete.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								delete.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,63 @@
 | 
				
			|||||||
 | 
					package esquery
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
 | 
						"encoding/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/elastic/go-elasticsearch/v7"
 | 
				
			||||||
 | 
						"github.com/elastic/go-elasticsearch/v7/esapi"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// DeleteRequest represents a request to ElasticSearch's Delete By Query API,
 | 
				
			||||||
 | 
					// described in
 | 
				
			||||||
 | 
					// https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html
 | 
				
			||||||
 | 
					type DeleteRequest struct {
 | 
				
			||||||
 | 
						index []string
 | 
				
			||||||
 | 
						query Mappable
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Delete creates a new DeleteRequest object, to be filled via method chaining.
 | 
				
			||||||
 | 
					func Delete() *DeleteRequest {
 | 
				
			||||||
 | 
						return &DeleteRequest{}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Index sets the index names for the request
 | 
				
			||||||
 | 
					func (req *DeleteRequest) Index(index ...string) *DeleteRequest {
 | 
				
			||||||
 | 
						req.index = index
 | 
				
			||||||
 | 
						return req
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Query sets a query for the request.
 | 
				
			||||||
 | 
					func (req *DeleteRequest) Query(q Mappable) *DeleteRequest {
 | 
				
			||||||
 | 
						req.query = q
 | 
				
			||||||
 | 
						return req
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Run executes the request using the provided ElasticSearch client.
 | 
				
			||||||
 | 
					func (req *DeleteRequest) Run(
 | 
				
			||||||
 | 
						api *elasticsearch.Client,
 | 
				
			||||||
 | 
						o ...func(*esapi.DeleteByQueryRequest),
 | 
				
			||||||
 | 
					) (res *esapi.Response, err error) {
 | 
				
			||||||
 | 
						return req.RunDelete(api.DeleteByQuery, o...)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RunDelete is the same as the Run method, except that it accepts a value of
 | 
				
			||||||
 | 
					// type esapi.DeleteByQuery (usually this is the DeleteByQuery field of an
 | 
				
			||||||
 | 
					// elasticsearch.Client object). Since the ElasticSearch client does not provide
 | 
				
			||||||
 | 
					// an interface type for its API (which would allow implementation of mock
 | 
				
			||||||
 | 
					// clients), this provides a workaround. The Delete function in the ES client is
 | 
				
			||||||
 | 
					// actually a field of a function type.
 | 
				
			||||||
 | 
					func (req *DeleteRequest) RunDelete(
 | 
				
			||||||
 | 
						del esapi.DeleteByQuery,
 | 
				
			||||||
 | 
						o ...func(*esapi.DeleteByQueryRequest),
 | 
				
			||||||
 | 
					) (res *esapi.Response, err error) {
 | 
				
			||||||
 | 
						var b bytes.Buffer
 | 
				
			||||||
 | 
						err = json.NewEncoder(&b).Encode(map[string]interface{}{
 | 
				
			||||||
 | 
							"query": req.query.Map(),
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return del(req.index, &b, o...)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user