• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..12-Feb-2016-

cluster-test/H12-Feb-2016-439337

uritemplates/H12-Feb-2016-393349

.gitignoreH A D12-Feb-2016352 3023

.travis.ymlH A D12-Feb-2016436 2015

CONTRIBUTING.mdH A D12-Feb-20161.1 KiB2821

CONTRIBUTORSH A D12-Feb-20161 KiB2422

LICENSEH A D12-Feb-20161.1 KiB2117

README.mdH A D12-Feb-201611 KiB420340

alias.goH A D12-Feb-20162.4 KiB10876

aliases.goH A D12-Feb-20163.1 KiB161109

bulk.goH A D12-Feb-20166.5 KiB302200

bulk_delete_request.goH A D12-Feb-20162.3 KiB11387

bulk_index_request.goH A D12-Feb-20163.5 KiB174143

bulk_request.goH A D12-Feb-2016386 188

bulk_update_request.goH A D12-Feb-20165.4 KiB245194

canonicalize.goH A D12-Feb-2016898 2915

clear_scroll.goH A D12-Feb-20162.2 KiB9765

client.goH A D12-Feb-201636.6 KiB1,292845

cluster_health.goH A D12-Feb-20165.7 KiB187134

cluster_state.goH A D12-Feb-20165.9 KiB198140

cluster_stats.goH A D12-Feb-201612 KiB350283

connection.goH A D12-Feb-20161.9 KiB9163

count.goH A D12-Feb-20163.1 KiB153114

create_index.goH A D12-Feb-20163 KiB12786

decoder.goH A D12-Feb-2016817 2711

delete.goH A D12-Feb-20162.5 KiB131101

delete_by_query.goH A D12-Feb-20167.8 KiB293209

delete_index.goH A D12-Feb-20161.1 KiB5839

delete_mapping.goH A D12-Feb-20163.4 KiB13797

delete_template.goH A D12-Feb-20162.8 KiB11982

doc.goH A D12-Feb-20161.7 KiB521

errors.goH A D12-Feb-20161.9 KiB6448

exists.goH A D12-Feb-20164 KiB177127

explain.goH A D12-Feb-20168.6 KiB330250

fetch_source_context.goH A D12-Feb-20161.8 KiB7559

filter.goH A D12-Feb-2016246 104

flush.goH A D12-Feb-20164.3 KiB168115

geo_point.goH A D12-Feb-20161.2 KiB4833

get.goH A D12-Feb-20165 KiB224186

get_mapping.goH A D12-Feb-20164.4 KiB173119

get_template.goH A D12-Feb-20162.6 KiB11478

highlight.goH A D12-Feb-201612.4 KiB497361

index.goH A D12-Feb-20164.4 KiB218162

index_close.goH A D12-Feb-20163.9 KiB146100

index_exists.goH A D12-Feb-20161.1 KiB5137

index_get.goH A D12-Feb-20164.8 KiB187135

index_get_settings.goH A D12-Feb-20165.2 KiB190133

index_open.goH A D12-Feb-20163.8 KiB147100

indices_delete_template.goH A D12-Feb-20163.1 KiB12385

indices_exists_template.goH A D12-Feb-20162.7 KiB10874

indices_exists_type.goH A D12-Feb-20164.4 KiB156110

indices_get_template.goH A D12-Feb-20163.4 KiB12990

indices_put_template.goH A D12-Feb-20164.7 KiB180128

indices_stats.goH A D12-Feb-201613.7 KiB386305

inner_hit.goH A D12-Feb-20163.6 KiB157111

multi_get.goH A D12-Feb-20164.4 KiB195145

multi_search.goH A D12-Feb-20162.3 KiB10275

nodes_info.goH A D12-Feb-201610.5 KiB312221

optimize.goH A D12-Feb-20163 KiB136105

percolate.goH A D12-Feb-20168.7 KiB311227

ping.goH A D12-Feb-20162.8 KiB11886

put_mapping.goH A D12-Feb-20165.8 KiB223160

put_template.goH A D12-Feb-20163.5 KiB153107

query.goH A D12-Feb-2016435 154

refresh.goH A D12-Feb-20161.9 KiB10073

reindexer.goH A D12-Feb-20167.8 KiB271177

request.goH A D12-Feb-20161.3 KiB6048

rescore.goH A D12-Feb-2016942 4130

