“wwangchuanjin 324971190a init 5 years ago
..
cluster-test 324971190a init 5 years ago
uritemplates 324971190a init 5 years ago
CONTRIBUTING.md 324971190a init 5 years ago
LICENSE 324971190a init 5 years ago
README.md 324971190a init 5 years ago
alias.go 324971190a init 5 years ago
aliases.go 324971190a init 5 years ago
bulk.go 324971190a init 5 years ago
bulk_delete_request.go 324971190a init 5 years ago
bulk_index_request.go 324971190a init 5 years ago
bulk_request.go 324971190a init 5 years ago
bulk_update_request.go 324971190a init 5 years ago
canonicalize.go 324971190a init 5 years ago
clear_scroll.go 324971190a init 5 years ago
client.go 324971190a init 5 years ago
cluster_health.go 324971190a init 5 years ago
cluster_state.go 324971190a init 5 years ago
connection.go 324971190a init 5 years ago
count.go 324971190a init 5 years ago
create_index.go 324971190a init 5 years ago
decoder.go 324971190a init 5 years ago
delete.go 324971190a init 5 years ago
delete_by_query.go 324971190a init 5 years ago
delete_index.go 324971190a init 5 years ago
delete_mapping.go 324971190a init 5 years ago
delete_template.go 324971190a init 5 years ago
doc.go 324971190a init 5 years ago
errors.go 324971190a init 5 years ago
exists.go 324971190a init 5 years ago
explain.go 324971190a init 5 years ago
fetch_source_context.go 324971190a init 5 years ago
filter.go 324971190a init 5 years ago
flush.go 324971190a init 5 years ago
geo_point.go 324971190a init 5 years ago
get.go 324971190a init 5 years ago
get_mapping.go 324971190a init 5 years ago
get_template.go 324971190a init 5 years ago
highlight.go 324971190a init 5 years ago
index.go 324971190a init 5 years ago
index_close.go 324971190a init 5 years ago
index_exists.go 324971190a init 5 years ago
index_get.go 324971190a init 5 years ago
index_get_settings.go 324971190a init 5 years ago
index_open.go 324971190a init 5 years ago
indices_delete_template.go 324971190a init 5 years ago
indices_exists_template.go 324971190a init 5 years ago
indices_exists_type.go 324971190a init 5 years ago
indices_get_template.go 324971190a init 5 years ago
indices_put_template.go 324971190a init 5 years ago
indices_stats.go 324971190a init 5 years ago
multi_get.go 324971190a init 5 years ago
multi_search.go 324971190a init 5 years ago
nodes_info.go 324971190a init 5 years ago
optimize.go 324971190a init 5 years ago
percolate.go 324971190a init 5 years ago
ping.go 324971190a init 5 years ago
put_mapping.go 324971190a init 5 years ago
put_template.go 324971190a init 5 years ago
query.go 324971190a init 5 years ago
refresh.go 324971190a init 5 years ago
reindexer.go 324971190a init 5 years ago
request.go 324971190a init 5 years ago
rescore.go 324971190a init 5 years ago
rescorer.go 324971190a init 5 years ago
response.go 324971190a init 5 years ago
scan.go 324971190a init 5 years ago
scroll.go 324971190a init 5 years ago
search.go 324971190a init 5 years ago
search_aggs.go 324971190a init 5 years ago
search_aggs_avg.go 324971190a init 5 years ago
search_aggs_cardinality.go 324971190a init 5 years ago
search_aggs_children.go 324971190a init 5 years ago
search_aggs_date_histogram.go 324971190a init 5 years ago
search_aggs_date_range.go 324971190a init 5 years ago
search_aggs_extended_stats.go 324971190a init 5 years ago
search_aggs_filter.go 324971190a init 5 years ago
search_aggs_filters.go 324971190a init 5 years ago
search_aggs_geo_bounds.go 324971190a init 5 years ago
search_aggs_geo_distance.go 324971190a init 5 years ago
search_aggs_global.go 324971190a init 5 years ago
search_aggs_histogram.go 324971190a init 5 years ago
search_aggs_max.go 324971190a init 5 years ago
search_aggs_min.go 324971190a init 5 years ago
search_aggs_missing.go 324971190a init 5 years ago
search_aggs_nested.go 324971190a init 5 years ago
search_aggs_percentile_ranks.go 324971190a init 5 years ago
search_aggs_percentiles.go 324971190a init 5 years ago
search_aggs_range.go 324971190a init 5 years ago
search_aggs_significant_terms.go 324971190a init 5 years ago
search_aggs_stats.go 324971190a init 5 years ago
search_aggs_sum.go 324971190a init 5 years ago
search_aggs_terms.go 324971190a init 5 years ago
search_aggs_tophits.go 324971190a init 5 years ago
search_aggs_value_count.go 324971190a init 5 years ago
search_facets.go 324971190a init 5 years ago
search_facets_date_histogram.go 324971190a init 5 years ago
search_facets_filter.go 324971190a init 5 years ago
search_facets_geo_distance.go 324971190a init 5 years ago
search_facets_histogram.go 324971190a init 5 years ago
search_facets_histogram_script.go 324971190a init 5 years ago
search_facets_query.go 324971190a init 5 years ago
search_facets_range.go 324971190a init 5 years ago
search_facets_statistical.go 324971190a init 5 years ago
search_facets_statistical_script.go 324971190a init 5 years ago
search_facets_terms.go 324971190a init 5 years ago
search_facets_terms_stats.go 324971190a init 5 years ago
search_filters_and.go 324971190a init 5 years ago
search_filters_bool.go 324971190a init 5 years ago
search_filters_exists.go 324971190a init 5 years ago
search_filters_geo_distance.go 324971190a init 5 years ago
search_filters_geo_polygon.go 324971190a init 5 years ago
search_filters_has_child.go 324971190a init 5 years ago
search_filters_has_parent.go 324971190a init 5 years ago
search_filters_ids.go 324971190a init 5 years ago
search_filters_limit.go 324971190a init 5 years ago
search_filters_match_all.go 324971190a init 5 years ago
search_filters_missing.go 324971190a init 5 years ago
search_filters_nested.go 324971190a init 5 years ago
search_filters_not.go 324971190a init 5 years ago
search_filters_or.go 324971190a init 5 years ago
search_filters_prefix.go 324971190a init 5 years ago
search_filters_query.go 324971190a init 5 years ago
search_filters_range.go 324971190a init 5 years ago
search_filters_regexp.go 324971190a init 5 years ago
search_filters_term.go 324971190a init 5 years ago
search_filters_terms.go 324971190a init 5 years ago
search_filters_type.go 324971190a init 5 years ago
search_queries_bool.go 324971190a init 5 years ago
search_queries_boosting.go 324971190a init 5 years ago
search_queries_common.go 324971190a init 5 years ago
search_queries_custom_filters_score.go 324971190a init 5 years ago
search_queries_custom_score.go 324971190a init 5 years ago
search_queries_dis_max.go 324971190a init 5 years ago
search_queries_filtered.go 324971190a init 5 years ago
search_queries_fsq.go 324971190a init 5 years ago
search_queries_fsq_score_funcs.go 324971190a init 5 years ago
search_queries_fuzzy.go 324971190a init 5 years ago
search_queries_fuzzy_like_this.go 324971190a init 5 years ago
search_queries_fuzzy_like_this_field_query.go 324971190a init 5 years ago
search_queries_has_child.go 324971190a init 5 years ago
search_queries_has_parent.go 324971190a init 5 years ago
search_queries_ids.go 324971190a init 5 years ago
search_queries_match.go 324971190a init 5 years ago
search_queries_match_all.go 324971190a init 5 years ago
search_queries_more_like_this.go 324971190a init 5 years ago
search_queries_more_like_this_field.go 324971190a init 5 years ago
search_queries_multi_match.go 324971190a init 5 years ago
search_queries_nested.go 324971190a init 5 years ago
search_queries_prefix.go 324971190a init 5 years ago
search_queries_query_string.go 324971190a init 5 years ago
search_queries_range.go 324971190a init 5 years ago
search_queries_regexp.go 324971190a init 5 years ago
search_queries_simple_query_string.go 324971190a init 5 years ago
search_queries_template_query.go 324971190a init 5 years ago
search_queries_term.go 324971190a init 5 years ago
search_queries_terms.go 324971190a init 5 years ago
search_queries_wildcard.go 324971190a init 5 years ago
search_request.go 324971190a init 5 years ago
search_source.go 324971190a init 5 years ago
sort.go 324971190a init 5 years ago
suggest.go 324971190a init 5 years ago
suggest_field.go 324971190a init 5 years ago
suggester.go 324971190a init 5 years ago
suggester_completion.go 324971190a init 5 years ago
suggester_completion_fuzzy.go 324971190a init 5 years ago
suggester_context.go 324971190a init 5 years ago
suggester_context_category.go 324971190a init 5 years ago
suggester_context_geo.go 324971190a init 5 years ago
suggester_phrase.go 324971190a init 5 years ago
suggester_term.go 324971190a init 5 years ago
update.go 324971190a init 5 years ago

