// Performs a very basic search on an index via the request URI API. // // params: // @pretty: bool for pretty reply or not, a parameter to elasticsearch // @index: the elasticsearch index // @_type: optional ("" if not used) search specific type in this index // @query: this can be one of 3 types: // 1) string value that is valid elasticsearch // 2) io.Reader that can be set in body (also valid elasticsearch string syntax..) // 3) other type marshalable to json (also valid elasticsearch json) // // out, err := SearchRequest(true, "github","",qryType ,"", 0) // // http://www.elasticsearch.org/guide/reference/api/search/uri-request.html func SearchRequest(pretty bool, index string, _type string, query interface{}, scroll string, scan int) (SearchResult, error) { var uriVal string var retval SearchResult if len(_type) > 0 && _type != "*" { uriVal = fmt.Sprintf("/%s/%s/_search?%s%s%s", index, _type, api.Pretty(pretty), api.Scroll(scroll), api.Scan(scan)) } else { uriVal = fmt.Sprintf("/%s/_search?%s%s%s", index, api.Pretty(pretty), api.Scroll(scroll), api.Scan(scan)) } body, err := api.DoCommand("POST", uriVal, query) if err != nil { return retval, err } if err == nil { // marshall into json jsonErr := json.Unmarshal([]byte(body), &retval) if jsonErr != nil { return retval, jsonErr } } return retval, err }
// Performs the simplest possible query in url string // params: // @index: the elasticsearch index // @_type: optional ("" if not used) search specific type in this index // @query: valid string lucene search syntax // // out, err := SearchUri("github","",`user:kimchy` ,"", 0) // // produces a request like this: host:9200/github/_search?q=user:kimchy" // // http://www.elasticsearch.org/guide/reference/api/search/uri-request.html func SearchUri(index, _type string, query, scroll string, scan int) (SearchResult, error) { var uriVal string var retval SearchResult query = url.QueryEscape(query) if len(_type) > 0 && _type != "*" { uriVal = fmt.Sprintf("/%s/%s/_search?q=%s%s%s", index, _type, query, api.Scroll(scroll), api.Scan(scan)) } else { uriVal = fmt.Sprintf("/%s/_search?q=%s%s%s", index, query, api.Scroll(scroll), api.Scan(scan)) } //log.Println(uriVal) body, err := api.DoCommand("GET", uriVal, nil) if err != nil { return retval, err } if err == nil { // marshall into json jsonErr := json.Unmarshal([]byte(body), &retval) if jsonErr != nil { return retval, jsonErr } } return retval, err }
func Scroll(pretty bool, scroll_id string, scroll string) (SearchResult, error) { var url string var retval SearchResult url = fmt.Sprintf("/_search/scroll?%s%s", api.Pretty(pretty), api.Scroll(scroll)) body, err := api.DoCommand("POST", url, scroll_id) if err != nil { return retval, err } if err == nil { // marshall into json jsonErr := json.Unmarshal([]byte(body), &retval) if jsonErr != nil { return retval, jsonErr } } return retval, err }