func (shell *Shell) Search(args string) { service := shell.client.Search().Index(shell.prompt.Index) for key, value := range parseTerms(args) { service = service.Query(elastic.NewTermQuery(key, value)) } searchResult, err := service.Do() if err == nil { util.LogInfo(fmt.Sprintf("Time: %d ms", searchResult.TookInMillis)) util.LogInfo(fmt.Sprintf("Total hits: %d", searchResult.TotalHits())) if searchResult.Hits != nil { for _, hit := range searchResult.Hits.Hits { source, err := json.Marshal(&hit.Source) if err == nil { util.LogInfo(fmt.Sprint("ID: ", hit.Id)) util.LogInfo(string(source)) fmt.Println() } else { util.LogError(err.Error()) } } } } else { util.LogError(err.Error()) } }
func elasticQuery() { client, err := elastic.NewClient(elastic.SetURL("http://127.0.0.1:9200")) // Flush to make sure the documents got written. _, err = client.Flush().Index("products").Do() if err != nil { panic(err) } // Search with a term query termQuery := elastic.NewTermQuery("name", "annual_fee") searchResult, err := client.Search(). Index("products"). // search in index "products" Query(&termQuery). // specify the query Sort("name", true). // sort by "name" field, ascending From(0).Size(10). // take documents 0-9 Pretty(true). // pretty print request and response JSON Do() // execute if err != nil { // Handle error panic(err) } // searchResult is of type SearchResult and returns hits, suggestions, // and all kinds of other information from Elasticsearch. fmt.Printf("Query took %d milliseconds\n", searchResult.TookInMillis) // // TotalHits is another convenience function that works even when something goes wrong. fmt.Printf("Found a total of %d products\n", searchResult.TotalHits()) // Here's how you iterate through results with full control over each step. if searchResult.Hits != nil { fmt.Printf("Found a total of %d products\n", searchResult.Hits.TotalHits) // Iterate through results for _, hit := range searchResult.Hits.Hits { // hit.Index contains the name of the index // Deserialize hit.Source into a Tweet (could also be just a map[string]interface{}). var p models.Product err := json.Unmarshal(*hit.Source, &p) if err != nil { // Deserialization failed } // Work with product fmt.Printf("The new product is %s: %s\n", p.Name, p.Description) } } else { // No hits fmt.Print("Found no products\n") } }
func ExampleSearchService() { // Get a client to the local Elasticsearch instance. client, err := elastic.NewClient() if err != nil { // Handle error panic(err) } // Search with a term query termQuery := elastic.NewTermQuery("user", "olivere") searchResult, err := client.Search(). Index("twitter"). // search in index "twitter" Query(&termQuery). // specify the query Sort("user", true). // sort by "user" field, ascending From(0).Size(10). // take documents 0-9 Pretty(true). // pretty print request and response JSON Do() // execute if err != nil { // Handle error panic(err) } // searchResult is of type SearchResult and returns hits, suggestions, // and all kinds of other information from Elasticsearch. fmt.Printf("Query took %d milliseconds\n", searchResult.TookInMillis) // Number of hits if searchResult.Hits != nil { fmt.Printf("Found a total of %d tweets\n", searchResult.Hits.TotalHits) // Iterate through results for _, hit := range searchResult.Hits.Hits { // hit.Index contains the name of the index // Deserialize hit.Source into a Tweet (could also be just a map[string]interface{}). var t Tweet err := json.Unmarshal(*hit.Source, &t) if err != nil { // Deserialization failed } // Work with tweet fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) } } else { // No hits fmt.Print("Found no tweets\n") } }
func Example() { errorlog := log.New(os.Stdout, "APP ", log.LstdFlags) // Obtain a client. You can provide your own HTTP client here. client, err := elastic.NewClient(elastic.SetErrorLog(errorlog)) if err != nil { // Handle error panic(err) } // Trace request and response details like this //client.SetTracer(log.New(os.Stdout, "", 0)) // Ping the Elasticsearch server to get e.g. the version number info, code, err := client.Ping().Do() if err != nil { // Handle error panic(err) } fmt.Printf("Elasticsearch returned with code %d and version %s", code, info.Version.Number) // Getting the ES version number is quite common, so there's a shortcut esversion, err := client.ElasticsearchVersion("http://127.0.0.1:9200") if err != nil { // Handle error panic(err) } fmt.Printf("Elasticsearch version %s", esversion) // Use the IndexExists service to check if a specified index exists. exists, err := client.IndexExists("twitter").Do() if err != nil { // Handle error panic(err) } if !exists { // Create a new index. createIndex, err := client.CreateIndex("twitter").Do() if err != nil { // Handle error panic(err) } if !createIndex.Acknowledged { // Not acknowledged } } // Index a tweet (using JSON serialization) tweet1 := Tweet{User: "******", Message: "Take Five", Retweets: 0} put1, err := client.Index(). Index("twitter"). Type("tweet"). Id("1"). BodyJson(tweet1). Do() if err != nil { // Handle error panic(err) } fmt.Printf("Indexed tweet %s to index %s, type %s\n", put1.Id, put1.Index, put1.Type) // Index a second tweet (by string) tweet2 := `{"user" : "olivere", "message" : "It's a Raggy Waltz"}` put2, err := client.Index(). Index("twitter"). Type("tweet"). Id("2"). BodyString(tweet2). Do() if err != nil { // Handle error panic(err) } fmt.Printf("Indexed tweet %s to index %s, type %s\n", put2.Id, put2.Index, put2.Type) // Get tweet with specified ID get1, err := client.Get(). Index("twitter"). Type("tweet"). Id("1"). Do() if err != nil { // Handle error panic(err) } if get1.Found { fmt.Printf("Got document %s in version %d from index %s, type %s\n", get1.Id, get1.Version, get1.Index, get1.Type) } // Flush to make sure the documents got written. _, err = client.Flush().Index("twitter").Do() if err != nil { panic(err) } // Search with a term query termQuery := elastic.NewTermQuery("user", "olivere") searchResult, err := client.Search(). Index("twitter"). // search in index "twitter" Query(&termQuery). // specify the query Sort("user", true). // sort by "user" field, ascending From(0).Size(10). // take documents 0-9 Pretty(true). // pretty print request and response JSON Do() // execute if err != nil { // Handle error panic(err) } // searchResult is of type SearchResult and returns hits, suggestions, // and all kinds of other information from Elasticsearch. fmt.Printf("Query took %d milliseconds\n", searchResult.TookInMillis) // Each is a convenience function that iterates over hits in a search result. // It makes sure you don't need to check for nil values in the response. // However, it ignores errors in serialization. If you want full control // over iterating the hits, see below. var ttyp Tweet for _, item := range searchResult.Each(reflect.TypeOf(ttyp)) { t := item.(Tweet) fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) } // TotalHits is another convenience function that works even when something goes wrong. fmt.Printf("Found a total of %d tweets\n", searchResult.TotalHits()) // Here's how you iterate through results with full control over each step. if searchResult.Hits != nil { fmt.Printf("Found a total of %d tweets\n", searchResult.Hits.TotalHits) // Iterate through results for _, hit := range searchResult.Hits.Hits { // hit.Index contains the name of the index // Deserialize hit.Source into a Tweet (could also be just a map[string]interface{}). var t Tweet err := json.Unmarshal(*hit.Source, &t) if err != nil { // Deserialization failed } // Work with tweet fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) } } else { // No hits fmt.Print("Found no tweets\n") } // Update a tweet by the update API of Elasticsearch. // We just increment the number of retweets. update, err := client.Update().Index("twitter").Type("tweet").Id("1"). Script("ctx._source.retweets += num"). ScriptParams(map[string]interface{}{"num": 1}). Upsert(map[string]interface{}{"retweets": 0}). Do() if err != nil { // Handle error panic(err) } fmt.Printf("New version of tweet %q is now %d", update.Id, update.Version) // ... // Delete an index. deleteIndex, err := client.DeleteIndex("twitter").Do() if err != nil { // Handle error panic(err) } if !deleteIndex.Acknowledged { // Not acknowledged } }
func (t *TestCase) search() { // Loop forever to check for connection issues for { // Get tweet with specified ID get1, err := t.client.Get(). Index(t.index). Type("tweet"). Id("1"). Do() if err != nil { //failf("Get failed: %v", err) t.runCh <- RunInfo{Success: false} continue } if !get1.Found { //log.Printf("Document %s not found\n", "1") //fmt.Printf("Got document %s in version %d from index %s, type %s\n", get1.Id, get1.Version, get1.Index, get1.Type) t.runCh <- RunInfo{Success: false} continue } // Search with a term query termQuery := elastic.NewTermQuery("user", "olivere") searchResult, err := t.client.Search(). Index(t.index). // search in index t.index Query(&termQuery). // specify the query Sort("user", true). // sort by "user" field, ascending From(0).Size(10). // take documents 0-9 Pretty(true). // pretty print request and response JSON Do() // execute if err != nil { //failf("Search failed: %v\n", err) t.runCh <- RunInfo{Success: false} continue } // searchResult is of type SearchResult and returns hits, suggestions, // and all kinds of other information from Elasticsearch. //fmt.Printf("Query took %d milliseconds\n", searchResult.TookInMillis) // Number of hits if searchResult.Hits != nil { //fmt.Printf("Found a total of %d tweets\n", searchResult.Hits.TotalHits) // Iterate through results for _, hit := range searchResult.Hits.Hits { // hit.Index contains the name of the index // Deserialize hit.Source into a Tweet (could also be just a map[string]interface{}). var tweet Tweet err := json.Unmarshal(*hit.Source, &tweet) if err != nil { // Deserialization failed //failf("Deserialize failed: %v\n", err) t.runCh <- RunInfo{Success: false} continue } // Work with tweet //fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) } } else { // No hits //fmt.Print("Found no tweets\n") } t.runCh <- RunInfo{Success: true} // Sleep some time time.Sleep(time.Duration(rand.Intn(500)) * time.Millisecond) } }