README.md

Elastic

Elastic is an Elasticsearch client for the Go programming language.

Build Status Godoc license

See the wiki for additional information about Elastic.

Releases

Current version

This is the source code of the current version of Elastic (version 2).

Earlier versions

If you came from an earlier version and found that you cannot update, don't worry. Earlier versions are still available. All you need to do is go-get them and change your import path. See below for details. Here's what you need to do to use Elastic version 1:

$ go get gopkg.in/olivere/elastic.v1

Then change your import path:

import "gopkg.in/olivere/elastic.v1"

Status

We use Elastic in production since 2012. Although Elastic is quite stable from our experience, we don't have a stable API yet. The reason for this is that Elasticsearch changes quite often and at a fast pace. At this moment we focus on features, not on a stable API.

Having said that, there have been no big API changes that required you to rewrite your application big time. More often than not it's renaming APIs and adding/removing features so that we are in sync with the Elasticsearch API.

Elastic supports and has been tested in production with the following Elasticsearch versions: 0.90, 1.0, 1.1, 1.2, 1.3, and 1.4.

Elasticsearch has quite a few features. A lot of them are not yet implemented in Elastic (see below for details). I add features and APIs as required. It's straightforward to implement missing pieces. I'm accepting pull requests :-)

Having said that, I hope you find the project useful.

