Elasticsearch的一个Google Go客户端:Elastic
                 jopen
                 11年前
            
                    Elastic是分布式搜索引擎Elasticsearch的一个Google Go客户端。Elastic 在生产环境中测试支持的Elasticsearch版本: 0.90, 1.0, 1.1, 1.2, 和 1.3。
// Import Elastic  import (    "github.com/olivere/elastic"  )    // Obtain a client. You can provide your own HTTP client here.  client, err := elastic.NewClient(http.DefaultClient)  if err != nil {      // Handle error      panic(err)  }    // Use the IndexExists service to check if a specified index exists.  exists, err := client.IndexExists("推ter").Do()  if err != nil {      // Handle error      panic(err)  }  if !exists {      // Create a new index.      createIndex, err := client.CreateIndex("推ter").Do()      if err != nil {          // Handle error          panic(err)      }      if !createIndex.Acknowledged {          // Not acknowledged      }  }    // Index a tweet (using JSON serialization)  tweet1 := Tweet{User: "olivere", Message: "Take Five"}  put1, err := client.Index().      Index("推ter").      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("推ter").      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("推ter").      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("推ter").Do()  if err != nil {      panic(err)  }    // Search with a term query  termQuery := elastic.NewTermQuery("user", "olivere")  searchResult, err := client.Search().      Index("推ter").   // search in index "推ter"      Query(&termQuery).  // specify the query      Sort("user", true). // sort by "user" field, ascending      From(0).Size(10).   // take documents 0-9      Debug(true).        // print request and response to stdout      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")  }    // ...    // Delete an index.  deleteIndex, err := client.DeleteIndex("推ter").Do()  if err != nil {      // Handle error      panic(err)  }  if !deleteIndex.Acknowledged {      // Not acknowledged  } API Status
Here's the current API status.
APIs
- Search (most queries, filters, facets, aggregations etc. are implemented: see below)
 - Index
 - Get
 - Delete
 - Update
 - Multi Get
 - Bulk
 - Bulk UDP
 - Term vectors
 - Multi term vectors
 - Count
 - Validate
 - Explain
 - Search
 - Search shards
 - Search template
 - Facets (most are implemented, see below)
 - Aggregates (most are implemented, see below)
 - Multi Search
 - Percolate
 - Delete By Query
 - More like this
 - Benchmark
 
Indices
- Create index
 - Delete index
 - Indices exists
 - Open/close index
 - Put mapping
 - Get mapping
 - Get field mapping
 - Types exist
 - Delete mapping
 - Index aliases
 - Update indices settings
 - Get settings
 - Analyze
 - Index templates
 - Warmers
 - Status
 - Indices stats
 - Indices segments
 - Indices recovery
 - Clear cache
 - Flush
 - Refresh
 - Optimize
 
Snapshot and Restore
- Snapshot
 - Restore
 - Snapshot status
 - Monitoring snapshot/restore progress
 - Partial restore
 
Cat APIs
Not implemented. Those are better suited for operating with Elasticsearch on the command line.
Cluster
- Health
 - State
 - Stats
 - Pending cluster tasks
 - Cluster reroute
 - Cluster update settings
 - Nodes stats
 - Nodes info
 - Nodes hot_threads
 - Nodes shutdown
 
Query DSL
Queries
-  
match -  
multi_match -  
bool -  
boosting -  
common_terms -  
constant_score -  
dis_max -  
filtered -  
fuzzy_like_this_query(flt) -  
fuzzy_like_this_field_query(flt_field) -  
function_score -  
fuzzy -  
geo_shape -  
has_child -  
has_parent -  
ids -  
indices -  
match_all -  
mlt -  
mlt_field -  
nested -  
prefix -  
query_string -  
simple_query_string -  
range -  
regexp -  
span_first -  
span_multi_term -  
span_near -  
span_not -  
span_or -  
span_term -  
term -  
terms -  
top_children -  
wildcard -  
minimum_should_match -  
multi_term_query_rewrite -  
template_query 
Filters
-  
and -  
bool -  
exists -  
geo_bounding_box -  
geo_distance -  
geo_distance_range -  
geo_polygon -  
geoshape -  
geohash -  
has_child -  
has_parent -  
ids -  
indices -  
limit -  
match_all -  
missing -  
nested -  
not -  
or -  
prefix -  
query -  
range -  
regexp -  
script -  
term -  
terms -  
type 
Facets
- Terms
 - Range
 - Histogram
 - Date Histogram
 - Filter
 - Query
 - Statistical
 - Terms Stats
 - Geo Distance
 
Aggregations
- min
 - max
 - sum
 - avg
 - stats
 - extended stats
 - value count
 - percentiles
 - percentile ranks
 - cardinality
 - geo bounds
 - top hits
 - scripted metric
 - global
 - filter
 - filters
 - missing
 - nested
 - reverse nested
 - children
 - terms
 - significant terms
 - range
 - date range
 - ipv4 range
 - histogram
 - date histogram
 - geo distance
 - geohash grid