@@ -171,10 +171,13 @@ func (b *Bulk) AddActions(
171171var (
172172 indexPrefix = []byte (`{"index":{"_index":"` )
173173 deletePrefix = []byte (`{"delete":{"_index":"` )
174+ updatePrefix = []byte (`{"update":{"_index":"` )
175+ scriptPrefix = []byte (`{"script":` )
174176 idPrefix = []byte (`","_id":"` )
175177 typePrefix = []byte (`","_type":"` )
176178 routingPrefix = []byte (`","routing":"` )
177179 postFix = []byte (`"}}` )
180+ scriptPostfix = []byte (`,"scripted_upsert":true}` )
178181)
179182
180183var metaPool = sync.Pool {
@@ -200,11 +203,15 @@ func isTypeSupported(version string) bool {
200203func getEsActionJSON (docID []byte , action elasticsearch2.ActionType , indexName string , routing * string , source []byte , typeName []byte , esVersion string ) []byte {
201204 meta := metaPool .Get ().([]byte )[:0 ]
202205
203- if action == elasticsearch2 .Index {
206+ switch action {
207+ case elasticsearch2 .Index :
204208 meta = append (meta , indexPrefix ... )
205- } else {
209+ case elasticsearch2 . Delete :
206210 meta = append (meta , deletePrefix ... )
211+ case elasticsearch2 .ScriptUpdate :
212+ meta = append (meta , updatePrefix ... )
207213 }
214+
208215 meta = append (meta , []byte (indexName )... )
209216 meta = append (meta , idPrefix ... )
210217 meta = append (meta , bytes .EscapePredefinedBytes (docID )... )
@@ -217,9 +224,16 @@ func getEsActionJSON(docID []byte, action elasticsearch2.ActionType, indexName s
217224 meta = append (meta , typeName ... )
218225 }
219226 meta = append (meta , postFix ... )
220- if action == elasticsearch2 .Index {
227+
228+ switch action {
229+ case elasticsearch2 .Index :
230+ meta = append (meta , '\n' )
231+ meta = append (meta , source ... )
232+ case elasticsearch2 .ScriptUpdate :
221233 meta = append (meta , '\n' )
234+ meta = append (meta , scriptPrefix ... )
222235 meta = append (meta , source ... )
236+ meta = append (meta , scriptPostfix ... )
223237 }
224238 meta = append (meta , '\n' )
225239 return meta
0 commit comments