Usage

The first thing you do is to create a Client. The client connects to Elasticsearch on http://127.0.0.1:9200 by default.

You typically create one client for your app. Here's a complete example.

// Create a client
client, err := elastic.NewClient()
if err != nil {
    // Handle error
}

// Create an index
_, err = client.CreateIndex("twitter").Do()
if err != nil {
    // Handle error
    panic(err)
}

// Add a document to the index
tweet := Tweet{User: "olivere", Message: "Take Five"}
_, err = client.Index().
    Index("twitter").
    Type("tweet").
    Id("1").
    BodyJson(tweet).
    Do()
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
    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)

// 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")
}

// Delete the index again
_, err = client.DeleteIndex("twitter").Do()
if err != nil {
    // Handle error
    panic(err)
}

See the wiki for more details.

API Status

Here's the current API status.

APIs

  • Search (most queries, filters, facets, aggregations etc. are implemented: see below)
  • Index
  • Get
  • Delete
  • Delete By Query
  • 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
  • More like this
  • Benchmark

Indices

  • Create index
  • Delete index
  • Get 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
  • Upgrade

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

Sorting

  • Sort by score
  • Sort by field
  • Sort by geo distance
  • Sort by script

Scan

Scrolling through documents (e.g. search_type=scan) are implemented via the Scroll and Scan services. The ClearScroll API is implemented as well.

How to contribute

Read the contribution guidelines.

Credits

Thanks a lot for the great folks working hard on Elasticsearch and Go.

LICENSE

MIT-LICENSE. See LICENSE or the LICENSE file provided in the repository for details.