// 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 *TermvectorService) buildURL() (string, url.Values, error) { var pathParam = map[string]string{ "index": s.index, "type": s.typ, } var path string var err error // Build URL if s.id != "" { pathParam["id"] = s.id path, err = uritemplates.Expand("/{index}/{type}/{id}/_termvector", pathParam) } else { path, err = uritemplates.Expand("/{index}/{type}/_termvector", pathParam) } if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} if s.pretty { params.Set("pretty", "1") } if s.fieldStatistics != nil { params.Set("field_statistics", fmt.Sprintf("%v", *s.fieldStatistics)) } if len(s.fields) > 0 { params.Set("fields", strings.Join(s.fields, ",")) } if s.offsets != nil { params.Set("offsets", fmt.Sprintf("%v", *s.offsets)) } if s.parent != "" { params.Set("parent", s.parent) } if s.payloads != nil { params.Set("payloads", fmt.Sprintf("%v", *s.payloads)) } if s.positions != nil { params.Set("positions", fmt.Sprintf("%v", *s.positions)) } if s.preference != "" { params.Set("preference", s.preference) } if s.realtime != nil { params.Set("realtime", fmt.Sprintf("%v", *s.realtime)) } if s.routing != "" { params.Set("routing", s.routing) } if s.termStatistics != nil { params.Set("term_statistics", fmt.Sprintf("%v", *s.termStatistics)) } 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 *OpenIndexService) buildURL() (string, url.Values, error) { // Build URL path, err := uritemplates.Expand("/{index}/_open", map[string]string{ "index": s.index, }) if err != nil { return "", url.Values{}, err } // Add query string parameters params := url.Values{} 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)) } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) } if s.expandWildcards != "" { params.Set("expand_wildcards", s.expandWildcards) } return path, params, 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 *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 *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 *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 *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 }
// 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 *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 }
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 *GetTemplateService) 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("%v", s.version)) } if s.versionType != "" { params.Set("version_type", s.versionType) } 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 }
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 (s *CountService) Do() (int64, error) { var err 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 0, err } indexPart = append(indexPart, index) } if len(indexPart) > 0 { path += strings.Join(indexPart, ",") } // Types part typesPart := make([]string, 0) for _, typ := range s.types { typ, err = uritemplates.Expand("{type}", map[string]string{ "type": typ, }) if err != nil { return 0, err } typesPart = append(typesPart, typ) } if len(typesPart) > 0 { path += "/" + strings.Join(typesPart, ",") } // Search path += "/_count" // Parameters params := make(url.Values) if s.pretty { params.Set("pretty", fmt.Sprintf("%v", s.pretty)) } // Set body if there is a query specified var body interface{} if s.query != nil { query := make(map[string]interface{}) query["query"] = s.query.Source() body = query } // Get response res, err := s.client.PerformRequest("POST", path, params, body) if err != nil { return 0, err } // Return result ret := new(CountResult) if err := json.Unmarshal(res.Body, ret); err != nil { return 0, err } if ret != nil { return ret.Count, nil } return int64(0), nil }
// buildURL builds the URL for the operation. func (s *ExplainService) buildURL() (string, url.Values, error) { // Build URL path, err := uritemplates.Expand("/{index}/{type}/{id}/_explain", 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 len(s.xSource) > 0 { params.Set("_source", strings.Join(s.xSource, ",")) } if s.defaultOperator != "" { params.Set("default_operator", s.defaultOperator) } if s.parent != "" { params.Set("parent", s.parent) } if s.preference != "" { params.Set("preference", s.preference) } if s.source != "" { params.Set("source", s.source) } if len(s.xSourceExclude) > 0 { params.Set("_source_exclude", strings.Join(s.xSourceExclude, ",")) } if s.lenient != nil { params.Set("lenient", fmt.Sprintf("%v", *s.lenient)) } if s.q != "" { params.Set("q", s.q) } if s.routing != "" { params.Set("routing", s.routing) } if len(s.fields) > 0 { params.Set("fields", strings.Join(s.fields, ",")) } if s.lowercaseExpandedTerms != nil { params.Set("lowercase_expanded_terms", fmt.Sprintf("%v", *s.lowercaseExpandedTerms)) } if len(s.xSourceInclude) > 0 { params.Set("_source_include", strings.Join(s.xSourceInclude, ",")) } if s.analyzeWildcard != nil { params.Set("analyze_wildcard", fmt.Sprintf("%v", *s.analyzeWildcard)) } if s.analyzer != "" { params.Set("analyzer", s.analyzer) } if s.df != "" { params.Set("df", s.df) } return path, params, 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 }