rescorer.goH A D12-Feb-20161.3 KiB6045

response.goH A D12-Feb-20161.1 KiB4429

scan.goH A D12-Feb-20169.5 KiB374240

scroll.goH A D12-Feb-20164.5 KiB220166

search.goH A D12-Feb-201618.6 KiB540333

search_aggs.goH A D12-Feb-201629.1 KiB961744

search_aggs_avg.goH A D12-Feb-20162.7 KiB11076

search_aggs_cardinality.goH A D12-Feb-20163.3 KiB12992

search_aggs_children.goH A D12-Feb-20161.6 KiB5831

search_aggs_date_histogram.goH A D12-Feb-20168.1 KiB304206

search_aggs_date_range.goH A D12-Feb-20166.6 KiB244179

search_aggs_extended_stats.goH A D12-Feb-20162.9 KiB10976

search_aggs_filter.goH A D12-Feb-20161.7 KiB5931

search_aggs_filters.goH A D12-Feb-20162.1 KiB7743

search_aggs_geo_bounds.goH A D12-Feb-20162.5 KiB10568

search_aggs_geo_distance.goH A D12-Feb-20165.1 KiB181127

search_aggs_global.goH A D12-Feb-20161.6 KiB5727

search_aggs_histogram.goH A D12-Feb-20166 KiB235147

search_aggs_max.goH A D12-Feb-20162.7 KiB11076

search_aggs_min.goH A D12-Feb-20162.7 KiB11076

search_aggs_missing.goH A D12-Feb-20162 KiB6735

search_aggs_nested.goH A D12-Feb-20161.8 KiB6833

search_aggs_percentile_ranks.goH A D12-Feb-20163.5 KiB142102

search_aggs_percentiles.goH A D12-Feb-20163.4 KiB141102

search_aggs_range.goH A D12-Feb-20166.1 KiB233171

search_aggs_significant_terms.goH A D12-Feb-20163.3 KiB12383

search_aggs_stats.goH A D12-Feb-20162.7 KiB10976

search_aggs_sum.goH A D12-Feb-20162.6 KiB10976

search_aggs_terms.goH A D12-Feb-20168.5 KiB340248

search_aggs_tophits.goH A D12-Feb-20164.4 KiB15190

search_aggs_value_count.goH A D12-Feb-20163 KiB11276

search_facets.goH A D12-Feb-2016388 134

search_facets_date_histogram.goH A D12-Feb-20164.8 KiB199155

search_facets_filter.goH A D12-Feb-20161.6 KiB6951

search_facets_geo_distance.goH A D12-Feb-20164.7 KiB203167

search_facets_histogram.goH A D12-Feb-20162.3 KiB11188

search_facets_histogram_script.goH A D12-Feb-20162.8 KiB12199

search_facets_query.goH A D12-Feb-20161.4 KiB6751

search_facets_range.goH A D12-Feb-20163.6 KiB159128

search_facets_statistical.goH A D12-Feb-20162.1 KiB8968

search_facets_statistical_script.goH A D12-Feb-20162.3 KiB9371

search_facets_terms.goH A D12-Feb-20164.1 KiB204171

search_facets_terms_stats.goH A D12-Feb-20163.1 KiB143113

search_filters_and.goH A D12-Feb-20161.6 KiB7752

search_filters_bool.goH A D12-Feb-20163.2 KiB13683

search_filters_exists.goH A D12-Feb-2016957 4224

search_filters_geo_distance.goH A D12-Feb-20163 KiB13796

search_filters_geo_polygon.goH A D12-Feb-20161.9 KiB8251

search_filters_has_child.goH A D12-Feb-20162.9 KiB12688

search_filters_has_parent.goH A D12-Feb-20162.3 KiB10064

search_filters_ids.goH A D12-Feb-20161.4 KiB6436

search_filters_limit.goH A D12-Feb-2016790 3216

search_filters_match_all.goH A D12-Feb-2016668 2612

search_filters_missing.goH A D12-Feb-20161.3 KiB6040

search_filters_nested.goH A D12-Feb-20162.8 KiB12374

search_filters_not.goH A D12-Feb-20161.3 KiB6340

search_filters_or.goH A D12-Feb-20161.6 KiB7752

search_filters_prefix.goH A D12-Feb-20161.3 KiB6841

search_filters_query.goH A D12-Feb-20161.5 KiB6945

