mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	* update github.com/blevesearch/bleve v2.0.2 -> v2.0.3 * github.com/denisenkom/go-mssqldb v0.9.0 -> v0.10.0 * github.com/editorconfig/editorconfig-core-go v2.4.1 -> v2.4.2 * github.com/go-chi/cors v1.1.1 -> v1.2.0 * github.com/go-git/go-billy v5.0.0 -> v5.1.0 * github.com/go-git/go-git v5.2.0 -> v5.3.0 * github.com/go-ldap/ldap v3.2.4 -> v3.3.0 * github.com/go-redis/redis v8.6.0 -> v8.8.2 * github.com/go-sql-driver/mysql v1.5.0 -> v1.6.0 * github.com/go-swagger/go-swagger v0.26.1 -> v0.27.0 * github.com/lib/pq v1.9.0 -> v1.10.1 * github.com/mattn/go-sqlite3 v1.14.6 -> v1.14.7 * github.com/go-testfixtures/testfixtures v3.5.0 -> v3.6.0 * github.com/issue9/identicon v1.0.1 -> v1.2.0 * github.com/klauspost/compress v1.11.8 -> v1.12.1 * github.com/mgechev/revive v1.0.3 -> v1.0.6 * github.com/microcosm-cc/bluemonday v1.0.7 -> v1.0.8 * github.com/niklasfasching/go-org v1.4.0 -> v1.5.0 * github.com/olivere/elastic v7.0.22 -> v7.0.24 * github.com/pelletier/go-toml v1.8.1 -> v1.9.0 * github.com/prometheus/client_golang v1.9.0 -> v1.10.0 * github.com/xanzy/go-gitlab v0.44.0 -> v0.48.0 * github.com/yuin/goldmark v1.3.3 -> v1.3.5 * github.com/6543/go-version v1.2.4 -> v1.3.1 * do github.com/lib/pq v1.10.0 -> v1.10.1 again ...
		
			
				
	
	
		
			261 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			261 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Go
		
	
	
	
		
			Vendored
		
	
	
	
| // Copyright 2012-present Oliver Eilhard. All rights reserved.
 | |
| // Use of this source code is governed by a MIT-license.
 | |
| // See http://olivere.mit-license.org/license.txt for details.
 | |
| 
 | |
| package elastic
 | |
| 
 | |
| //go:generate easyjson bulk_index_request.go
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"fmt"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| // BulkIndexRequest is a request to add or replace a document to Elasticsearch.
 | |
| //
 | |
| // See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-bulk.html
 | |
| // for details.
 | |
| type BulkIndexRequest struct {
 | |
| 	BulkableRequest
 | |
| 	index           string
 | |
| 	typ             string
 | |
| 	id              string
 | |
| 	opType          string
 | |
| 	routing         string
 | |
| 	parent          string
 | |
| 	version         *int64 // default is MATCH_ANY
 | |
| 	versionType     string // default is "internal"
 | |
| 	doc             interface{}
 | |
| 	pipeline        string
 | |
| 	retryOnConflict *int
 | |
| 	ifSeqNo         *int64
 | |
| 	ifPrimaryTerm   *int64
 | |
| 
 | |
| 	source []string
 | |
| 
 | |
| 	useEasyJSON bool
 | |
| }
 | |
| 
 | |
| //easyjson:json
 | |
| type bulkIndexRequestCommand map[string]bulkIndexRequestCommandOp
 | |
| 
 | |
| //easyjson:json
 | |
| type bulkIndexRequestCommandOp struct {
 | |
| 	Index  string `json:"_index,omitempty"`
 | |
| 	Id     string `json:"_id,omitempty"`
 | |
| 	Type   string `json:"_type,omitempty"`
 | |
| 	Parent string `json:"parent,omitempty"`
 | |
| 	// RetryOnConflict is "_retry_on_conflict" for 6.0 and "retry_on_conflict" for 6.1+.
 | |
| 	RetryOnConflict *int   `json:"retry_on_conflict,omitempty"`
 | |
| 	Routing         string `json:"routing,omitempty"`
 | |
| 	Version         *int64 `json:"version,omitempty"`
 | |
| 	VersionType     string `json:"version_type,omitempty"`
 | |
| 	Pipeline        string `json:"pipeline,omitempty"`
 | |
| 	IfSeqNo         *int64 `json:"if_seq_no,omitempty"`
 | |
| 	IfPrimaryTerm   *int64 `json:"if_primary_term,omitempty"`
 | |
| }
 | |
