@@ -12,7 +12,7 @@ import (
12
12
13
13
// BulkUpdateRequest is a request to update a document in Elasticsearch.
14
14
//
15
- // See https://www.elastic.co/guide/en/elasticsearch/reference/5.0 /docs-bulk.html
15
+ // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2 /docs-bulk.html
16
16
// for details.
17
17
type BulkUpdateRequest struct {
18
18
BulkableRequest
@@ -23,6 +23,7 @@ type BulkUpdateRequest struct {
23
23
routing string
24
24
parent string
25
25
script * Script
26
+ scriptedUpsert * bool
26
27
version int64 // default is MATCH_ANY
27
28
versionType string // default is "internal"
28
29
retryOnConflict * int
@@ -77,15 +78,25 @@ func (r *BulkUpdateRequest) Parent(parent string) *BulkUpdateRequest {
77
78
}
78
79
79
80
// Script specifies an update script.
80
- // See https://www.elastic.co/guide/en/elasticsearch/reference/2.x /docs-bulk.html#bulk-update
81
- // and https://www.elastic.co/guide/en/elasticsearch/reference/2.x /modules-scripting.html
81
+ // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2 /docs-bulk.html#bulk-update
82
+ // and https://www.elastic.co/guide/en/elasticsearch/reference/5.2 /modules-scripting.html
82
83
// for details.
83
84
func (r * BulkUpdateRequest ) Script (script * Script ) * BulkUpdateRequest {
84
85
r .script = script
85
86
r .source = nil
86
87
return r
87
88
}
88
89
90
+ // ScripedUpsert specifies if your script will run regardless of
91
+ // whether the document exists or not.
92
+ //
93
+ // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-update.html#_literal_scripted_upsert_literal
94
+ func (r * BulkUpdateRequest ) ScriptedUpsert (upsert bool ) * BulkUpdateRequest {
95
+ r .scriptedUpsert = & upsert
96
+ r .source = nil
97
+ return r
98
+ }
99
+
89
100
// RetryOnConflict specifies how often to retry in case of a version conflict.
90
101
func (r * BulkUpdateRequest ) RetryOnConflict (retryOnConflict int ) * BulkUpdateRequest {
91
102
r .retryOnConflict = & retryOnConflict
@@ -119,7 +130,7 @@ func (r *BulkUpdateRequest) Doc(doc interface{}) *BulkUpdateRequest {
119
130
// DocAsUpsert indicates whether the contents of Doc should be used as
120
131
// the Upsert value.
121
132
//
122
- // See https://www.elastic.co/guide/en/elasticsearch/reference/2.x /docs-update.html#_literal_doc_as_upsert_literal
133
+ // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2 /docs-update.html#_literal_doc_as_upsert_literal
123
134
// for details.
124
135
func (r * BulkUpdateRequest ) DocAsUpsert (docAsUpsert bool ) * BulkUpdateRequest {
125
136
r .docAsUpsert = & docAsUpsert
@@ -175,7 +186,7 @@ func (r *BulkUpdateRequest) getSourceAsString(data interface{}) (string, error)
175
186
176
187
// Source returns the on-wire representation of the update request,
177
188
// split into an action-and-meta-data line and an (optional) source line.
178
- // See https://www.elastic.co/guide/en/elasticsearch/reference/current /docs-bulk.html
189
+ // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2 /docs-bulk.html
179
190
// for details.
180
191
func (r BulkUpdateRequest ) Source () ([]string , error ) {
181
192
// { "update" : { "_index" : "test", "_type" : "type1", "_id" : "1", ... } }
@@ -235,6 +246,9 @@ func (r BulkUpdateRequest) Source() ([]string, error) {
235
246
if r .upsert != nil {
236
247
source ["upsert" ] = r .upsert
237
248
}
249
+ if r .scriptedUpsert != nil {
250
+ source ["scripted_upsert" ] = * r .scriptedUpsert
251
+ }
238
252
if r .doc != nil {
239
253
// {"doc":{...}}
240
254
source ["doc" ] = r .doc
0 commit comments