409 lines
13 KiB
Markdown
409 lines
13 KiB
Markdown
# Elastic
|
||
|
||
**This is a development branch that is actively being worked on. DO NOT USE IN PRODUCTION! If you want to use stable versions of Elastic, please use a dependency manager like [dep](https://github.com/golang/dep).**
|
||
|
||
Elastic is an [Elasticsearch](http://www.elasticsearch.org/) client for the
|
||
[Go](http://www.golang.org/) programming language.
|
||
|
||
[![Build Status](https://travis-ci.org/olivere/elastic.svg?branch=release-branch.v6)](https://travis-ci.org/olivere/elastic)
|
||
[![Godoc](http://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](http://godoc.org/github.com/olivere/elastic)
|
||
[![license](http://img.shields.io/badge/license-MIT-red.svg?style=flat)](https://raw.githubusercontent.com/olivere/elastic/master/LICENSE)
|
||
|
||
See the [wiki](https://github.com/olivere/elastic/wiki) for additional information about Elastic.
|
||
|
||
<a href="https://www.buymeacoffee.com/Bjd96U8fm" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png" alt="Buy Me A Coffee" style="height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;" ></a>
|
||
|
||
|
||
## Releases
|
||
|
||
**The release branches (e.g. [`release-branch.v6`](https://github.com/olivere/elastic/tree/release-branch.v6))
|
||
are actively being worked on and can break at any time.
|
||
If you want to use stable versions of Elastic, please use a dependency manager like [dep](https://github.com/golang/dep).**
|
||
|
||
Here's the version matrix:
|
||
|
||
Elasticsearch version | Elastic version | Package URL | Remarks |
|
||
----------------------|------------------|-------------|---------|
|
||
6.x | 6.0 | [`github.com/olivere/elastic`](https://github.com/olivere/elastic) ([source](https://github.com/olivere/elastic/tree/release-branch.v6) [doc](http://godoc.org/github.com/olivere/elastic)) | Use a dependency manager (see below).
|
||
5.x | 5.0 | [`gopkg.in/olivere/elastic.v5`](https://gopkg.in/olivere/elastic.v5) ([source](https://github.com/olivere/elastic/tree/release-branch.v5) [doc](http://godoc.org/gopkg.in/olivere/elastic.v5)) | Actively maintained.
|
||
2.x | 3.0 | [`gopkg.in/olivere/elastic.v3`](https://gopkg.in/olivere/elastic.v3) ([source](https://github.com/olivere/elastic/tree/release-branch.v3) [doc](http://godoc.org/gopkg.in/olivere/elastic.v3)) | Deprecated. Please update.
|
||
1.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)) | Deprecated. Please update.
|
||
0.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)) | Deprecated. Please update.
|
||
|
||
**Example:**
|
||
|
||
You have installed Elasticsearch 6.0.0 and want to use Elastic.
|
||
As listed above, you should use Elastic 6.0.
|
||
|
||
To use the required version of Elastic in your application, it is strongly
|
||
advised to use a tool like
|
||
[dep](https://github.com/golang/dep)
|
||
or
|
||
[Go modules](https://github.com/golang/go/wiki/Modules)
|
||
to manage dependencies. Make sure to use a version such as `^6.0.0`.
|
||
|
||
To use Elastic, import:
|
||
|
||
```go
|
||
import "github.com/olivere/elastic"
|
||
```
|
||
|
||
### Elastic 6.0
|
||
|
||
Elastic 6.0 targets Elasticsearch 6.x which was [released on 14th November 2017](https://www.elastic.co/blog/elasticsearch-6-0-0-released).
|
||
|
||
Notice that there are a lot of [breaking changes in Elasticsearch 6.0](https://www.elastic.co/guide/en/elasticsearch/reference/6.2/breaking-changes-6.0.html)
|
||
and we used this as an opportunity to [clean up and refactor Elastic](https://github.com/olivere/elastic/blob/release-branch.v6/CHANGELOG-6.0.md)
|
||
as we did in the transition from earlier versions of Elastic.
|
||
|
||
### Elastic 5.0
|
||
|
||
Elastic 5.0 targets Elasticsearch 5.0.0 and later. Elasticsearch 5.0.0 was
|
||
[released on 26th October 2016](https://www.elastic.co/blog/elasticsearch-5-0-0-released).
|
||
|
||
Notice that there are will be a lot of [breaking changes in Elasticsearch 5.0](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking-changes-5.0.html)
|
||
and we used this as an opportunity to [clean up and refactor Elastic](https://github.com/olivere/elastic/blob/release-branch.v5/CHANGELOG-5.0.md)
|
||
as we did in the transition from Elastic 2.0 (for Elasticsearch 1.x) to Elastic 3.0 (for Elasticsearch 2.x).
|
||
|
||
Furthermore, the jump in version numbers will give us a chance to be in sync with the Elastic Stack.
|
||
|
||
### Elastic 3.0
|
||
|
||
Elastic 3.0 targets Elasticsearch 2.x and is published via [`gopkg.in/olivere/elastic.v3`](https://gopkg.in/olivere/elastic.v3).
|
||
|
||
Elastic 3.0 will only get critical bug fixes. You should update to a recent version.
|
||
|
||
### Elastic 2.0
|
||
|
||
Elastic 2.0 targets Elasticsearch 1.x and is published via [`gopkg.in/olivere/elastic.v2`](https://gopkg.in/olivere/elastic.v2).
|
||
|
||
Elastic 2.0 will only get critical bug fixes. You should update to a recent version.
|
||
|
||
### 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](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking-changes.html)
|
||
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 starting with Elasticsearch 0.90 up to recent 6.x
|
||
versions. Furthermore, we use [Travis CI](https://travis-ci.org/)
|
||
to test Elastic with the most recent versions of Elasticsearch and Go.
|
||
See the [.travis.yml](https://github.com/olivere/elastic/blob/master/.travis.yml)
|
||
file for the exact matrix and [Travis](https://travis-ci.org/olivere/elastic)
|
||
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](https://github.com/olivere/elastic/blob/master/client.go).
|
||
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.
|
||
|
||
An example is available [here](https://olivere.github.io/elastic/).
|
||
|
||
Here's a [link to a complete working example for v6](https://gist.github.com/olivere/e4a376b4783c0914e44ea4f745ce2ebf).
|
||
|
||
Here are a few tips on how to get used to Elastic:
|
||
|
||
1. Head over to the [Wiki](https://github.com/olivere/elastic/wiki) for detailed information and
|
||
topics like e.g. [how to add a middleware](/olivere/elastic/wiki/HttpTransport)
|
||
or how to [connect to AWS](/olivere/elastic/wiki/Using-with-AWS-Elasticsearch-Service).
|
||
2. If you are unsure how to implement something, read the tests (all `_test.go` files).
|
||
They not only serve as a guard against changes, but also as a reference.
|
||
3. The [recipes](https://github.com/olivere/elastic/tree/release-branch.v6/recipes)
|
||
contains small examples on how to implement something, e.g. bulk indexing, scrolling etc.
|
||
|
||
|
||
## API Status
|
||
|
||
### Document APIs
|
||
|
||
- [x] Index API
|
||
- [x] Get API
|
||
- [x] Delete API
|
||
- [x] Delete By Query API
|
||
- [x] Update API
|
||
- [x] Update By Query API
|
||
- [x] Multi Get API
|
||
- [x] Bulk API
|
||
- [x] Reindex API
|
||
- [x] Term Vectors
|
||
- [x] Multi termvectors API
|
||
|
||
### Search APIs
|
||
|
||
- [x] Search
|
||
- [x] Search Template
|
||
- [ ] Multi Search Template
|
||
- [x] Search Shards API
|
||
- [x] Suggesters
|
||
- [x] Term Suggester
|
||
- [x] Phrase Suggester
|
||
- [x] Completion Suggester
|
||
- [x] Context Suggester
|
||
- [x] Multi Search API
|
||
- [x] Count API
|
||
- [x] Validate API
|
||
- [x] Explain API
|
||
- [x] Profile API
|
||
- [x] Field Capabilities API
|
||
|
||
### Aggregations
|
||
|
||
- Metrics Aggregations
|
||
- [x] Avg
|
||
- [x] Cardinality
|
||
- [x] Extended Stats
|
||
- [x] Geo Bounds
|
||
- [x] Geo Centroid
|
||
- [x] Max
|
||
- [x] Min
|
||
- [x] Percentiles
|
||
- [x] Percentile Ranks
|
||
- [ ] Scripted Metric
|
||
- [x] Stats
|
||
- [x] Sum
|
||
- [x] Top Hits
|
||
- [x] Value Count
|
||
- Bucket Aggregations
|
||
- [x] Adjacency Matrix
|
||
- [x] Children
|
||
- [x] Date Histogram
|
||
- [x] Date Range
|
||
- [x] Diversified Sampler
|
||
- [x] Filter
|
||
- [x] Filters
|
||
- [x] Geo Distance
|
||
- [ ] GeoHash Grid
|
||
- [x] Global
|
||
- [x] Histogram
|
||
- [x] IP Range
|
||
- [x] Missing
|
||
- [x] Nested
|
||
- [x] Range
|
||
- [x] Reverse Nested
|
||
- [x] Sampler
|
||
- [x] Significant Terms
|
||
- [x] Significant Text
|
||
- [x] Terms
|
||
- [x] Composite
|
||
- Pipeline Aggregations
|
||
- [x] Avg Bucket
|
||
- [x] Derivative
|
||
- [x] Max Bucket
|
||
- [x] Min Bucket
|
||
- [x] Sum Bucket
|
||
- [x] Stats Bucket
|
||
- [ ] Extended Stats Bucket
|
||
- [x] Percentiles Bucket
|
||
- [x] Moving Average
|
||
- [x] Cumulative Sum
|
||
- [x] Bucket Script
|
||
- [x] Bucket Selector
|
||
- [x] Bucket Sort
|
||
- [x] Serial Differencing
|
||
- [x] Matrix Aggregations
|
||
- [x] Matrix Stats
|
||
- [x] Aggregation Metadata
|
||
|
||
### Indices APIs
|
||
|
||
- [x] Create Index
|
||
- [x] Delete Index
|
||
- [x] Get Index
|
||
- [x] Indices Exists
|
||
- [x] Open / Close Index
|
||
- [x] Shrink Index
|
||
- [x] Rollover Index
|
||
- [x] Put Mapping
|
||
- [x] Get Mapping
|
||
- [x] Get Field Mapping
|
||
- [x] Types Exists
|
||
- [x] Index Aliases
|
||
- [x] Update Indices Settings
|
||
- [x] Get Settings
|
||
- [x] Analyze
|
||
- [x] Explain Analyze
|
||
- [x] Index Templates
|
||
- [x] Indices Stats
|
||
- [x] Indices Segments
|
||
- [ ] Indices Recovery
|
||
- [ ] Indices Shard Stores
|
||
- [ ] Clear Cache
|
||
- [x] Flush
|
||
- [x] Synced Flush
|
||
- [x] Refresh
|
||
- [x] Force Merge
|
||
|
||
### 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 nodeattrs
|
||
- [ ] cat nodes
|
||
- [ ] cat pending tasks
|
||
- [ ] cat plugins
|
||
- [ ] cat recovery
|
||
- [ ] cat repositories
|
||
- [ ] cat thread pool
|
||
- [ ] cat shards
|
||
- [ ] cat segments
|
||
- [ ] cat snapshots
|
||
- [ ] cat templates
|
||
|
||
### Cluster APIs
|
||
|
||
- [x] Cluster Health
|
||
- [x] Cluster State
|
||
- [x] Cluster Stats
|
||
- [ ] Pending Cluster Tasks
|
||
- [x] Cluster Reroute
|
||
- [ ] Cluster Update Settings
|
||
- [x] Nodes Stats
|
||
- [x] Nodes Info
|
||
- [ ] Nodes Feature Usage
|
||
- [ ] Remote Cluster Info
|
||
- [x] Task Management API
|
||
- [ ] Nodes hot_threads
|
||
- [ ] Cluster Allocation Explain API
|
||
|
||
### Query DSL
|
||
|
||
- [x] Match All Query
|
||
- [x] Inner hits
|
||
- Full text queries
|
||
- [x] Match Query
|
||
- [x] Match Phrase Query
|
||
- [x] Match Phrase Prefix Query
|
||
- [x] Multi Match Query
|
||
- [x] Common Terms Query
|
||
- [x] Query String Query
|
||
- [x] Simple Query String Query
|
||
- Term level queries
|
||
- [x] Term Query
|
||
- [x] Terms Query
|
||
- [x] Terms Set Query
|
||
- [x] Range Query
|
||
- [x] Exists Query
|
||
- [x] Prefix Query
|
||
- [x] Wildcard Query
|
||
- [x] Regexp Query
|
||
- [x] Fuzzy Query
|
||
- [x] Type Query
|
||
- [x] Ids Query
|
||
- Compound queries
|
||
- [x] Constant Score Query
|
||
- [x] Bool Query
|
||
- [x] Dis Max Query
|
||
- [x] Function Score Query
|
||
- [x] Boosting Query
|
||
- Joining queries
|
||
- [x] Nested Query
|
||
- [x] Has Child Query
|
||
- [x] Has Parent Query
|
||
- [x] Parent Id Query
|
||
- Geo queries
|
||
- [ ] GeoShape Query
|
||
- [x] Geo Bounding Box Query
|
||
- [x] Geo Distance Query
|
||
- [x] Geo Polygon Query
|
||
- Specialized queries
|
||
- [x] More Like This Query
|
||
- [x] Script Query
|
||
- [x] Percolate 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
|
||
- [ ] Span Field Masking Query
|
||
- [ ] Minimum Should Match
|
||
- [ ] Multi Term Query Rewrite
|
||
|
||
### Modules
|
||
|
||
- Snapshot and Restore
|
||
- [x] Repositories
|
||
- [x] Snapshot create
|
||
- [x] Snapshot delete
|
||
- [ ] Restore
|
||
- [ ] Snapshot status
|
||
- [ ] Monitoring snapshot/restore status
|
||
- [ ] Stopping currently running snapshot and restore
|
||
- Scripting
|
||
- [x] GetScript
|
||
- [x] PutScript
|
||
- [x] DeleteScript
|
||
|
||
### Sorting
|
||
|
||
- [x] Sort by score
|
||
- [x] Sort by field
|
||
- [x] Sort by geo distance
|
||
- [x] Sort by script
|
||
- [x] Sort by doc
|
||
|
||
### Scrolling
|
||
|
||
Scrolling is supported via a `ScrollService`. It supports an iterator-like interface.
|
||
The `ClearScroll` API is implemented as well.
|
||
|
||
A pattern for [efficiently scrolling in parallel](https://github.com/olivere/elastic/wiki/ScrollParallel)
|
||
is described in the [Wiki](https://github.com/olivere/elastic/wiki).
|
||
|
||
## How to contribute
|
||
|
||
Read [the contribution guidelines](https://github.com/olivere/elastic/blob/master/CONTRIBUTING.md).
|
||
|
||
## Credits
|
||
|
||
Thanks a lot for the great folks working hard on
|
||
[Elasticsearch](https://www.elastic.co/products/elasticsearch)
|
||
and
|
||
[Go](https://golang.org/).
|
||
|
||
Elastic uses portions of the
|
||
[uritemplates](https://github.com/jtacoma/uritemplates) library
|
||
by Joshua Tacoma,
|
||
[backoff](https://github.com/cenkalti/backoff) by Cenk Altı and
|
||
[leaktest](https://github.com/fortytw2/leaktest) by Ian Chiles.
|
||
|
||
## LICENSE
|
||
|
||
MIT-LICENSE. See [LICENSE](http://olivere.mit-license.org/)
|
||
or the LICENSE file provided in the repository for details.
|