You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Harshavardhana f248089523 api: Implement bucket notification. (#2271) 8 years ago
..
backoff api: Implement bucket notification. (#2271) 8 years ago
uritemplates api: Implement bucket notification. (#2271) 8 years ago
CHANGELOG-3.0.md api: Implement bucket notification. (#2271) 8 years ago
CONTRIBUTING.md api: Implement bucket notification. (#2271) 8 years ago
CONTRIBUTORS api: Implement bucket notification. (#2271) 8 years ago
ISSUE_TEMPLATE.md api: Implement bucket notification. (#2271) 8 years ago
LICENSE api: Implement bucket notification. (#2271) 8 years ago
README.md api: Implement bucket notification. (#2271) 8 years ago
bulk.go api: Implement bucket notification. (#2271) 8 years ago
bulk_delete_request.go api: Implement bucket notification. (#2271) 8 years ago
bulk_index_request.go api: Implement bucket notification. (#2271) 8 years ago
bulk_processor.go api: Implement bucket notification. (#2271) 8 years ago
bulk_request.go api: Implement bucket notification. (#2271) 8 years ago
bulk_update_request.go api: Implement bucket notification. (#2271) 8 years ago
canonicalize.go api: Implement bucket notification. (#2271) 8 years ago
clear_scroll.go api: Implement bucket notification. (#2271) 8 years ago
client.go api: Implement bucket notification. (#2271) 8 years ago
cluster_health.go api: Implement bucket notification. (#2271) 8 years ago
cluster_state.go api: Implement bucket notification. (#2271) 8 years ago
cluster_stats.go api: Implement bucket notification. (#2271) 8 years ago
connection.go api: Implement bucket notification. (#2271) 8 years ago
count.go api: Implement bucket notification. (#2271) 8 years ago
decoder.go api: Implement bucket notification. (#2271) 8 years ago
delete.go api: Implement bucket notification. (#2271) 8 years ago
delete_by_query.go api: Implement bucket notification. (#2271) 8 years ago
delete_template.go api: Implement bucket notification. (#2271) 8 years ago
doc.go api: Implement bucket notification. (#2271) 8 years ago
errors.go api: Implement bucket notification. (#2271) 8 years ago
exists.go api: Implement bucket notification. (#2271) 8 years ago
explain.go api: Implement bucket notification. (#2271) 8 years ago
fetch_source_context.go api: Implement bucket notification. (#2271) 8 years ago
field_stats.go api: Implement bucket notification. (#2271) 8 years ago
geo_point.go api: Implement bucket notification. (#2271) 8 years ago
get.go api: Implement bucket notification. (#2271) 8 years ago
get_template.go api: Implement bucket notification. (#2271) 8 years ago
highlight.go api: Implement bucket notification. (#2271) 8 years ago
index.go api: Implement bucket notification. (#2271) 8 years ago
indices_close.go api: Implement bucket notification. (#2271) 8 years ago
indices_create.go api: Implement bucket notification. (#2271) 8 years ago
indices_delete.go api: Implement bucket notification. (#2271) 8 years ago
indices_delete_template.go api: Implement bucket notification. (#2271) 8 years ago
indices_delete_warmer.go api: Implement bucket notification. (#2271) 8 years ago
indices_exists.go api: Implement bucket notification. (#2271) 8 years ago
indices_exists_template.go api: Implement bucket notification. (#2271) 8 years ago
indices_exists_type.go api: Implement bucket notification. (#2271) 8 years ago
indices_flush.go api: Implement bucket notification. (#2271) 8 years ago
indices_forcemerge.go api: Implement bucket notification. (#2271) 8 years ago
indices_get.go api: Implement bucket notification. (#2271) 8 years ago
indices_get_aliases.go api: Implement bucket notification. (#2271) 8 years ago
indices_get_mapping.go api: Implement bucket notification. (#2271) 8 years ago
indices_get_settings.go api: Implement bucket notification. (#2271) 8 years ago
indices_get_template.go api: Implement bucket notification. (#2271) 8 years ago
indices_get_warmer.go api: Implement bucket notification. (#2271) 8 years ago
indices_open.go api: Implement bucket notification. (#2271) 8 years ago
indices_put_alias.go api: Implement bucket notification. (#2271) 8 years ago
indices_put_mapping.go api: Implement bucket notification. (#2271) 8 years ago
indices_put_settings.go api: Implement bucket notification. (#2271) 8 years ago
indices_put_template.go api: Implement bucket notification. (#2271) 8 years ago
indices_put_warmer.go api: Implement bucket notification. (#2271) 8 years ago
indices_refresh.go api: Implement bucket notification. (#2271) 8 years ago
indices_stats.go api: Implement bucket notification. (#2271) 8 years ago
inner_hit.go api: Implement bucket notification. (#2271) 8 years ago
logger.go api: Implement bucket notification. (#2271) 8 years ago
mget.go api: Implement bucket notification. (#2271) 8 years ago
msearch.go api: Implement bucket notification. (#2271) 8 years ago
mtermvectors.go api: Implement bucket notification. (#2271) 8 years ago
nodes_info.go api: Implement bucket notification. (#2271) 8 years ago
optimize.go api: Implement bucket notification. (#2271) 8 years ago
percolate.go api: Implement bucket notification. (#2271) 8 years ago
ping.go api: Implement bucket notification. (#2271) 8 years ago
plugins.go api: Implement bucket notification. (#2271) 8 years ago
query.go api: Implement bucket notification. (#2271) 8 years ago
reindex.go api: Implement bucket notification. (#2271) 8 years ago
reindexer.go api: Implement bucket notification. (#2271) 8 years ago
request.go api: Implement bucket notification. (#2271) 8 years ago
rescore.go api: Implement bucket notification. (#2271) 8 years ago
rescorer.go api: Implement bucket notification. (#2271) 8 years ago
response.go api: Implement bucket notification. (#2271) 8 years ago
scan.go api: Implement bucket notification. (#2271) 8 years ago
script.go api: Implement bucket notification. (#2271) 8 years ago
scroll.go api: Implement bucket notification. (#2271) 8 years ago
search.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_children.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_date_histogram.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_date_range.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_filter.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_filters.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_geo_distance.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_geohash_grid.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_global.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_histogram.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_missing.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_nested.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_range.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_reverse_nested.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_sampler.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_significant_terms.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_bucket_terms.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_metrics_avg.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_metrics_cardinality.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_metrics_extended_stats.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_metrics_geo_bounds.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_metrics_max.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_metrics_min.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_metrics_percentile_ranks.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_metrics_percentiles.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_metrics_stats.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_metrics_sum.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_metrics_top_hits.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_metrics_value_count.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_pipeline_avg_bucket.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_pipeline_bucket_script.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_pipeline_bucket_selector.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_pipeline_cumulative_sum.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_pipeline_derivative.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_pipeline_max_bucket.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_pipeline_min_bucket.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_pipeline_mov_avg.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_pipeline_serial_diff.go api: Implement bucket notification. (#2271) 8 years ago
search_aggs_pipeline_sum_bucket.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_bool.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_boosting.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_common_terms.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_constant_score.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_dis_max.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_exists.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_fsq.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_fsq_score_funcs.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_fuzzy.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_geo_bounding_box.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_geo_distance.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_geo_polygon.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_has_child.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_has_parent.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_ids.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_indices.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_match.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_match_all.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_missing.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_more_like_this.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_multi_match.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_nested.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_not.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_prefix.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_query_string.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_range.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_regexp.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_script.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_simple_query_string.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_template_query.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_term.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_terms.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_type.go api: Implement bucket notification. (#2271) 8 years ago
search_queries_wildcard.go api: Implement bucket notification. (#2271) 8 years ago
search_request.go api: Implement bucket notification. (#2271) 8 years ago
search_source.go api: Implement bucket notification. (#2271) 8 years ago
search_template.go api: Implement bucket notification. (#2271) 8 years ago
sort.go api: Implement bucket notification. (#2271) 8 years ago
suggest.go api: Implement bucket notification. (#2271) 8 years ago
suggest_field.go api: Implement bucket notification. (#2271) 8 years ago
suggester.go api: Implement bucket notification. (#2271) 8 years ago
suggester_completion.go api: Implement bucket notification. (#2271) 8 years ago
suggester_completion_fuzzy.go api: Implement bucket notification. (#2271) 8 years ago
suggester_context.go api: Implement bucket notification. (#2271) 8 years ago
suggester_context_category.go api: Implement bucket notification. (#2271) 8 years ago
suggester_context_geo.go api: Implement bucket notification. (#2271) 8 years ago
suggester_phrase.go api: Implement bucket notification. (#2271) 8 years ago
suggester_term.go api: Implement bucket notification. (#2271) 8 years ago
tasks_cancel.go api: Implement bucket notification. (#2271) 8 years ago
tasks_list.go api: Implement bucket notification. (#2271) 8 years ago
termvectors.go api: Implement bucket notification. (#2271) 8 years ago
update.go api: Implement bucket notification. (#2271) 8 years ago
update_by_query.go api: Implement bucket notification. (#2271) 8 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

The release branches (e.g. release-branch.v3) are actively being worked on and can break at any time. If you want to use stable versions of Elastic, please use the packages released via gopkg.in.

Here's the version matrix:

Elasticsearch version Elastic version - Package URL
2.x 3.0 gopkg.in/olivere/elastic.v3 (source doc)
1.x 2.0 gopkg.in/olivere/elastic.v2 (source doc)
0.9-1.3 1.0 gopkg.in/olivere/elastic.v1 (source doc)

Example:

You have installed Elasticsearch 2.1.1 and want to use Elastic. As listed above, you should use Elastic 3.0. So you first install the stable release of Elastic 3.0 from gopkg.in.

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

You then import it with this import path:

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

Elastic 3.0

Elastic 3.0 targets Elasticsearch 2.0 and later. Elasticsearch 2.0.0 was released on 28th October 2015.

Notice that there are a lot of breaking changes in Elasticsearch 2.0 and we used this as an opportunity to clean up and refactor Elastic as well.

Elastic 2.0

Elastic 2.0 targets Elasticsearch 1.x and is published via gopkg.in/olivere/elastic.v2.

Elastic 1.0

Elastic 1.0 is deprecated. You should really update Elasticsearch and Elastic to a recent version.

However, if you cannot update for some reason, don't worry. Version 1.0 is still available. All you need to do is go-get it and change your import path as described above.

Status

We use Elastic in production since 2012. Elastic is stable but the API changes now and then. We strive for API compatibility. However, Elasticsearch sometimes introduces breaking changes and we sometimes have to adapt.

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 Elastic is in sync with Elasticsearch.

Elastic has been used in production with the following Elasticsearch versions: 0.90, 1.0-1.7. Furthermore, we use Travis CI to test Elastic with the most recent versions of Elasticsearch and Go. See the .travis.yml file for the exact matrix and Travis for the results.

Elasticsearch has quite a few features. Most of them are implemented by Elastic. 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.

Getting Started

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 of creating a client, creating an index, adding a document, executing a search etc.

// 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).
    Refresh(true).
    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
    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)) {
    if t, ok := item.(Tweet); ok {
        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.TotalHits > 0 {
    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)
}

Here's a link to a complete working example.

See the wiki for more details.

API Status

Document APIs

  • Index API
  • Get API
  • Delete API
  • Delete By Query API
  • Update API
  • Update By Query API
  • Multi Get API
  • Bulk API
  • Reindex API
  • Term Vectors
  • Multi termvectors API

Search APIs

  • Search
  • Search Template
  • Search Shards API
  • Suggesters
    • Term Suggester
    • Phrase Suggester
    • Completion Suggester
    • Context Suggester
  • Multi Search API
  • Count API
  • Search Exists API
  • Validate API
  • Explain API
  • Percolator API
  • Field Stats API

Aggregations

  • Metrics Aggregations
    • Avg
    • Cardinality
    • Extended Stats
    • Geo Bounds
    • Max
    • Min
    • Percentiles
    • Percentile Ranks
    • Scripted Metric
    • Stats
    • Sum
    • Top Hits
    • Value Count
  • Bucket Aggregations
    • Children
    • Date Histogram
    • Date Range
    • Filter
    • Filters
    • Geo Distance
    • GeoHash Grid
    • Global
    • Histogram
    • IPv4 Range
    • Missing
    • Nested
    • Range
    • Reverse Nested
    • Sampler
    • Significant Terms
    • Terms
  • Pipeline Aggregations
    • Avg Bucket
    • Derivative
    • Max Bucket
    • Min Bucket
    • Sum Bucket
    • Moving Average
    • Cumulative Sum
    • Bucket Script
    • Bucket Selector
    • Serial Differencing
  • Aggregation Metadata

Indices APIs

  • Create Index
  • Delete Index
  • Get Index
  • Indices Exists
  • Open / Close Index
  • Put Mapping
  • Get Mapping
  • Get Field Mapping
  • Types Exists
  • Index Aliases
  • Update Indices Settings
  • Get Settings
  • Analyze
  • Index Templates
  • Warmers
  • Indices Stats
  • Indices Segments
  • Indices Recovery
  • Clear Cache
  • Flush
  • Refresh
  • Optimize
  • Shadow Replica Indices
  • Upgrade

cat APIs

The cat APIs are not implemented as of now. We think they are better suited for operating with Elasticsearch on the command line.

  • cat aliases
  • cat allocation
  • cat count
  • cat fielddata
  • cat health
  • cat indices
  • cat master
  • cat nodes
  • cat pending tasks
  • cat plugins
  • cat recovery
  • cat thread pool
  • cat shards
  • cat segments

Cluster APIs

  • Cluster Health
  • Cluster State
  • Cluster Stats
  • Pending Cluster Tasks
  • Cluster Reroute
  • Cluster Update Settings
  • Nodes Stats
  • Nodes Info
  • Task Management API
  • Nodes hot_threads

Query DSL

  • Match All Query
  • Inner hits
  • Full text queries
    • Match Query
    • Multi Match Query
    • Common Terms Query
    • Query String Query
    • Simple Query String Query
  • Term level queries
    • Term Query
    • Terms Query
    • Range Query
    • Exists Query
    • Missing Query
    • Prefix Query
    • Wildcard Query
    • Regexp Query
    • Fuzzy Query
    • Type Query
    • Ids Query
  • Compound queries
    • Constant Score Query
    • Bool Query
    • Dis Max Query
    • Function Score Query
    • Boosting Query
    • Indices Query
    • And Query (deprecated)
    • Not Query
    • Or Query (deprecated)
    • Filtered Query (deprecated)
    • Limit Query (deprecated)
  • Joining queries
    • Nested Query
    • Has Child Query
    • Has Parent Query
  • Geo queries
    • GeoShape Query
    • Geo Bounding Box Query
    • Geo Distance Query
    • Geo Distance Range Query
    • Geo Polygon Query
    • Geohash Cell Query
  • Specialized queries
    • More Like This Query
    • Template Query
    • Script Query
  • Span queries
    • Span Term Query
    • Span Multi Term Query
    • Span First Query
    • Span Near Query
    • Span Or Query
    • Span Not Query
    • Span Containing Query
    • Span Within Query

Modules

  • Snapshot and Restore

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.

Elastic uses portions of the uritemplates library by Joshua Tacoma and backoff by Cenk Altı.

LICENSE

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