1 Star 1 Fork 0

宇宙蒙面侠X/github.com-olivere-elastic

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
index.go 4.39 KB
一键复制 编辑 原始数据 按行查看 历史
// Copyright 2012-2015 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
import (
"encoding/json"
"fmt"
"net/url"
"gopkg.in/olivere/elastic.v2/uritemplates"
)
// IndexResult is the result of indexing a document in Elasticsearch.
type IndexResult struct {
Index string `json:"_index"`
Type string `json:"_type"`
Id string `json:"_id"`
Version int `json:"_version"`
Created bool `json:"created"`
}
// IndexService adds documents to Elasticsearch.
type IndexService struct {
client *Client
index string
_type string
id string
routing string
parent string
opType string
refresh *bool
version *int64
versionType string
timestamp string
ttl string
timeout string
bodyString string
bodyJson interface{}
pretty bool
}
func NewIndexService(client *Client) *IndexService {
builder := &IndexService{
client: client,
}
return builder
}
func (b *IndexService) Index(name string) *IndexService {
b.index = name
return b
}
func (b *IndexService) Type(_type string) *IndexService {
b._type = _type
return b
}
func (b *IndexService) Id(id string) *IndexService {
b.id = id
return b
}
func (b *IndexService) Routing(routing string) *IndexService {
b.routing = routing
return b
}
func (b *IndexService) Parent(parent string) *IndexService {
b.parent = parent
return b
}
// OpType is either "create" or "index" (the default).
func (b *IndexService) OpType(opType string) *IndexService {
b.opType = opType
return b
}
func (b *IndexService) Refresh(refresh bool) *IndexService {
b.refresh = &refresh
return b
}
func (b *IndexService) Version(version int64) *IndexService {
b.version = &version
return b
}
// VersionType is either "internal" (default), "external",
// "external_gt", "external_gte", or "force".
// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-index_.html#_version_types
// for details.
func (b *IndexService) VersionType(versionType string) *IndexService {
b.versionType = versionType
return b
}
func (b *IndexService) Timestamp(timestamp string) *IndexService {
b.timestamp = timestamp
return b
}
func (b *IndexService) TTL(ttl string) *IndexService {
b.ttl = ttl
return b
}
func (b *IndexService) Timeout(timeout string) *IndexService {
b.timeout = timeout
return b
}
func (b *IndexService) BodyString(body string) *IndexService {
b.bodyString = body
return b
}
func (b *IndexService) BodyJson(json interface{}) *IndexService {
b.bodyJson = json
return b
}
func (b *IndexService) Pretty(pretty bool) *IndexService {
b.pretty = pretty
return b
}
func (b *IndexService) Do() (*IndexResult, error) {
// Build url
var path, method string
if b.id != "" {
// Create document with manual id
method = "PUT"
path = "/{index}/{type}/{id}"
} else {
// Automatic ID generation
// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-index_.html#index-creation
method = "POST"
path = "/{index}/{type}/"
}
path, err := uritemplates.Expand(path, map[string]string{
"index": b.index,
"type": b._type,
"id": b.id,
})
if err != nil {
return nil, err
}
// Parameters
params := make(url.Values)
if b.pretty {
params.Set("pretty", "true")
}
if b.routing != "" {
params.Set("routing", b.routing)
}
if b.parent != "" {
params.Set("parent", b.parent)
}
if b.opType != "" {
params.Set("op_type", b.opType)
}
if b.refresh != nil && *b.refresh {
params.Set("refresh", "true")
}
if b.version != nil {
params.Set("version", fmt.Sprintf("%d", *b.version))
}
if b.versionType != "" {
params.Set("version_type", b.versionType)
}
if b.timestamp != "" {
params.Set("timestamp", b.timestamp)
}
if b.ttl != "" {
params.Set("ttl", b.ttl)
}
if b.timeout != "" {
params.Set("timeout", b.timeout)
}
/*
routing string
parent string
opType string
refresh *bool
version *int64
versionType string
timestamp string
ttl string
*/
// Body
var body interface{}
if b.bodyJson != nil {
body = b.bodyJson
} else {
body = b.bodyString
}
// Get response
res, err := b.client.PerformRequest(method, path, params, body)
if err != nil {
return nil, err
}
// Return result
ret := new(IndexResult)
if err := json.Unmarshal(res.Body, ret); err != nil {
return nil, err
}
return ret, nil
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/awol2010ex/github.com-olivere-elastic.git
git@gitee.com:awol2010ex/github.com-olivere-elastic.git
awol2010ex
github.com-olivere-elastic
github.com-olivere-elastic
v2.0.35

搜索帮助