search_filters_range.goH A D12-Feb-20163.1 KiB153109

search_filters_regexp.goH A D12-Feb-20162.2 KiB9160

search_filters_term.goH A D12-Feb-20161.3 KiB6741

search_filters_terms.goH A D12-Feb-20161.6 KiB7553

search_filters_type.goH A D12-Feb-2016868 3416

search_queries_bool.goH A D12-Feb-20163.6 KiB154100

search_queries_boosting.goH A D12-Feb-20162.1 KiB9045

search_queries_common.goH A D12-Feb-20163.2 KiB145103

search_queries_custom_filters_score.goH A D12-Feb-20162.5 KiB10857

search_queries_custom_score.goH A D12-Feb-20162.3 KiB10964

search_queries_dis_max.goH A D12-Feb-20161.8 KiB8441

search_queries_filtered.goH A D12-Feb-20162 KiB8745

search_queries_fsq.goH A D12-Feb-20163.6 KiB138105

search_queries_fsq_score_funcs.goH A D12-Feb-201619.3 KiB628376

search_queries_fuzzy.goH A D12-Feb-20162.5 KiB11877

search_queries_fuzzy_like_this.goH A D12-Feb-20163.3 KiB13798

search_queries_fuzzy_like_this_field_query.goH A D12-Feb-20163.4 KiB12989

search_queries_has_child.goH A D12-Feb-20162.6 KiB11076

search_queries_has_parent.goH A D12-Feb-20162 KiB8452

search_queries_ids.goH A D12-Feb-20161.6 KiB7846

search_queries_match.goH A D12-Feb-20164.9 KiB199155

search_queries_match_all.goH A D12-Feb-20161.2 KiB4830

search_queries_more_like_this.goH A D12-Feb-201611.4 KiB400276

search_queries_more_like_this_field.goH A D12-Feb-20164.6 KiB190131

search_queries_multi_match.goH A D12-Feb-20166 KiB254205

search_queries_nested.goH A D12-Feb-20162.4 KiB11466

search_queries_prefix.goH A D12-Feb-20161.6 KiB7647

search_queries_query_string.goH A D12-Feb-20166.7 KiB282213

search_queries_range.goH A D12-Feb-20162.7 KiB13393

search_queries_regexp.goH A D12-Feb-20162.2 KiB9058

search_queries_simple_query_string.goH A D12-Feb-20162.5 KiB10165

search_queries_template_query.goH A D12-Feb-20162.2 KiB8547

search_queries_term.goH A D12-Feb-20161.3 KiB5639

search_queries_terms.goH A D12-Feb-20161.9 KiB7555

search_queries_wildcard.goH A D12-Feb-20162.5 KiB10155

search_request.goH A D12-Feb-20163.7 KiB159115

search_source.goH A D12-Feb-201614.7 KiB551403

sort.goH A D12-Feb-201612.1 KiB488339

suggest.goH A D12-Feb-20163.1 KiB145109

suggest_field.goH A D12-Feb-20161.5 KiB7553

suggester.goH A D12-Feb-2016478 165

suggester_completion.goH A D12-Feb-20163 KiB12289

suggester_completion_fuzzy.goH A D12-Feb-20164.6 KiB172129

suggester_context.goH A D12-Feb-2016356 124

suggester_context_category.goH A D12-Feb-20162.6 KiB10068

suggester_context_geo.goH A D12-Feb-20163.3 KiB13396

suggester_phrase.goH A D12-Feb-201613.4 KiB539435

suggester_term.goH A D12-Feb-20165 KiB226169

update.goH A D12-Feb-20168.6 KiB343252

README.md

