@@ -44,6 +44,7 @@ import (
4444 "fmt"
4545 "infini.sh/framework/core/errors"
4646 "net/http"
47+ "net/url"
4748
4849 log "github.com/cihub/seelog"
4950 "github.com/segmentio/encoding/json"
@@ -324,6 +325,69 @@ func (c *ESAPIV7) Index(indexName, docType string, id interface{}, data interfac
324325 return esResp , nil
325326}
326327
328+ func (c * ESAPIV7 ) Create (indexName , docType string , id interface {}, data interface {}, refresh string ) (* elastic.InsertResponse , error ) {
329+
330+ if docType == "" {
331+ docType = TypeName7
332+ }
333+ indexName = util .UrlEncode (indexName )
334+
335+ u , _ := url .Parse (fmt .Sprintf ("%s/%s/%s" , c .GetEndpoint (), indexName , docType ))
336+
337+ if id != "" {
338+ u .Path = fmt .Sprintf ("%s/%s" , u .Path , id )
339+ q := u .Query ()
340+ q .Set ("op_type" , "create" )
341+ u .RawQuery = q .Encode ()
342+ }
343+
344+ if refresh != "" {
345+ q := u .Query ()
346+ q .Set ("refresh" , "true" )
347+ u .RawQuery = q .Encode ()
348+ }
349+
350+ url := u .String ()
351+
352+ var (
353+ js []byte
354+ err error
355+ )
356+ if dataBytes , ok := data .([]byte ); ok {
357+ js = dataBytes
358+ } else {
359+ js , err = json .Marshal (data )
360+ }
361+
362+ if global .Env ().IsDebug {
363+ log .Debug ("creating doc: " , url , "," , string (js ))
364+ }
365+
366+ if err != nil {
367+ return nil , err
368+ }
369+
370+ resp , err := c .Request (nil , util .Verb_POST , url , js )
371+ if err != nil {
372+ return nil , err
373+ }
374+
375+ if global .Env ().IsDebug {
376+ log .Trace ("creating response: " , string (resp .Body ))
377+ }
378+
379+ esResp := & elastic.InsertResponse {}
380+ err = json .Unmarshal (resp .Body , esResp )
381+ if err != nil {
382+ return & elastic.InsertResponse {}, err
383+ }
384+ if ! (esResp .Result == "created" ) {
385+ return nil , errors .New (string (resp .Body ))
386+ }
387+
388+ return esResp , nil
389+ }
390+
327391func (c * ESAPIV7 ) UpdateMapping (indexName string , docType string , mappings []byte ) ([]byte , error ) {
328392 indexName = util .UrlEncode (indexName )
329393
0 commit comments