| 
 | |
| // NewBulkIndexRequest returns a new BulkIndexRequest.
 | |
| // The operation type is "index" by default.
 | |
| func NewBulkIndexRequest() *BulkIndexRequest {
 | |
| 	return &BulkIndexRequest{
 | |
| 		opType: "index",
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // UseEasyJSON is an experimental setting that enables serialization
 | |
| // with github.com/mailru/easyjson, which should in faster serialization
 | |
| // time and less allocations, but removed compatibility with encoding/json,
 | |
| // usage of unsafe etc. See https://github.com/mailru/easyjson#issues-notes-and-limitations
 | |
| // for details. This setting is disabled by default.
 | |
| func (r *BulkIndexRequest) UseEasyJSON(enable bool) *BulkIndexRequest {
 | |
| 	r.useEasyJSON = enable
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // Index specifies the Elasticsearch index to use for this index request.
 | |
| // If unspecified, the index set on the BulkService will be used.
 | |
| func (r *BulkIndexRequest) Index(index string) *BulkIndexRequest {
 | |
| 	r.index = index
 | |
| 	r.source = nil
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // Type specifies the Elasticsearch type to use for this index request.
 | |
| // If unspecified, the type set on the BulkService will be used.
 | |
| func (r *BulkIndexRequest) Type(typ string) *BulkIndexRequest {
 | |
| 	r.typ = typ
 | |
| 	r.source = nil
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // Id specifies the identifier of the document to index.
 | |
| func (r *BulkIndexRequest) Id(id string) *BulkIndexRequest {
 | |
| 	r.id = id
 | |
| 	r.source = nil
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // OpType specifies if this request should follow create-only or upsert
 | |
| // behavior. This follows the OpType of the standard document index API.
 | |
| // See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-index_.html#operation-type
 | |
| // for details.
 | |
| func (r *BulkIndexRequest) OpType(opType string) *BulkIndexRequest {
 | |
| 	r.opType = opType
 | |
| 	r.source = nil
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // Routing specifies a routing value for the request.
 | |
| func (r *BulkIndexRequest) Routing(routing string) *BulkIndexRequest {
 | |
| 	r.routing = routing
 | |
| 	r.source = nil
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // Parent specifies the identifier of the parent document (if available).
 | |
| func (r *BulkIndexRequest) Parent(parent string) *BulkIndexRequest {
 | |
| 	r.parent = parent
 | |
| 	r.source = nil
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // Version indicates the version of the document as part of an optimistic
 | |
| // concurrency model.
 | |
| func (r *BulkIndexRequest) Version(version int64) *BulkIndexRequest {
 | |
| 	v := version
 | |
| 	r.version = &v
 | |
| 	r.source = nil
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // VersionType specifies how versions are created. It can be e.g. internal,
 | |
| // external, external_gte, or force.
 | |
| //
 | |
| // See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-index_.html#index-versioning
 | |
| // for details.
 | |
| func (r *BulkIndexRequest) VersionType(versionType string) *BulkIndexRequest {
 | |
| 	r.versionType = versionType
 | |
| 	r.source = nil
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // Doc specifies the document to index.
 | |
| func (r *BulkIndexRequest) Doc(doc interface{}) *BulkIndexRequest {
 | |
| 	r.doc = doc
 | |
| 	r.source = nil
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // RetryOnConflict specifies how often to retry in case of a version conflict.
 | |
| func (r *BulkIndexRequest) RetryOnConflict(retryOnConflict int) *BulkIndexRequest {
 | |
| 	r.retryOnConflict = &retryOnConflict
 | |
| 	r.source = nil
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // Pipeline to use while processing the request.
 | |
| func (r *BulkIndexRequest) Pipeline(pipeline string) *BulkIndexRequest {
 | |
| 	r.pipeline = pipeline
 | |
| 	r.source = nil
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // IfSeqNo indicates to only perform the index operation if the last
 | |
| // operation that has changed the document has the specified sequence number.
 | |
| func (r *BulkIndexRequest) IfSeqNo(ifSeqNo int64) *BulkIndexRequest {
 | |
| 	r.ifSeqNo = &ifSeqNo
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // IfPrimaryTerm indicates to only perform the index operation if the
 | |
| // last operation that has changed the document has the specified primary term.
 | |
| func (r *BulkIndexRequest) IfPrimaryTerm(ifPrimaryTerm int64) *BulkIndexRequest {
 | |
| 	r.ifPrimaryTerm = &ifPrimaryTerm
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // String returns the on-wire representation of the index request,
 | |
| // concatenated as a single string.
 | |
| func (r *BulkIndexRequest) String() string {
 | |
| 	lines, err := r.Source()
 | |
| 	if err != nil {
 | |
| 		return fmt.Sprintf("error: %v", err)
 | |
| 	}
 | |
| 	return strings.Join(lines, "\n")
 | |
| }
 | |
| 
 | |
| // Source returns the on-wire representation of the index request,
 | |
| // split into an action-and-meta-data line and an (optional) source line.
 | |
| // See https://www.elastic.co/guide/en/elasticsearch/reference/7.0/docs-bulk.html
 | |
| // for details.
 | |
| func (r *BulkIndexRequest) Source() ([]string, error) {
 | |
| 	// { "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }
 | |
| 	// { "field1" : "value1" }
 | |
| 
 | |
| 	if r.source != nil {
 | |
| 		return r.source, nil
 | |
| 	}
 | |
| 
 | |
| 	lines := make([]string, 2)
 | |
| 
 | |
| 	// "index" ...
 | |
| 	indexCommand := bulkIndexRequestCommandOp{
 | |
| 		Index:           r.index,
 | |
| 		Type:            r.typ,
 | |
| 		Id:              r.id,
 | |
| 		Routing:         r.routing,
 | |
| 		Parent:          r.parent,
 | |
| 		Version:         r.version,
 | |
| 		VersionType:     r.versionType,
 | |
| 		RetryOnConflict: r.retryOnConflict,
 | |
| 		Pipeline:        r.pipeline,
 | |
| 		IfSeqNo:         r.ifSeqNo,
 | |
| 		IfPrimaryTerm:   r.ifPrimaryTerm,
 | |
| 	}
 | |
| 	command := bulkIndexRequestCommand{
 | |
| 		r.opType: indexCommand,
 | |
| 	}
 | |
| 
 | |
| 	var err error
 | |
| 	var body []byte
 | |
| 	if r.useEasyJSON {
 | |
| 		// easyjson
 | |
| 		body, err = command.MarshalJSON()
 | |
| 	} else {
 | |
| 		// encoding/json
 | |
| 		body, err = json.Marshal(command)
 | |
| 	}
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	lines[0] = string(body)
 | |
| 
 | |
| 	// "field1" ...
 | |
| 	if r.doc != nil {
 | |
| 		switch t := r.doc.(type) {
 | |
| 		default:
 | |
| 			body, err := json.Marshal(r.doc)
 | |
| 			if err != nil {
 | |
| 				return nil, err
 | |
| 			}
 | |
| 			lines[1] = string(body)
 | |
| 		case json.RawMessage:
 | |
| 			lines[1] = string(t)
 | |
| 		case *json.RawMessage:
 | |
| 			lines[1] = string(*t)
 | |
| 		case string:
 | |
| 			lines[1] = t
 | |
| 		case *string:
 | |
| 			lines[1] = *t
 | |
| 		}
 | |
| 	} else {
 | |
| 		lines[1] = "{}"
 | |
| 	}
 | |
| 
 | |
| 	r.source = lines
 | |
| 	return lines, nil
 | |
| }
 |