// buildURL builds the URL for the operation. func (s *ClusterStatsService) buildURL() (string, url.Values, error) { // Build URL var err error var path string if len(s.nodeId) > 0 { path, err = uritemplates.Expand("/_cluster/stats/nodes/{node_id}", map[string]string{ "node_id": strings.Join(s.nodeId, ","), }) if err != nil { return "", url.Values{}, err } } else { path, err = uritemplates.Expand("/_cluster/stats", map[string]string{}) if err != nil { return "", url.Values{}, err } } // Add query string parameters params := url.Values{} if s.pretty { params.Set("pretty", "1") } if s.flatSettings != nil { params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) } if s.human != nil { params.Set("human", fmt.Sprintf("%v", *s.human)) } return path, params, nil }
// buildURL builds the URL for the operation. func (s *IndicesStatsService) buildURL() (string, url.Values, error) { var err error var path string if len(s.index) > 0 && len(s.metric) > 0 { path, err = uritemplates.Expand("/{index}/_stats/{metric}", map[string]string{ "index": strings.Join(s.index, ","), "metric": strings.Join(s.metric, ","), }) } else if len(s.index) > 0 { path, err = uritemplates.Expand("/{index}/_stats", map[string]string{ "index": strings.Join(s.index, ","), }) } else if len(s.metric) > 0 { path, err = uritemplates.Expand("/_stats/{metric}", map[string]string{ "metric": strings.Join(s.metric, ","), }) } else { path = "/_stats" } if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.pretty { params.Set("pretty", "1") } if len(s.groups) > 0 { params.Set("groups", strings.Join(s.groups, ",")) } if s.human != nil { params.Set("human", fmt.Sprintf("%v", *s.human)) } if s.level != "" { params.Set("level", s.level) } if len(s.types) > 0 { params.Set("types", strings.Join(s.types, ",")) } if len(s.completionFields) > 0 { params.Set("completion_fields", strings.Join(s.completionFields, ",")) } if len(s.fielddataFields) > 0 { params.Set("fielddata_fields", strings.Join(s.fielddataFields, ",")) } if len(s.fields) > 0 { params.Set("fields", strings.Join(s.fields, ",")) } return path, params, nil }
// buildURL builds the URL for the operation. func (s *IndicesGetSettingsService) buildURL() (string, url.Values, error) { var err error var path string var index []string if len(s.index) > 0 { index = s.index } else { index = []string{"_all"} } if len(s.name) > 0 { // Build URL path, err = uritemplates.Expand("/{index}/_settings/{name}", map[string]string{ "index": strings.Join(index, ","), "name": strings.Join(s.name, ","), }) } else { // Build URL path, err = uritemplates.Expand("/{index}/_settings", map[string]string{ "index": strings.Join(index, ","), }) } if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.pretty { params.Set("pretty", "1") } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) } if s.expandWildcards != "" { params.Set("expand_wildcards", s.expandWildcards) } if s.flatSettings != nil { params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) } if s.local != nil { params.Set("local", fmt.Sprintf("%v", *s.local)) } return path, params, nil }
// buildURL builds the URL for the operation. func (s *IndicesPutTemplateService) buildURL() (string, url.Values, error) { // Build URL path, err := uritemplates.Expand("/_template/{name}", map[string]string{ "name": s.name, }) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.pretty { params.Set("pretty", "1") } if s.order != nil { params.Set("order", fmt.Sprintf("%v", s.order)) } if s.create != nil { params.Set("create", fmt.Sprintf("%v", *s.create)) } if s.timeout != "" { params.Set("timeout", s.timeout) } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) } if s.flatSettings != nil { params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) } return path, params, nil }
// buildURL builds the URL for the operation. func (s *ClearScrollService) buildURL() (string, url.Values, error) { path, err := uritemplates.Expand("/_search/scroll", map[string]string{}) if err != nil { return "", url.Values{}, err } return path, url.Values{}, nil }
// buildURL builds the URL for the operation. func (s *ExistsService) buildURL() (string, url.Values, error) { // Build URL path, err := uritemplates.Expand("/{index}/{type}/{id}", map[string]string{ "id": s.id, "index": s.index, "type": s.typ, }) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.pretty { params.Set("pretty", "1") } if s.parent != "" { params.Set("parent", s.parent) } if s.preference != "" { params.Set("preference", s.preference) } if s.realtime != nil { params.Set("realtime", fmt.Sprintf("%v", *s.realtime)) } if s.refresh != nil { params.Set("refresh", fmt.Sprintf("%v", *s.refresh)) } if s.routing != "" { params.Set("routing", s.routing) } return path, params, nil }
// buildURL builds the URL for the operation. func (s *IndicesExistsTypeService) buildURL() (string, url.Values, error) { if err := s.Validate(); err != nil { return "", url.Values{}, err } // Build URL path, err := uritemplates.Expand("/{index}/{type}", map[string]string{ "type": strings.Join(s.typ, ","), "index": strings.Join(s.index, ","), }) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.pretty { params.Set("pretty", "1") } if s.expandWildcards != "" { params.Set("expand_wildcards", s.expandWildcards) } if s.local != nil { params.Set("local", fmt.Sprintf("%v", *s.local)) } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) } return path, params, nil }
// buildURL builds the URL for the operation. func (s *IndicesGetTemplateService) buildURL() (string, url.Values, error) { // Build URL var err error var path string if len(s.name) > 0 { path, err = uritemplates.Expand("/_template/{name}", map[string]string{ "name": strings.Join(s.name, ","), }) } else { path = "/_template" } if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.pretty { params.Set("pretty", "1") } if s.flatSettings != nil { params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) } if s.local != nil { params.Set("local", fmt.Sprintf("%v", *s.local)) } return path, params, nil }
// buildURL builds the URL for the operation. func (s *CloseIndexService) buildURL() (string, url.Values, error) { // Build URL path, err := uritemplates.Expand("/{index}/_close", map[string]string{ "index": s.index, }) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) } if s.expandWildcards != "" { params.Set("expand_wildcards", s.expandWildcards) } if s.timeout != "" { params.Set("timeout", s.timeout) } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) } return path, params, nil }
// buildURL builds the URL for the operation. func (s *ClusterStateService) buildURL() (string, url.Values, error) { // Build URL metrics := strings.Join(s.metrics, ",") if metrics == "" { metrics = "_all" } indices := strings.Join(s.indices, ",") if indices == "" { indices = "_all" } path, err := uritemplates.Expand("/_cluster/state/{metrics}/{indices}", map[string]string{ "metrics": metrics, "indices": indices, }) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) } if s.flatSettings != nil { params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) } if s.local != nil { params.Set("local", fmt.Sprintf("%v", *s.local)) } return path, params, nil }
// buildURL builds the URL for the operation. func (s *PutMappingService) buildURL() (string, url.Values, error) { var err error var path string // Build URL: Typ MUST be specified and is verified in Validate. if len(s.index) > 0 { path, err = uritemplates.Expand("/{index}/_mapping/{type}", map[string]string{ "index": strings.Join(s.index, ","), "type": s.typ, }) } else { path, err = uritemplates.Expand("/_mapping/{type}", map[string]string{ "type": s.typ, }) } if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.pretty { params.Set("pretty", "1") } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) } if s.expandWildcards != "" { params.Set("expand_wildcards", s.expandWildcards) } if s.ignoreConflicts != nil { params.Set("ignore_conflicts", fmt.Sprintf("%v", *s.ignoreConflicts)) } if s.timeout != "" { params.Set("timeout", s.timeout) } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) } return path, params, nil }
func (s *OptimizeService) Do() (*OptimizeResult, error) { // Build url path := "/" // Indices part indexPart := make([]string, 0) for _, index := range s.indices { index, err := uritemplates.Expand("{index}", map[string]string{ "index": index, }) if err != nil { return nil, err } indexPart = append(indexPart, index) } if len(indexPart) > 0 { path += strings.Join(indexPart, ",") } path += "/_optimize" // Parameters params := make(url.Values) if s.maxNumSegments != nil { params.Set("max_num_segments", fmt.Sprintf("%d", *s.maxNumSegments)) } if s.onlyExpungeDeletes != nil { params.Set("only_expunge_deletes", fmt.Sprintf("%v", *s.onlyExpungeDeletes)) } if s.flush != nil { params.Set("flush", fmt.Sprintf("%v", *s.flush)) } if s.waitForMerge != nil { params.Set("wait_for_merge", fmt.Sprintf("%v", *s.waitForMerge)) } if s.force != nil { params.Set("force", fmt.Sprintf("%v", *s.force)) } if s.pretty { params.Set("pretty", fmt.Sprintf("%v", s.pretty)) } // Get response res, err := s.client.PerformRequest("POST", path, params, nil) if err != nil { return nil, err } // Return result ret := new(OptimizeResult) if err := json.Unmarshal(res.Body, ret); err != nil { return nil, err } return ret, nil }
// Do executes the service. func (s *FlushService) Do() (*FlushResult, error) { // Build url path := "/" // Indices part if len(s.indices) > 0 { indexPart := make([]string, 0) for _, index := range s.indices { index, err := uritemplates.Expand("{index}", map[string]string{ "index": index, }) if err != nil { return nil, err } indexPart = append(indexPart, index) } path += strings.Join(indexPart, ",") + "/" } path += "_flush" // Parameters params := make(url.Values) if s.force != nil { params.Set("force", fmt.Sprintf("%v", *s.force)) } if s.full != nil { params.Set("full", fmt.Sprintf("%v", *s.full)) } if s.waitIfOngoing != nil { params.Set("wait_if_ongoing", fmt.Sprintf("%v", *s.waitIfOngoing)) } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) } if s.expandWildcards != "" { params.Set("expand_wildcards", s.expandWildcards) } // Get response res, err := s.client.PerformRequest("POST", path, params, nil) if err != nil { return nil, err } // Return result ret := new(FlushResult) if err := json.Unmarshal(res.Body, ret); err != nil { return nil, err } return ret, nil }
// url returns the URL part of the document request. func (b *UpdateService) url() (string, url.Values, error) { // Build url path := "/{index}/{type}/{id}/_update" path, err := uritemplates.Expand(path, map[string]string{ "index": b.index, "type": b.typ, "id": b.id, }) if err != nil { return "", url.Values{}, 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.timeout != "" { params.Set("timeout", b.timeout) } if b.refresh != nil { params.Set("refresh", fmt.Sprintf("%v", *b.refresh)) } if b.replicationType != "" { params.Set("replication", b.replicationType) } if b.consistencyLevel != "" { params.Set("consistency", b.consistencyLevel) } if len(b.fields) > 0 { params.Set("fields", strings.Join(b.fields, ",")) } if b.version != nil { params.Set("version", fmt.Sprintf("%d", *b.version)) } if b.versionType != "" { params.Set("version_type", b.versionType) } if b.retryOnConflict != nil { params.Set("retry_on_conflict", fmt.Sprintf("%v", *b.retryOnConflict)) } return path, params, nil }
// Do deletes the document. It fails if any of index, type, and identifier // are missing. func (s *DeleteService) Do() (*DeleteResult, error) { if s.index == "" { return nil, ErrMissingIndex } if s._type == "" { return nil, ErrMissingType } if s.id == "" { return nil, ErrMissingId } // Build url path, err := uritemplates.Expand("/{index}/{type}/{id}", map[string]string{ "index": s.index, "type": s._type, "id": s.id, }) if err != nil { return nil, err } // Parameters params := make(url.Values) if s.refresh != nil { params.Set("refresh", fmt.Sprintf("%v", *s.refresh)) } if s.version != nil { params.Set("version", fmt.Sprintf("%d", *s.version)) } if s.routing != "" { params.Set("routing", fmt.Sprintf("%s", s.routing)) } if s.pretty { params.Set("pretty", fmt.Sprintf("%v", s.pretty)) } // Get response res, err := s.client.PerformRequest("DELETE", path, params, nil) if err != nil { return nil, err } // Return response ret := new(DeleteResult) if err := json.Unmarshal(res.Body, ret); err != nil { return nil, err } return ret, nil }
// Do executes the operation. func (b *CreateIndexService) Do() (*CreateIndexResult, error) { if b.index == "" { return nil, errors.New("missing index name") } // Build url path, err := uritemplates.Expand("/{index}", map[string]string{ "index": b.index, }) if err != nil { return nil, err } params := make(url.Values) if b.pretty { params.Set("pretty", "1") } if b.masterTimeout != "" { params.Set("master_timeout", b.masterTimeout) } if b.timeout != "" { params.Set("timeout", b.timeout) } // Setup HTTP request body var body interface{} if b.bodyJson != nil { body = b.bodyJson } else { body = b.bodyString } // Get response res, err := b.client.PerformRequest("PUT", path, params, body) if err != nil { return nil, err } ret := new(CreateIndexResult) if err := json.Unmarshal(res.Body, ret); err != nil { return nil, err } return ret, nil }
func (s *RefreshService) Do() (*RefreshResult, error) { // Build url path := "/" // Indices part indexPart := make([]string, 0) for _, index := range s.indices { index, err := uritemplates.Expand("{index}", map[string]string{ "index": index, }) if err != nil { return nil, err } indexPart = append(indexPart, index) } if len(indexPart) > 0 { path += strings.Join(indexPart, ",") } path += "/_refresh" // Parameters params := make(url.Values) if s.force != nil { params.Set("force", fmt.Sprintf("%v", *s.force)) } if s.pretty { params.Set("pretty", fmt.Sprintf("%v", s.pretty)) } // Get response res, err := s.client.PerformRequest("POST", path, params, nil) if err != nil { return nil, err } // Return result ret := new(RefreshResult) if err := json.Unmarshal(res.Body, ret); err != nil { return nil, err } return ret, nil }
// buildURL builds the URL for the operation. func (s *GetMappingService) buildURL() (string, url.Values, error) { var index, typ []string if len(s.index) > 0 { index = s.index } else { index = []string{"_all"} } if len(s.typ) > 0 { typ = s.typ } else { typ = []string{"_all"} } // Build URL path, err := uritemplates.Expand("/{index}/_mapping/{type}", map[string]string{ "index": strings.Join(index, ","), "type": strings.Join(typ, ","), }) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.pretty { params.Set("pretty", "1") } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) } if s.expandWildcards != "" { params.Set("expand_wildcards", s.expandWildcards) } if s.local != nil { params.Set("local", fmt.Sprintf("%v", *s.local)) } return path, params, nil }
// buildURL builds the URL for the operation. func (s *IndicesExistsTemplateService) buildURL() (string, url.Values, error) { // Build URL path, err := uritemplates.Expand("/_template/{name}", map[string]string{ "name": s.name, }) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.pretty { params.Set("pretty", "1") } if s.local != nil { params.Set("local", fmt.Sprintf("%v", *s.local)) } return path, params, nil }
// buildURL builds the URL for the operation. func (s *DeleteMappingService) buildURL() (string, url.Values, error) { // Build URL path, err := uritemplates.Expand("/{index}/_mapping/{type}", map[string]string{ "index": strings.Join(s.index, ","), "type": strings.Join(s.typ, ","), }) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.pretty { params.Set("pretty", "1") } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) } return path, params, nil }
// buildURL builds the URL for the operation. func (s *DeleteTemplateService) buildURL() (string, url.Values, error) { // Build URL path, err := uritemplates.Expand("/_search/template/{id}", map[string]string{ "id": s.id, }) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.version != nil { params.Set("version", fmt.Sprintf("%d", *s.version)) } if s.versionType != "" { params.Set("version_type", s.versionType) } return path, params, nil }
func (b *IndexExistsService) Do() (bool, error) { // Build url path, err := uritemplates.Expand("/{index}", map[string]string{ "index": b.index, }) if err != nil { return false, err } // Get response res, err := b.client.PerformRequest("HEAD", path, nil, nil) if err != nil { return false, err } if res.StatusCode == 200 { return true, nil } else if res.StatusCode == 404 { return false, nil } return false, fmt.Errorf("elastic: got HTTP code %d when it should have been either 200 or 404", res.StatusCode) }
func (b *DeleteIndexService) Do() (*DeleteIndexResult, error) { // Build url path, err := uritemplates.Expand("/{index}/", map[string]string{ "index": b.index, }) if err != nil { return nil, err } // Get response res, err := b.client.PerformRequest("DELETE", path, nil, nil) if err != nil { return nil, err } // Return result ret := new(DeleteIndexResult) if err := json.Unmarshal(res.Body, ret); err != nil { return nil, err } return ret, nil }
// buildURL builds the URL for the operation. func (s *IndicesDeleteTemplateService) buildURL() (string, url.Values, error) { // Build URL path, err := uritemplates.Expand("/_template/{name}", map[string]string{ "name": s.name, }) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.pretty { params.Set("pretty", "1") } if s.timeout != "" { params.Set("timeout", s.timeout) } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) } return path, params, nil }
// buildURL builds the URL for the operation. func (s *ClusterHealthService) buildURL() (string, url.Values, error) { // Build URL path, err := uritemplates.Expand("/_cluster/health/{index}", map[string]string{ "index": strings.Join(s.indices, ","), }) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.waitForRelocatingShards != nil { params.Set("wait_for_relocating_shards", fmt.Sprintf("%d", *s.waitForRelocatingShards)) } if s.waitForStatus != "" { params.Set("wait_for_status", s.waitForStatus) } if s.level != "" { params.Set("level", s.level) } if s.local != nil { params.Set("local", fmt.Sprintf("%v", *s.local)) } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) } if s.timeout != "" { params.Set("timeout", s.timeout) } if s.waitForActiveShards != nil { params.Set("wait_for_active_shards", fmt.Sprintf("%d", *s.waitForActiveShards)) } if s.waitForNodes != "" { params.Set("wait_for_nodes", s.waitForNodes) } return path, params, nil }
// buildURL builds the URL for the operation. func (s *NodesInfoService) buildURL() (string, url.Values, error) { // Build URL path, err := uritemplates.Expand("/_nodes/{node_id}/{metric}", map[string]string{ "node_id": strings.Join(s.nodeId, ","), "metric": strings.Join(s.metric, ","), }) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.flatSettings != nil { params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) } if s.human != nil { params.Set("human", fmt.Sprintf("%v", *s.human)) } if s.pretty { params.Set("pretty", "1") } return path, params, nil }
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 }
func (b *GetService) Do() (*GetResult, error) { // Check pre-conditions if err := b.Validate(); err != nil { return nil, err } // Build url path, err := uritemplates.Expand("/{index}/{type}/{id}", map[string]string{ "index": b.index, "type": b.typ, "id": b.id, }) if err != nil { return nil, err } params := make(url.Values) if b.realtime != nil { params.Add("realtime", fmt.Sprintf("%v", *b.realtime)) } if len(b.fields) > 0 { params.Add("fields", strings.Join(b.fields, ",")) } if b.routing != "" { params.Add("routing", b.routing) } if b.preference != "" { params.Add("preference", b.preference) } if b.refresh != nil { params.Add("refresh", fmt.Sprintf("%v", *b.refresh)) } if b.realtime != nil { params.Add("realtime", fmt.Sprintf("%v", *b.realtime)) } if b.ignoreErrorsOnGeneratedFields != nil { params.Add("ignore_errors_on_generated_fields", fmt.Sprintf("%v", *b.ignoreErrorsOnGeneratedFields)) } if len(b.fields) > 0 { params.Add("_fields", strings.Join(b.fields, ",")) } if b.version != nil { params.Add("version", fmt.Sprintf("%d", *b.version)) } if b.versionType != "" { params.Add("version_type", b.versionType) } if b.fsc != nil { for k, values := range b.fsc.Query() { params.Add(k, strings.Join(values, ",")) } } // Get response res, err := b.client.PerformRequest("GET", path, params, nil) if err != nil { return nil, err } // Return result ret := new(GetResult) if err := json.Unmarshal(res.Body, ret); err != nil { return nil, err } return ret, nil }
func (s *SuggestService) Do() (SuggestResult, error) { // Build url path := "/" // Indices part indexPart := make([]string, 0) for _, index := range s.indices { index, err := uritemplates.Expand("{index}", map[string]string{ "index": index, }) if err != nil { return nil, err } indexPart = append(indexPart, index) } path += strings.Join(indexPart, ",") // Suggest path += "/_suggest" // Parameters params := make(url.Values) if s.pretty { params.Set("pretty", fmt.Sprintf("%v", s.pretty)) } if s.routing != "" { params.Set("routing", s.routing) } if s.preference != "" { params.Set("preference", s.preference) } // Set body body := make(map[string]interface{}) for _, s := range s.suggesters { body[s.Name()] = s.Source(false) } // Get response res, err := s.client.PerformRequest("POST", path, params, body) if err != nil { return nil, err } // There is a _shard object that cannot be deserialized. // So we use json.RawMessage instead. var suggestions map[string]*json.RawMessage if err := json.Unmarshal(res.Body, &suggestions); err != nil { return nil, err } ret := make(SuggestResult) for name, result := range suggestions { if name != "_shards" { var s []Suggestion if err := json.Unmarshal(*result, &s); err != nil { return nil, err } ret[name] = s } } return ret, nil }
// Do executes the search and returns a SearchResult. func (s *SearchService) Do() (*SearchResult, error) { // Build url path := "/" // Indices part indexPart := make([]string, 0) for _, index := range s.indices { index, err := uritemplates.Expand("{index}", map[string]string{ "index": index, }) if err != nil { return nil, err } indexPart = append(indexPart, index) } path += strings.Join(indexPart, ",") // Types part if len(s.types) > 0 { typesPart := make([]string, 0) for _, typ := range s.types { typ, err := uritemplates.Expand("{type}", map[string]string{ "type": typ, }) if err != nil { return nil, err } typesPart = append(typesPart, typ) } path += "/" path += strings.Join(typesPart, ",") } // Search path += "/_search" // Parameters params := make(url.Values) if s.pretty { params.Set("pretty", fmt.Sprintf("%v", s.pretty)) } if s.searchType != "" { params.Set("search_type", s.searchType) } // Perform request var body interface{} if s.source != nil { body = s.source } else { body = s.searchSource.Source() } res, err := s.client.PerformRequest("POST", path, params, body) if err != nil { return nil, err } // Return search results ret := new(SearchResult) if err := json.Unmarshal(res.Body, ret); err != nil { return nil, err } return ret, nil }