1// Copyright 2012-2015 Oliver Eilhard. All rights reserved. 2// Use of this source code is governed by a MIT-license. 3// See http://olivere.mit-license.org/license.txt for details. 4 5package elastic 6 7import ( 8 "encoding/json" 9 "fmt" 10 "strings" 11) 12 13// -- Bulk delete request -- 14 15// Bulk request to remove document from Elasticsearch. 16type BulkDeleteRequest struct { 17 BulkableRequest 18 index string 19 typ string 20 id string 21 routing string 22 refresh *bool 23 version int64 // default is MATCH_ANY 24 versionType string // default is "internal" 25} 26 27func NewBulkDeleteRequest() *BulkDeleteRequest { 28 return &BulkDeleteRequest{} 29} 30 31func (r *BulkDeleteRequest) Index(index string) *BulkDeleteRequest { 32 r.index = index 33 return r 34} 35 36func (r *BulkDeleteRequest) Type(typ string) *BulkDeleteRequest { 37 r.typ = typ 38 return r 39} 40 41func (r *BulkDeleteRequest) Id(id string) *BulkDeleteRequest { 42 r.id = id 43 return r 44} 45 46func (r *BulkDeleteRequest) Routing(routing string) *BulkDeleteRequest { 47 r.routing = routing 48 return r 49} 50 51func (r *BulkDeleteRequest) Refresh(refresh bool) *BulkDeleteRequest { 52 r.refresh = &refresh 53 return r 54} 55 56func (r *BulkDeleteRequest) Version(version int64) *BulkDeleteRequest { 57 r.version = version 58 return r 59} 60 61// VersionType can be "internal" (default), "external", "external_gte", 62// "external_gt", or "force". 63func (r *BulkDeleteRequest) VersionType(versionType string) *BulkDeleteRequest { 64 r.versionType = versionType 65 return r 66} 67 68func (r *BulkDeleteRequest) String() string { 69 lines, err := r.Source() 70 if err == nil { 71 return strings.Join(lines, "\n") 72 } 73 return fmt.Sprintf("error: %v", err) 74} 75 76func (r *BulkDeleteRequest) Source() ([]string, error) { 77 lines := make([]string, 1) 78 79 source := make(map[string]interface{}) 80 deleteCommand := make(map[string]interface{}) 81 if r.index != "" { 82 deleteCommand["_index"] = r.index 83 } 84 if r.typ != "" { 85 deleteCommand["_type"] = r.typ 86 } 87 if r.id != "" { 88 deleteCommand["_id"] = r.id 89 } 90 if r.routing != "" { 91 deleteCommand["_routing"] = r.routing 92 } 93 if r.version > 0 { 94 deleteCommand["_version"] = r.version 95 } 96 if r.versionType != "" { 97 deleteCommand["_version_type"] = r.versionType 98 } 99 if r.refresh != nil { 100 deleteCommand["refresh"] = *r.refresh 101 } 102 source["delete"] = deleteCommand 103 104 body, err := json.Marshal(source) 105 if err != nil { 106 return nil, err 107 } 108 109 lines[0] = string(body) 110 111 return lines, nil 112} 113