1# Elastic
2
3Elastic is an [Elasticsearch](http://www.elasticsearch.org/) client for the
4[Go](http://www.golang.org/) programming language.
5
6[![Build Status](https://travis-ci.org/olivere/elastic.svg?branch=master)](https://travis-ci.org/olivere/elastic)
7[![Godoc](http://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](https://godoc.org/github.com/olivere/elastic)
8[![license](http://img.shields.io/badge/license-MIT-red.svg?style=flat)](https://raw.githubusercontent.com/olivere/elastic/master/LICENSE)
9
10See the [wiki](https://github.com/olivere/elastic/wiki) for additional information about Elastic.
11
12
13## Releases
14
15**Notice that the master branch always refers to the latest version of Elastic. If you want to use stable versions of Elastic, you should use the packages released via [gopkg.in](https://gopkg.in).**
16
17Here's the version matrix:
18
19Elasticsearch version | Elastic version -| Package URL
20----------------------|------------------|------------
212.x                   | 3.0 **beta**     | [`gopkg.in/olivere/elastic.v3-unstable`](https://gopkg.in/olivere/elastic.v3-unstable) ([source](https://github.com/olivere/elastic/tree/release-branch.v3) [doc](http://godoc.org/gopkg.in/olivere/elastic.v3-unstable))
221.x                   | 2.0              | [`gopkg.in/olivere/elastic.v2`](https://gopkg.in/olivere/elastic.v2) ([source](https://github.com/olivere/elastic/tree/release-branch.v2) [doc](http://godoc.org/gopkg.in/olivere/elastic.v2))
230.9-1.3               | 1.0              | [`gopkg.in/olivere/elastic.v1`](https://gopkg.in/olivere/elastic.v1) ([source](https://github.com/olivere/elastic/tree/release-branch.v1) [doc](http://godoc.org/gopkg.in/olivere/elastic.v1))
24
25**Example:**
26
27You have Elasticsearch 1.6.0 installed and want to use Elastic. As listed above, you should use Elastic 2.0. So you first install Elastic 2.0.
28
29```sh
30$ go get gopkg.in/olivere/elastic.v2
31```
32
33Then you use it via the following import path:
34
35```go
36import "gopkg.in/olivere/elastic.v2"
37```
38
39### Elastic 3.0
40
41Elastic 3.0 targets Elasticsearch 2.x and is currently under [active development](https://github.com/olivere/elastic/tree/release-branch.v3). It is not published to gokpg yet.
42
43There are a lot of [breaking changes in Elasticsearch 2.0](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking-changes-2.0.html) and we will use this as an opportunity to [clean up and refactor Elastic as well](https://github.com/olivere/elastic/blob/release-branch.v3/CHANGELOG-3.0.md).
44
45### Elastic 2.0
46
47Elastic 2.0 targets Elasticsearch 1.x and published via [`gopkg.in/olivere/elastic.v2`](https://gopkg.in/olivere/elastic.v2).
48
49### Elastic 1.0
50
51Elastic 1.0 is deprecated. You should really update Elasticsearch and Elastic
52to a recent version.
53
54However, if you cannot update for some reason, don't worry. Version 1.0 is
55still available. All you need to do is go-get it and change your import path
56as described above.
57
58
59## Status
60
61We use Elastic in production since 2012. Although Elastic is quite stable
62from our experience, we don't have a stable API yet. The reason for this
63is that Elasticsearch changes quite often and at a fast pace.
64At this moment we focus on features, not on a stable API.
65
66Having said that, there have been no big API changes that required you
67to rewrite your application big time.
68More often than not it's renaming APIs and adding/removing features
69so that we are in sync with the Elasticsearch API.
70
71Elastic has been used in production with the following Elasticsearch versions:
720.90, 1.0, 1.1, 1.2, 1.3, 1.4, and 1.5.
73Furthermore, we use [Travis CI](https://travis-ci.org/)
74to test Elastic with the most recent versions of Elasticsearch and Go.
75See the [.travis.yml](https://github.com/olivere/elastic/blob/master/.travis.yml)
76file for the exact matrix and [Travis](https://travis-ci.org/olivere/elastic)
77for the results.
78
79Elasticsearch has quite a few features. A lot of them are
80not yet implemented in Elastic (see below for details).
81I add features and APIs as required. It's straightforward
82to implement missing pieces. I'm accepting pull requests :-)
83
84Having said that, I hope you find the project useful.
85
86
87## Usage
88
89The first thing you do is to create a Client. The client connects to
90Elasticsearch on http://127.0.0.1:9200 by default.
91
92You typically create one client for your app. Here's a complete example.
93
94```go
95// Create a client
96client, err := elastic.NewClient()
97if err != nil {
98    // Handle error
99}
100
101// Create an index
102_, err = client.CreateIndex("twitter").Do()
103if err != nil {
104    // Handle error
105    panic(err)
106}
107
108// Add a document to the index
109tweet := Tweet{User: "olivere", Message: "Take Five"}
110_, err = client.Index().
111    Index("twitter").
112    Type("tweet").
113    Id("1").
114    BodyJson(tweet).
115    Do()
116if err != nil {
117    // Handle error
118    panic(err)
119}
120
121// Search with a term query
122termQuery := elastic.NewTermQuery("user", "olivere")
123searchResult, err := client.Search().
124    Index("twitter").   // search in index "twitter"
125    Query(&termQuery).  // specify the query
126    Sort("user", true). // sort by "user" field, ascending
127    From(0).Size(10).   // take documents 0-9
128    Pretty(true).       // pretty print request and response JSON
129    Do()                // execute
130if err != nil {
131    // Handle error
132    panic(err)
133}
134
135// searchResult is of type SearchResult and returns hits, suggestions,
136// and all kinds of other information from Elasticsearch.
137fmt.Printf("Query took %d milliseconds\n", searchResult.TookInMillis)
138
139// Each is a convenience function that iterates over hits in a search result.
140// It makes sure you don't need to check for nil values in the response.
141// However, it ignores errors in serialization. If you want full control
142// over iterating the hits, see below.
143var ttyp Tweet
144for _, item := range searchResult.Each(reflect.TypeOf(ttyp)) {
145    if t, ok := item.(Tweet); ok {
146        fmt.Printf("Tweet by %s: %s\n", t.User, t.Message)
147    }
148}
149// TotalHits is another convenience function that works even when something goes wrong.
150fmt.Printf("Found a total of %d tweets\n", searchResult.TotalHits())
151
152// Here's how you iterate through results with full control over each step.
153if searchResult.Hits != nil {
154    fmt.Printf("Found a total of %d tweets\n", searchResult.Hits.TotalHits)
155
156    // Iterate through results
157    for _, hit := range searchResult.Hits.Hits {
158        // hit.Index contains the name of the index
159
160        // Deserialize hit.Source into a Tweet (could also be just a map[string]interface{}).
161        var t Tweet
162        err := json.Unmarshal(*hit.Source, &t)
163        if err != nil {
164            // Deserialization failed
165        }
166
167        // Work with tweet
168        fmt.Printf("Tweet by %s: %s\n", t.User, t.Message)
169    }
170} else {
171    // No hits
172    fmt.Print("Found no tweets\n")
173}
174
175// Delete the index again
176_, err = client.DeleteIndex("twitter").Do()
177if err != nil {
178    // Handle error
179    panic(err)
180}
181```
182
183See the [wiki](https://github.com/olivere/elastic/wiki) for more details.
184
185
186## API Status
187
188Here's the current API status.
189
190### APIs
191
192- [x] Search (most queries, filters, facets, aggregations etc. are implemented: see below)
193- [x] Index
194- [x] Get
195- [x] Delete
196- [x] Delete By Query
197- [x] Update
198- [x] Multi Get
199- [x] Bulk
200- [ ] Bulk UDP
201- [ ] Term vectors
202- [ ] Multi term vectors
203- [x] Count
204- [ ] Validate
205- [x] Explain
206- [x] Search
207- [ ] Search shards
208- [x] Search template
209- [x] Facets (most are implemented, see below)
210- [x] Aggregates (most are implemented, see below)
211- [x] Multi Search
212- [x] Percolate
213- [ ] More like this
214- [ ] Benchmark
215
216### Indices
217
218- [x] Create index
219- [x] Delete index
220- [x] Get index
221- [x] Indices exists
222- [x] Open/close index
223- [x] Put mapping
224- [x] Get mapping
225- [ ] Get field mapping
226- [x] Types exist
227- [x] Delete mapping
228- [x] Index aliases
229- [ ] Update indices settings
230- [x] Get settings
231- [ ] Analyze
232- [x] Index templates
233- [ ] Warmers
234- [ ] Status
235- [x] Indices stats
236- [ ] Indices segments
237- [ ] Indices recovery
238- [ ] Clear cache
239- [x] Flush
240- [x] Refresh
241- [x] Optimize
242- [ ] Upgrade
243
244### Snapshot and Restore
245
246- [ ] Snapshot
247- [ ] Restore
248- [ ] Snapshot status
249- [ ] Monitoring snapshot/restore progress
250- [ ] Partial restore
251
252### Cat APIs
253
254Not implemented. Those are better suited for operating with Elasticsearch
255on the command line.
256
257### Cluster
258
259- [x] Health
260- [x] State
261- [x] Stats
262- [ ] Pending cluster tasks
263- [ ] Cluster reroute
264- [ ] Cluster update settings
265- [ ] Nodes stats
266- [x] Nodes info
267- [ ] Nodes hot_threads
268- [ ] Nodes shutdown
269
270### Search
271
272- [x] Inner hits (for ES >= 1.5.0; see [docs](www.elastic.co/guide/en/elasticsearch/reference/1.5/search-request-inner-hits.html))
273
274### Query DSL
275
276#### Queries
277
278- [x] `match`
279- [x] `multi_match`
280- [x] `bool`
281- [x] `boosting`
282- [ ] `common_terms`
283- [ ] `constant_score`
284- [x] `dis_max`
285- [x] `filtered`
286- [x] `fuzzy_like_this_query` (`flt`)
287- [x] `fuzzy_like_this_field_query` (`flt_field`)
288- [x] `function_score`
289- [x] `fuzzy`
290- [ ] `geo_shape`
291- [x] `has_child`
292- [x] `has_parent`
293- [x] `ids`
294- [ ] `indices`
295- [x] `match_all`
296- [x] `mlt`
297- [x] `mlt_field`
298- [x] `nested`
299- [x] `prefix`
300- [x] `query_string`
301- [x] `simple_query_string`
302- [x] `range`
303- [x] `regexp`
304- [ ] `span_first`
305- [ ] `span_multi_term`
306- [ ] `span_near`
307- [ ] `span_not`
308- [ ] `span_or`
309- [ ] `span_term`
310- [x] `term`
311- [x] `terms`
312- [ ] `top_children`
313- [x] `wildcard`
314- [x] `minimum_should_match`
315- [ ] `multi_term_query_rewrite`
316- [x] `template_query`
317
318#### Filters
319
320- [x] `and`
321- [x] `bool`
322- [x] `exists`
323- [ ] `geo_bounding_box`
324- [x] `geo_distance`
325- [ ] `geo_distance_range`
326- [x] `geo_polygon`
327- [ ] `geoshape`
328- [ ] `geohash`
329- [x] `has_child`
330- [x] `has_parent`
331- [x] `ids`
332- [ ] `indices`
333- [x] `limit`
334- [x] `match_all`
335- [x] `missing`
336- [x] `nested`
337- [x] `not`
338- [x] `or`
339- [x] `prefix`
340- [x] `query`
341- [x] `range`
342- [x] `regexp`
343- [ ] `script`
344- [x] `term`
345- [x] `terms`
346- [x] `type`
347
348### Facets
349
350- [x] Terms
351- [x] Range
352- [x] Histogram
353- [x] Date Histogram
354- [x] Filter
355- [x] Query
356- [x] Statistical
357- [x] Terms Stats
358- [x] Geo Distance
359
360### Aggregations
361
362- [x] min
363- [x] max
364- [x] sum
365- [x] avg
366- [x] stats
367- [x] extended stats
368- [x] value count
369- [x] percentiles
370- [x] percentile ranks
371- [x] cardinality
372- [x] geo bounds
373- [x] top hits
374- [ ] scripted metric
375- [x] global
376- [x] filter
377- [x] filters
378- [x] missing
379- [x] nested
380- [x] reverse nested
381- [x] children
382- [x] terms
383- [x] significant terms
384- [x] range
385- [x] date range
386- [x] ipv4 range
387- [x] histogram
388- [x] date histogram
389- [x] geo distance
390- [x] geohash grid
391
392### Sorting
393
394- [x] Sort by score
395- [x] Sort by field
396- [x] Sort by geo distance
397- [x] Sort by script
398
399### Scan
400
401Scrolling through documents (e.g. `search_type=scan`) are implemented via
402the `Scroll` and `Scan` services. The `ClearScroll` API is implemented as well.
403
404## How to contribute
405
406Read [the contribution guidelines](https://github.com/olivere/elastic/blob/master/CONTRIBUTING.md).
407
408## Credits
409
410Thanks a lot for the great folks working hard on
411[Elasticsearch](http://www.elasticsearch.org/)
412and
413[Go](http://www.golang.org/).
414
415## LICENSE
416
417MIT-LICENSE. See [LICENSE](http://olivere.mit-license.org/)
418or the LICENSE file provided in the repository for details.
419
420