Elasticsearch的一个Google Go客户端:Elastic

jopen 10年前

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

项目主页:http://www.open-open.com/lib/view/home/1417077815924