diff options
Diffstat (limited to 'vendor/gopkg.in/olivere/elastic.v5')
382 files changed, 2988 insertions, 27220 deletions
diff --git a/vendor/gopkg.in/olivere/elastic.v5/.travis.yml b/vendor/gopkg.in/olivere/elastic.v5/.travis.yml index 9658f873a..82b36e7d0 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/.travis.yml +++ b/vendor/gopkg.in/olivere/elastic.v5/.travis.yml @@ -2,8 +2,8 @@ sudo: required language: go script: go test -race -v . ./config go: - - 1.8.x - - 1.9.x + - "1.9.x" + - "1.10.x" # - tip matrix: allow_failures: @@ -12,4 +12,5 @@ services: - docker before_install: - sudo sysctl -w vm.max_map_count=262144 - - docker run -d --rm -p 9200:9200 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" -e "bootstrap.memory_lock=true" -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.1 elasticsearch -Enetwork.host=_local_,_site_ -Enetwork.publish_host=_local_ + - docker run --rm --privileged=true -p 9200:9200 -p 9300:9300 -e "bootstrap.memory_lock=true" -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" docker.elastic.co/elasticsearch/elasticsearch:5.6.8 elasticsearch -Expack.security.enabled=false -Escript.inline=true -Escript.stored=true -Escript.file=true -Enetwork.host=_local_,_site_ -Enetwork.publish_host=_local_ >& /dev/null & + - sleep 30 diff --git a/vendor/gopkg.in/olivere/elastic.v5/CHANGELOG-6.0.md b/vendor/gopkg.in/olivere/elastic.v5/CHANGELOG-6.0.md deleted file mode 100644 index 277925929..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/CHANGELOG-6.0.md +++ /dev/null @@ -1,18 +0,0 @@ -# Changes from 5.0 to 6.0 - -See [breaking changes](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking-changes-6.0.html). - -## _all removed - -6.0 has removed support for the `_all` field. - -## Boolean values coerced - -Only use `true` or `false` for boolean values, not `0` or `1` or `on` or `off`. - -## Single Type Indices - -Notice that 6.0 and future versions will default to single type indices, i.e. you may not use multiple types when e.g. adding an index with a mapping. - -See [here for details](https://www.elastic.co/guide/en/elasticsearch/reference/6.x/removal-of-types.html#_what_are_mapping_types). - diff --git a/vendor/gopkg.in/olivere/elastic.v5/CONTRIBUTORS b/vendor/gopkg.in/olivere/elastic.v5/CONTRIBUTORS index ba06dac29..73a471f39 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/CONTRIBUTORS +++ b/vendor/gopkg.in/olivere/elastic.v5/CONTRIBUTORS @@ -24,6 +24,7 @@ Arquivei [@arquivei](https://github.com/arquivei) arthurgustin [@arthurgustin](https://github.com/arthurgustin) Benjamin Fernandes [@LotharSee](https://github.com/LotharSee) Benjamin Zarzycki [@kf6nux](https://github.com/kf6nux) +Boris Popovschi [@Zyqsempai](https://github.com/Zyqsempai) Braden Bassingthwaite [@bbassingthwaite-va](https://github.com/bbassingthwaite-va) Brady Love [@bradylove](https://github.com/bradylove) Bryan Conklin [@bmconklin](https://github.com/bmconklin) @@ -47,6 +48,7 @@ Evan Shaw [@edsrzf](https://github.com/edsrzf) Fanfan [@wenpos](https://github.com/wenpos) Faolan C-P [@fcheslack](https://github.com/fcheslack) Filip Tepper [@filiptepper](https://github.com/filiptepper) +Gaspard Douady [@plopik](https://github.com/plopik) Gaylord Aulke [@blafasel42](https://github.com/blafasel42) Gerhard Häring [@ghaering](https://github.com/ghaering) Guilherme Silveira [@guilherme-santos](https://github.com/guilherme-santos) diff --git a/vendor/gopkg.in/olivere/elastic.v5/ISSUE_TEMPLATE.md b/vendor/gopkg.in/olivere/elastic.v5/ISSUE_TEMPLATE.md index 88d66cc83..c5eb690a7 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/ISSUE_TEMPLATE.md +++ b/vendor/gopkg.in/olivere/elastic.v5/ISSUE_TEMPLATE.md @@ -6,7 +6,6 @@ your issue/question without further inquiry. Thank you. [ ] elastic.v2 (for Elasticsearch 1.x) [ ] elastic.v3 (for Elasticsearch 2.x) [ ] elastic.v5 (for Elasticsearch 5.x) -[ ] elastic.v6 (for Elasticsearch 6.x) ### Please describe the expected behavior diff --git a/vendor/gopkg.in/olivere/elastic.v5/README.md b/vendor/gopkg.in/olivere/elastic.v5/README.md index d0cdd7821..30930ff22 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/README.md +++ b/vendor/gopkg.in/olivere/elastic.v5/README.md @@ -1,12 +1,10 @@ # Elastic -**This is a development branch that is actively being worked on. DO NOT USE IN PRODUCTION!** - 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) +[![Build Status](https://travis-ci.org/olivere/elastic.svg?branch=release-branch.v5)](https://travis-ci.org/olivere/elastic) +[![Godoc](http://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](http://godoc.org/gopkg.in/olivere/elastic.v5) [![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. @@ -14,46 +12,35 @@ See the [wiki](https://github.com/olivere/elastic/wiki) for additional informati ## Releases -**The release branches (e.g. [`release-branch.v6`](https://github.com/olivere/elastic/tree/release-branch.v6)) +**The release branches (e.g. [`release-branch.v5`](https://github.com/olivere/elastic/tree/release-branch.v5)) 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).** +If you want to use stable versions of Elastic, please use the packages released via [gopkg.in](https://gopkg.in).** 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. +Elasticsearch version | Elastic version -| Package URL +----------------------|------------------|------------ +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)) +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)) +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)) +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)) **Example:** -You have installed Elasticsearch 6.0.0 and want to use Elastic. -As listed above, you should use Elastic 6.0. +You have installed Elasticsearch 5.0.0 and want to use Elastic. +As listed above, you should use Elastic 5.0. +So you first install the stable release of Elastic 5.0 from gopkg.in. -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 -[Glide](https://glide.sh/) -to manage that dependency. Make sure to use a version such as `^6.0.0`. +```sh +$ go get gopkg.in/olivere/elastic.v5 +``` -To use Elastic, simply import: +You then import it with this import path: ```go -import "github.com/olivere/elastic" +import elastic "gopkg.in/olivere/elastic.v5" ``` -### 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 will be a lot of [breaking changes in Elasticsearch 6.0](https://www.elastic.co/guide/en/elasticsearch/reference/6.0/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 @@ -120,7 +107,7 @@ 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/). +An example is available [here](https://olivere.github.io/elastic/) Here's a [link to a complete working example for v3](https://gist.github.com/olivere/114347ff9d9cfdca7bdc0ecea8b82263). @@ -148,7 +135,7 @@ See the [wiki](https://github.com/olivere/elastic/wiki) for more details. - [x] Search - [x] Search Template - [ ] Multi Search Template -- [ ] Search Shards API +- [x] Search Shards API - [x] Suggesters - [x] Term Suggester - [x] Phrase Suggester @@ -156,10 +143,12 @@ See the [wiki](https://github.com/olivere/elastic/wiki) for more details. - [x] Context Suggester - [x] Multi Search API - [x] Count API -- [ ] Validate API +- [ ] Search Exists API +- [x] Validate API - [x] Explain API - [x] Profile API - [x] Field Capabilities API +- [x] Field Stats API ### Aggregations @@ -168,7 +157,7 @@ See the [wiki](https://github.com/olivere/elastic/wiki) for more details. - [x] Cardinality - [x] Extended Stats - [x] Geo Bounds - - [ ] Geo Centroid + - [x] Geo Centroid - [x] Max - [x] Min - [x] Percentiles @@ -179,11 +168,11 @@ See the [wiki](https://github.com/olivere/elastic/wiki) for more details. - [x] Top Hits - [x] Value Count - Bucket Aggregations - - [ ] Adjacency Matrix + - [x] Adjacency Matrix - [x] Children - [x] Date Histogram - [x] Date Range - - [ ] Diversified Sampler + - [x] Diversified Sampler - [x] Filter - [x] Filters - [x] Geo Distance @@ -197,9 +186,7 @@ See the [wiki](https://github.com/olivere/elastic/wiki) for more details. - [x] Reverse Nested - [x] Sampler - [x] Significant Terms - - [x] Significant Text - [x] Terms - - [x] Composite - Pipeline Aggregations - [x] Avg Bucket - [x] Derivative @@ -213,7 +200,6 @@ See the [wiki](https://github.com/olivere/elastic/wiki) for more details. - [x] Cumulative Sum - [x] Bucket Script - [x] Bucket Selector - - [ ] Bucket Sort - [x] Serial Differencing - [x] Matrix Aggregations - [x] Matrix Stats @@ -236,17 +222,17 @@ See the [wiki](https://github.com/olivere/elastic/wiki) for more details. - [x] Update Indices Settings - [x] Get Settings - [x] Analyze - - [x] Explain Analyze - [x] Index Templates +- [ ] Shadow Replica Indices - [x] Indices Stats - [x] Indices Segments - [ ] Indices Recovery - [ ] Indices Shard Stores - [ ] Clear Cache - [x] Flush - - [x] Synced Flush - [x] Refresh - [x] Force Merge +- [ ] Upgrade ### cat APIs @@ -269,7 +255,6 @@ The cat APIs are not implemented as of now. We think they are better suited for - [ ] cat shards - [ ] cat segments - [ ] cat snapshots -- [ ] cat templates ### Cluster APIs @@ -281,8 +266,6 @@ The cat APIs are not implemented as of now. We think they are better suited for - [ ] 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 @@ -302,7 +285,6 @@ The cat APIs are not implemented as of now. We think they are better suited for - Term level queries - [x] Term Query - [x] Terms Query - - [x] Terms Set Query - [x] Range Query - [x] Exists Query - [x] Prefix Query @@ -317,6 +299,7 @@ The cat APIs are not implemented as of now. We think they are better suited for - [x] Dis Max Query - [x] Function Score Query - [x] Boosting Query + - [x] Indices Query - Joining queries - [x] Nested Query - [x] Has Child Query @@ -326,9 +309,12 @@ The cat APIs are not implemented as of now. We think they are better suited for - [ ] GeoShape Query - [x] Geo Bounding Box Query - [x] Geo Distance Query + - [ ] Geo Distance Range Query - [x] Geo Polygon Query + - [ ] Geohash Cell Query - Specialized queries - [x] More Like This Query + - [x] Template Query - [x] Script Query - [x] Percolate Query - Span queries @@ -348,7 +334,7 @@ The cat APIs are not implemented as of now. We think they are better suited for - Snapshot and Restore - [x] Repositories - - [x] Snapshot + - [ ] Snapshot - [ ] Restore - [ ] Snapshot status - [ ] Monitoring snapshot/restore status diff --git a/vendor/gopkg.in/olivere/elastic.v5/acknowledged_response.go b/vendor/gopkg.in/olivere/elastic.v5/acknowledged_response.go index 2045ab85e..83f954f44 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/acknowledged_response.go +++ b/vendor/gopkg.in/olivere/elastic.v5/acknowledged_response.go @@ -7,7 +7,5 @@ package elastic // AcknowledgedResponse is returned from various APIs. It simply indicates // whether the operation is ack'd or not. type AcknowledgedResponse struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` + Acknowledged bool `json:"acknowledged"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/backoff_test.go b/vendor/gopkg.in/olivere/elastic.v5/backoff_test.go deleted file mode 100644 index eae168a12..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/backoff_test.go +++ /dev/null @@ -1,140 +0,0 @@ -package elastic - -import ( - "math/rand" - "testing" - "time" -) - -func TestZeroBackoff(t *testing.T) { - b := ZeroBackoff{} - _, ok := b.Next(0) - if !ok { - t.Fatalf("expected %v, got %v", true, ok) - } -} - -func TestStopBackoff(t *testing.T) { - b := StopBackoff{} - _, ok := b.Next(0) - if ok { - t.Fatalf("expected %v, got %v", false, ok) - } -} - -func TestConstantBackoff(t *testing.T) { - b := NewConstantBackoff(time.Second) - d, ok := b.Next(0) - if !ok { - t.Fatalf("expected %v, got %v", true, ok) - } - if d != time.Second { - t.Fatalf("expected %v, got %v", time.Second, d) - } -} - -func TestSimpleBackoff(t *testing.T) { - var tests = []struct { - Duration time.Duration - Continue bool - }{ - // #0 - { - Duration: 1 * time.Millisecond, - Continue: true, - }, - // #1 - { - Duration: 2 * time.Millisecond, - Continue: true, - }, - // #2 - { - Duration: 7 * time.Millisecond, - Continue: true, - }, - // #3 - { - Duration: 0, - Continue: false, - }, - // #4 - { - Duration: 0, - Continue: false, - }, - } - - b := NewSimpleBackoff(1, 2, 7) - - for i, tt := range tests { - d, ok := b.Next(i) - if got, want := ok, tt.Continue; got != want { - t.Fatalf("#%d: expected %v, got %v", i, want, got) - } - if got, want := d, tt.Duration; got != want { - t.Fatalf("#%d: expected %v, got %v", i, want, got) - } - } -} - -func TestExponentialBackoff(t *testing.T) { - rand.Seed(time.Now().UnixNano()) - - min := time.Duration(8) * time.Millisecond - max := time.Duration(256) * time.Millisecond - b := NewExponentialBackoff(min, max) - - between := func(value time.Duration, a, b int) bool { - x := int(value / time.Millisecond) - return a <= x && x <= b - } - - got, ok := b.Next(0) - if !ok { - t.Fatalf("expected %v, got %v", true, ok) - } - if !between(got, 8, 256) { - t.Errorf("expected [%v..%v], got %v", 8, 256, got) - } - - got, ok = b.Next(1) - if !ok { - t.Fatalf("expected %v, got %v", true, ok) - } - if !between(got, 8, 256) { - t.Errorf("expected [%v..%v], got %v", 8, 256, got) - } - - got, ok = b.Next(2) - if !ok { - t.Fatalf("expected %v, got %v", true, ok) - } - if !between(got, 8, 256) { - t.Errorf("expected [%v..%v], got %v", 8, 256, got) - } - - got, ok = b.Next(3) - if !ok { - t.Fatalf("expected %v, got %v", true, ok) - } - if !between(got, 8, 256) { - t.Errorf("expected [%v..%v], got %v", 8, 256, got) - } - - got, ok = b.Next(4) - if !ok { - t.Fatalf("expected %v, got %v", true, ok) - } - if !between(got, 8, 256) { - t.Errorf("expected [%v..%v], got %v", 8, 256, got) - } - - if _, ok := b.Next(5); ok { - t.Fatalf("expected %v, got %v", false, ok) - } - - if _, ok = b.Next(6); ok { - t.Fatalf("expected %v, got %v", false, ok) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/bulk.go b/vendor/gopkg.in/olivere/elastic.v5/bulk.go index f4228294f..452f5c394 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/bulk.go +++ b/vendor/gopkg.in/olivere/elastic.v5/bulk.go @@ -11,7 +11,7 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // BulkService allows for batching bulk requests and sending them to @@ -23,7 +23,7 @@ import ( // reuse BulkService to send many batches. You do not have to create a new // BulkService for each batch. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-bulk.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-bulk.html // for more details. type BulkService struct { client *Client @@ -243,7 +243,7 @@ func (s *BulkService) Do(ctx context.Context) (*BulkResponse, error) { } // Get response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + res, err := s.client.PerformRequestWithOptions(ctx, PerformRequestOptions{ Method: "POST", Path: path, Params: params, @@ -320,12 +320,10 @@ type BulkResponseItem struct { Type string `json:"_type,omitempty"` Id string `json:"_id,omitempty"` Version int64 `json:"_version,omitempty"` - Result string `json:"result,omitempty"` - Shards *shardsInfo `json:"_shards,omitempty"` - SeqNo int64 `json:"_seq_no,omitempty"` - PrimaryTerm int64 `json:"_primary_term,omitempty"` Status int `json:"status,omitempty"` + Result string `json:"result,omitempty"` ForcedRefresh bool `json:"forced_refresh,omitempty"` + Found bool `json:"found,omitempty"` Error *ErrorDetails `json:"error,omitempty"` GetResult *GetResult `json:"get,omitempty"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/bulk_delete_request.go b/vendor/gopkg.in/olivere/elastic.v5/bulk_delete_request.go index e6c98c553..6a6bfa7fe 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/bulk_delete_request.go +++ b/vendor/gopkg.in/olivere/elastic.v5/bulk_delete_request.go @@ -16,7 +16,7 @@ import ( // BulkDeleteRequest is a request to remove a document from Elasticsearch. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-bulk.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-bulk.html // for details. type BulkDeleteRequest struct { BulkableRequest @@ -38,13 +38,13 @@ type bulkDeleteRequestCommand map[string]bulkDeleteRequestCommandOp //easyjson:json type bulkDeleteRequestCommandOp struct { + Id string `json:"_id,omitempty"` Index string `json:"_index,omitempty"` + Parent string `json:"_parent,omitempty"` + Routing string `json:"_routing,omitempty"` Type string `json:"_type,omitempty"` - Id string `json:"_id,omitempty"` - Parent string `json:"parent,omitempty"` - Routing string `json:"routing,omitempty"` - Version int64 `json:"version,omitempty"` - VersionType string `json:"version_type,omitempty"` + Version int64 `json:"_version,omitempty"` + VersionType string `json:"_version_type,omitempty"` } // NewBulkDeleteRequest returns a new BulkDeleteRequest. @@ -109,7 +109,7 @@ func (r *BulkDeleteRequest) Version(version int64) *BulkDeleteRequest { } // VersionType can be "internal" (default), "external", "external_gte", -// or "external_gt". +// "external_gt", or "force". func (r *BulkDeleteRequest) VersionType(versionType string) *BulkDeleteRequest { r.versionType = versionType r.source = nil @@ -128,7 +128,7 @@ func (r *BulkDeleteRequest) String() string { // Source returns the on-wire representation of the delete request, // split into an action-and-meta-data line and an (optional) source line. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-bulk.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-bulk.html // for details. func (r *BulkDeleteRequest) Source() ([]string, error) { if r.source != nil { diff --git a/vendor/gopkg.in/olivere/elastic.v5/bulk_delete_request_easyjson.go b/vendor/gopkg.in/olivere/elastic.v5/bulk_delete_request_easyjson.go index df3452ce6..16dc83f7b 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/bulk_delete_request_easyjson.go +++ b/vendor/gopkg.in/olivere/elastic.v5/bulk_delete_request_easyjson.go @@ -17,7 +17,7 @@ var ( _ easyjson.Marshaler ) -func easyjson8092efb6DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkDeleteRequestCommandOp) { +func easyjson8092efb6DecodeGopkgInOlivereElasticV5(in *jlexer.Lexer, out *bulkDeleteRequestCommandOp) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -36,19 +36,19 @@ func easyjson8092efb6DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkDe continue } switch key { - case "_index": - out.Index = string(in.String()) - case "_type": - out.Type = string(in.String()) case "_id": out.Id = string(in.String()) - case "parent": + case "_index": + out.Index = string(in.String()) + case "_parent": out.Parent = string(in.String()) - case "routing": + case "_routing": out.Routing = string(in.String()) - case "version": + case "_type": + out.Type = string(in.String()) + case "_version": out.Version = int64(in.Int64()) - case "version_type": + case "_version_type": out.VersionType = string(in.String()) default: in.SkipRecursive() @@ -60,62 +60,62 @@ func easyjson8092efb6DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkDe in.Consumed() } } -func easyjson8092efb6EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkDeleteRequestCommandOp) { +func easyjson8092efb6EncodeGopkgInOlivereElasticV5(out *jwriter.Writer, in bulkDeleteRequestCommandOp) { out.RawByte('{') first := true _ = first - if in.Index != "" { - const prefix string = ",\"_index\":" + if in.Id != "" { + const prefix string = ",\"_id\":" if first { first = false out.RawString(prefix[1:]) } else { out.RawString(prefix) } - out.String(string(in.Index)) + out.String(string(in.Id)) } - if in.Type != "" { - const prefix string = ",\"_type\":" + if in.Index != "" { + const prefix string = ",\"_index\":" if first { first = false out.RawString(prefix[1:]) } else { out.RawString(prefix) } - out.String(string(in.Type)) + out.String(string(in.Index)) } - if in.Id != "" { - const prefix string = ",\"_id\":" + if in.Parent != "" { + const prefix string = ",\"_parent\":" if first { first = false out.RawString(prefix[1:]) } else { out.RawString(prefix) } - out.String(string(in.Id)) + out.String(string(in.Parent)) } - if in.Parent != "" { - const prefix string = ",\"parent\":" + if in.Routing != "" { + const prefix string = ",\"_routing\":" if first { first = false out.RawString(prefix[1:]) } else { out.RawString(prefix) } - out.String(string(in.Parent)) + out.String(string(in.Routing)) } - if in.Routing != "" { - const prefix string = ",\"routing\":" + if in.Type != "" { + const prefix string = ",\"_type\":" if first { first = false out.RawString(prefix[1:]) } else { out.RawString(prefix) } - out.String(string(in.Routing)) + out.String(string(in.Type)) } if in.Version != 0 { - const prefix string = ",\"version\":" + const prefix string = ",\"_version\":" if first { first = false out.RawString(prefix[1:]) @@ -125,7 +125,7 @@ func easyjson8092efb6EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkD out.Int64(int64(in.Version)) } if in.VersionType != "" { - const prefix string = ",\"version_type\":" + const prefix string = ",\"_version_type\":" if first { first = false out.RawString(prefix[1:]) @@ -140,27 +140,27 @@ func easyjson8092efb6EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkD // MarshalJSON supports json.Marshaler interface func (v bulkDeleteRequestCommandOp) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson8092efb6EncodeGithubComOlivereElastic(&w, v) + easyjson8092efb6EncodeGopkgInOlivereElasticV5(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v bulkDeleteRequestCommandOp) MarshalEasyJSON(w *jwriter.Writer) { - easyjson8092efb6EncodeGithubComOlivereElastic(w, v) + easyjson8092efb6EncodeGopkgInOlivereElasticV5(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *bulkDeleteRequestCommandOp) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson8092efb6DecodeGithubComOlivereElastic(&r, v) + easyjson8092efb6DecodeGopkgInOlivereElasticV5(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *bulkDeleteRequestCommandOp) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson8092efb6DecodeGithubComOlivereElastic(l, v) + easyjson8092efb6DecodeGopkgInOlivereElasticV5(l, v) } -func easyjson8092efb6DecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkDeleteRequestCommand) { +func easyjson8092efb6DecodeGopkgInOlivereElasticV51(in *jlexer.Lexer, out *bulkDeleteRequestCommand) { isTopLevel := in.IsStart() if in.IsNull() { in.Skip() @@ -185,7 +185,7 @@ func easyjson8092efb6DecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkD in.Consumed() } } -func easyjson8092efb6EncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulkDeleteRequestCommand) { +func easyjson8092efb6EncodeGopkgInOlivereElasticV51(out *jwriter.Writer, in bulkDeleteRequestCommand) { if in == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 { out.RawString(`null`) } else { @@ -208,23 +208,23 @@ func easyjson8092efb6EncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulk // MarshalJSON supports json.Marshaler interface func (v bulkDeleteRequestCommand) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson8092efb6EncodeGithubComOlivereElastic1(&w, v) + easyjson8092efb6EncodeGopkgInOlivereElasticV51(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v bulkDeleteRequestCommand) MarshalEasyJSON(w *jwriter.Writer) { - easyjson8092efb6EncodeGithubComOlivereElastic1(w, v) + easyjson8092efb6EncodeGopkgInOlivereElasticV51(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *bulkDeleteRequestCommand) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson8092efb6DecodeGithubComOlivereElastic1(&r, v) + easyjson8092efb6DecodeGopkgInOlivereElasticV51(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *bulkDeleteRequestCommand) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson8092efb6DecodeGithubComOlivereElastic1(l, v) + easyjson8092efb6DecodeGopkgInOlivereElasticV51(l, v) } diff --git a/vendor/gopkg.in/olivere/elastic.v5/bulk_delete_request_test.go b/vendor/gopkg.in/olivere/elastic.v5/bulk_delete_request_test.go deleted file mode 100644 index 8635e34d1..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/bulk_delete_request_test.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestBulkDeleteRequestSerialization(t *testing.T) { - tests := []struct { - Request BulkableRequest - Expected []string - }{ - // #0 - { - Request: NewBulkDeleteRequest().Index("index1").Type("doc").Id("1"), - Expected: []string{ - `{"delete":{"_index":"index1","_type":"doc","_id":"1"}}`, - }, - }, - // #1 - { - Request: NewBulkDeleteRequest().Index("index1").Type("doc").Id("1").Parent("2"), - Expected: []string{ - `{"delete":{"_index":"index1","_type":"doc","_id":"1","parent":"2"}}`, - }, - }, - // #2 - { - Request: NewBulkDeleteRequest().Index("index1").Type("doc").Id("1").Routing("3"), - Expected: []string{ - `{"delete":{"_index":"index1","_type":"doc","_id":"1","routing":"3"}}`, - }, - }, - } - - for i, test := range tests { - lines, err := test.Request.Source() - if err != nil { - t.Fatalf("case #%d: expected no error, got: %v", i, err) - } - if lines == nil { - t.Fatalf("case #%d: expected lines, got nil", i) - } - if len(lines) != len(test.Expected) { - t.Fatalf("case #%d: expected %d lines, got %d", i, len(test.Expected), len(lines)) - } - for j, line := range lines { - if line != test.Expected[j] { - t.Errorf("case #%d: expected line #%d to be %s, got: %s", i, j, test.Expected[j], line) - } - } - } -} - -var bulkDeleteRequestSerializationResult string - -func BenchmarkBulkDeleteRequestSerialization(b *testing.B) { - b.Run("stdlib", func(b *testing.B) { - r := NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1") - benchmarkBulkDeleteRequestSerialization(b, r.UseEasyJSON(false)) - }) - b.Run("easyjson", func(b *testing.B) { - r := NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1") - benchmarkBulkDeleteRequestSerialization(b, r.UseEasyJSON(true)) - }) -} - -func benchmarkBulkDeleteRequestSerialization(b *testing.B, r *BulkDeleteRequest) { - var s string - for n := 0; n < b.N; n++ { - s = r.String() - r.source = nil // Don't let caching spoil the benchmark - } - bulkDeleteRequestSerializationResult = s // ensure the compiler doesn't optimize - b.ReportAllocs() -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/bulk_index_request.go b/vendor/gopkg.in/olivere/elastic.v5/bulk_index_request.go index 321d2e25a..70497a046 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/bulk_index_request.go +++ b/vendor/gopkg.in/olivere/elastic.v5/bulk_index_request.go @@ -14,7 +14,7 @@ import ( // BulkIndexRequest is a request to add a document to Elasticsearch. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-bulk.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-bulk.html // for details. type BulkIndexRequest struct { BulkableRequest @@ -29,6 +29,7 @@ type BulkIndexRequest struct { doc interface{} pipeline string retryOnConflict *int + ttl string source []string @@ -40,15 +41,15 @@ type bulkIndexRequestCommand map[string]bulkIndexRequestCommandOp //easyjson:json type bulkIndexRequestCommandOp struct { - Index string `json:"_index,omitempty"` - Id string `json:"_id,omitempty"` - Type string `json:"_type,omitempty"` - Parent string `json:"parent,omitempty"` - // RetryOnConflict is "_retry_on_conflict" for 6.0 and "retry_on_conflict" for 6.1+. - RetryOnConflict *int `json:"retry_on_conflict,omitempty"` - Routing string `json:"routing,omitempty"` - Version int64 `json:"version,omitempty"` - VersionType string `json:"version_type,omitempty"` + Id string `json:"_id,omitempty"` + Index string `json:"_index,omitempty"` + TTL string `json:"_ttl,omitempty"` + Type string `json:"_type,omitempty"` + Parent string `json:"_parent,omitempty"` + RetryOnConflict *int `json:"_retry_on_conflict,omitempty"` + Routing string `json:"_routing,omitempty"` + Version int64 `json:"_version,omitempty"` + VersionType string `json:"_version_type,omitempty"` Pipeline string `json:"pipeline,omitempty"` } @@ -95,7 +96,7 @@ func (r *BulkIndexRequest) Id(id string) *BulkIndexRequest { // OpType specifies if this request should follow create-only or upsert // behavior. This follows the OpType of the standard document index API. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-index_.html#operation-type +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-index_.html#operation-type // for details. func (r *BulkIndexRequest) OpType(opType string) *BulkIndexRequest { r.opType = opType @@ -128,7 +129,7 @@ func (r *BulkIndexRequest) Version(version int64) *BulkIndexRequest { // VersionType specifies how versions are created. It can be e.g. internal, // external, external_gte, or force. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-index_.html#index-versioning +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-index_.html#index-versioning // for details. func (r *BulkIndexRequest) VersionType(versionType string) *BulkIndexRequest { r.versionType = versionType @@ -150,6 +151,13 @@ func (r *BulkIndexRequest) RetryOnConflict(retryOnConflict int) *BulkIndexReques return r } +// TTL is an expiration time for the document. +func (r *BulkIndexRequest) TTL(ttl string) *BulkIndexRequest { + r.ttl = ttl + r.source = nil + return r +} + // Pipeline to use while processing the request. func (r *BulkIndexRequest) Pipeline(pipeline string) *BulkIndexRequest { r.pipeline = pipeline @@ -169,7 +177,7 @@ func (r *BulkIndexRequest) String() string { // Source returns the on-wire representation of the index request, // split into an action-and-meta-data line and an (optional) source line. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-bulk.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-bulk.html // for details. func (r *BulkIndexRequest) Source() ([]string, error) { // { "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } } @@ -191,6 +199,7 @@ func (r *BulkIndexRequest) Source() ([]string, error) { Version: r.version, VersionType: r.versionType, RetryOnConflict: r.retryOnConflict, + TTL: r.ttl, Pipeline: r.pipeline, } command := bulkIndexRequestCommand{ diff --git a/vendor/gopkg.in/olivere/elastic.v5/bulk_index_request_easyjson.go b/vendor/gopkg.in/olivere/elastic.v5/bulk_index_request_easyjson.go index f8792978f..6ee19fbec 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/bulk_index_request_easyjson.go +++ b/vendor/gopkg.in/olivere/elastic.v5/bulk_index_request_easyjson.go @@ -17,7 +17,7 @@ var ( _ easyjson.Marshaler ) -func easyjson9de0fcbfDecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkIndexRequestCommandOp) { +func easyjson9de0fcbfDecodeGopkgInOlivereElasticV5(in *jlexer.Lexer, out *bulkIndexRequestCommandOp) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -36,15 +36,17 @@ func easyjson9de0fcbfDecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkIn continue } switch key { - case "_index": - out.Index = string(in.String()) case "_id": out.Id = string(in.String()) + case "_index": + out.Index = string(in.String()) + case "_ttl": + out.TTL = string(in.String()) case "_type": out.Type = string(in.String()) - case "parent": + case "_parent": out.Parent = string(in.String()) - case "retry_on_conflict": + case "_retry_on_conflict": if in.IsNull() { in.Skip() out.RetryOnConflict = nil @@ -54,11 +56,11 @@ func easyjson9de0fcbfDecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkIn } *out.RetryOnConflict = int(in.Int()) } - case "routing": + case "_routing": out.Routing = string(in.String()) - case "version": + case "_version": out.Version = int64(in.Int64()) - case "version_type": + case "_version_type": out.VersionType = string(in.String()) case "pipeline": out.Pipeline = string(in.String()) @@ -72,10 +74,20 @@ func easyjson9de0fcbfDecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkIn in.Consumed() } } -func easyjson9de0fcbfEncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkIndexRequestCommandOp) { +func easyjson9de0fcbfEncodeGopkgInOlivereElasticV5(out *jwriter.Writer, in bulkIndexRequestCommandOp) { out.RawByte('{') first := true _ = first + if in.Id != "" { + const prefix string = ",\"_id\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Id)) + } if in.Index != "" { const prefix string = ",\"_index\":" if first { @@ -86,15 +98,15 @@ func easyjson9de0fcbfEncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkI } out.String(string(in.Index)) } - if in.Id != "" { - const prefix string = ",\"_id\":" + if in.TTL != "" { + const prefix string = ",\"_ttl\":" if first { first = false out.RawString(prefix[1:]) } else { out.RawString(prefix) } - out.String(string(in.Id)) + out.String(string(in.TTL)) } if in.Type != "" { const prefix string = ",\"_type\":" @@ -107,7 +119,7 @@ func easyjson9de0fcbfEncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkI out.String(string(in.Type)) } if in.Parent != "" { - const prefix string = ",\"parent\":" + const prefix string = ",\"_parent\":" if first { first = false out.RawString(prefix[1:]) @@ -117,7 +129,7 @@ func easyjson9de0fcbfEncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkI out.String(string(in.Parent)) } if in.RetryOnConflict != nil { - const prefix string = ",\"retry_on_conflict\":" + const prefix string = ",\"_retry_on_conflict\":" if first { first = false out.RawString(prefix[1:]) @@ -127,7 +139,7 @@ func easyjson9de0fcbfEncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkI out.Int(int(*in.RetryOnConflict)) } if in.Routing != "" { - const prefix string = ",\"routing\":" + const prefix string = ",\"_routing\":" if first { first = false out.RawString(prefix[1:]) @@ -137,7 +149,7 @@ func easyjson9de0fcbfEncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkI out.String(string(in.Routing)) } if in.Version != 0 { - const prefix string = ",\"version\":" + const prefix string = ",\"_version\":" if first { first = false out.RawString(prefix[1:]) @@ -147,7 +159,7 @@ func easyjson9de0fcbfEncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkI out.Int64(int64(in.Version)) } if in.VersionType != "" { - const prefix string = ",\"version_type\":" + const prefix string = ",\"_version_type\":" if first { first = false out.RawString(prefix[1:]) @@ -172,27 +184,27 @@ func easyjson9de0fcbfEncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkI // MarshalJSON supports json.Marshaler interface func (v bulkIndexRequestCommandOp) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson9de0fcbfEncodeGithubComOlivereElastic(&w, v) + easyjson9de0fcbfEncodeGopkgInOlivereElasticV5(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v bulkIndexRequestCommandOp) MarshalEasyJSON(w *jwriter.Writer) { - easyjson9de0fcbfEncodeGithubComOlivereElastic(w, v) + easyjson9de0fcbfEncodeGopkgInOlivereElasticV5(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *bulkIndexRequestCommandOp) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson9de0fcbfDecodeGithubComOlivereElastic(&r, v) + easyjson9de0fcbfDecodeGopkgInOlivereElasticV5(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *bulkIndexRequestCommandOp) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson9de0fcbfDecodeGithubComOlivereElastic(l, v) + easyjson9de0fcbfDecodeGopkgInOlivereElasticV5(l, v) } -func easyjson9de0fcbfDecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkIndexRequestCommand) { +func easyjson9de0fcbfDecodeGopkgInOlivereElasticV51(in *jlexer.Lexer, out *bulkIndexRequestCommand) { isTopLevel := in.IsStart() if in.IsNull() { in.Skip() @@ -217,7 +229,7 @@ func easyjson9de0fcbfDecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkI in.Consumed() } } -func easyjson9de0fcbfEncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulkIndexRequestCommand) { +func easyjson9de0fcbfEncodeGopkgInOlivereElasticV51(out *jwriter.Writer, in bulkIndexRequestCommand) { if in == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 { out.RawString(`null`) } else { @@ -240,23 +252,23 @@ func easyjson9de0fcbfEncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulk // MarshalJSON supports json.Marshaler interface func (v bulkIndexRequestCommand) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson9de0fcbfEncodeGithubComOlivereElastic1(&w, v) + easyjson9de0fcbfEncodeGopkgInOlivereElasticV51(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v bulkIndexRequestCommand) MarshalEasyJSON(w *jwriter.Writer) { - easyjson9de0fcbfEncodeGithubComOlivereElastic1(w, v) + easyjson9de0fcbfEncodeGopkgInOlivereElasticV51(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *bulkIndexRequestCommand) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson9de0fcbfDecodeGithubComOlivereElastic1(&r, v) + easyjson9de0fcbfDecodeGopkgInOlivereElasticV51(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *bulkIndexRequestCommand) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson9de0fcbfDecodeGithubComOlivereElastic1(l, v) + easyjson9de0fcbfDecodeGopkgInOlivereElasticV51(l, v) } diff --git a/vendor/gopkg.in/olivere/elastic.v5/bulk_index_request_test.go b/vendor/gopkg.in/olivere/elastic.v5/bulk_index_request_test.go deleted file mode 100644 index 79baf51fb..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/bulk_index_request_test.go +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" - "time" -) - -func TestBulkIndexRequestSerialization(t *testing.T) { - tests := []struct { - Request BulkableRequest - Expected []string - }{ - // #0 - { - Request: NewBulkIndexRequest().Index("index1").Type("doc").Id("1"). - Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), - Expected: []string{ - `{"index":{"_index":"index1","_id":"1","_type":"doc"}}`, - `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, - }, - }, - // #1 - { - Request: NewBulkIndexRequest().OpType("create").Index("index1").Type("doc").Id("1"). - Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), - Expected: []string{ - `{"create":{"_index":"index1","_id":"1","_type":"doc"}}`, - `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, - }, - }, - // #2 - { - Request: NewBulkIndexRequest().OpType("index").Index("index1").Type("doc").Id("1"). - Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), - Expected: []string{ - `{"index":{"_index":"index1","_id":"1","_type":"doc"}}`, - `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, - }, - }, - // #3 - { - Request: NewBulkIndexRequest().OpType("index").Index("index1").Type("doc").Id("1").RetryOnConflict(42). - Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), - Expected: []string{ - `{"index":{"_index":"index1","_id":"1","_type":"doc","retry_on_conflict":42}}`, - `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, - }, - }, - // #4 - { - Request: NewBulkIndexRequest().OpType("index").Index("index1").Type("doc").Id("1").Pipeline("my_pipeline"). - Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), - Expected: []string{ - `{"index":{"_index":"index1","_id":"1","_type":"doc","pipeline":"my_pipeline"}}`, - `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, - }, - }, - // #5 - { - Request: NewBulkIndexRequest().OpType("index").Index("index1").Type("doc").Id("1"). - Routing("123"). - Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), - Expected: []string{ - `{"index":{"_index":"index1","_id":"1","_type":"doc","routing":"123"}}`, - `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, - }, - }, - } - - for i, test := range tests { - lines, err := test.Request.Source() - if err != nil { - t.Fatalf("case #%d: expected no error, got: %v", i, err) - } - if lines == nil { - t.Fatalf("case #%d: expected lines, got nil", i) - } - if len(lines) != len(test.Expected) { - t.Fatalf("case #%d: expected %d lines, got %d", i, len(test.Expected), len(lines)) - } - for j, line := range lines { - if line != test.Expected[j] { - t.Errorf("case #%d: expected line #%d to be %s, got: %s", i, j, test.Expected[j], line) - } - } - } -} - -var bulkIndexRequestSerializationResult string - -func BenchmarkBulkIndexRequestSerialization(b *testing.B) { - b.Run("stdlib", func(b *testing.B) { - r := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1"). - Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}) - benchmarkBulkIndexRequestSerialization(b, r.UseEasyJSON(false)) - }) - b.Run("easyjson", func(b *testing.B) { - r := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1"). - Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}) - benchmarkBulkIndexRequestSerialization(b, r.UseEasyJSON(true)) - }) -} - -func benchmarkBulkIndexRequestSerialization(b *testing.B, r *BulkIndexRequest) { - var s string - for n := 0; n < b.N; n++ { - s = r.String() - r.source = nil // Don't let caching spoil the benchmark - } - bulkIndexRequestSerializationResult = s // ensure the compiler doesn't optimize - b.ReportAllocs() -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/bulk_processor.go b/vendor/gopkg.in/olivere/elastic.v5/bulk_processor.go index 6ee8a3dee..1b9263402 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/bulk_processor.go +++ b/vendor/gopkg.in/olivere/elastic.v5/bulk_processor.go @@ -122,7 +122,7 @@ func (s *BulkProcessorService) Stats(wantStats bool) *BulkProcessorService { return s } -// Backoff sets the backoff strategy to use for errors. +// Backoff sets the backoff strategy to use for errors func (s *BulkProcessorService) Backoff(backoff Backoff) *BulkProcessorService { s.backoff = backoff return s @@ -462,7 +462,6 @@ func (w *bulkWorker) work(ctx context.Context) { err = w.commit(ctx) } } - case <-w.flushC: // Commit outstanding requests if w.service.NumberOfActions() > 0 { diff --git a/vendor/gopkg.in/olivere/elastic.v5/bulk_processor_test.go b/vendor/gopkg.in/olivere/elastic.v5/bulk_processor_test.go deleted file mode 100644 index bb97ca217..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/bulk_processor_test.go +++ /dev/null @@ -1,425 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "fmt" - "math/rand" - "sync/atomic" - "testing" - "time" -) - -func TestBulkProcessorDefaults(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - p := client.BulkProcessor() - if p == nil { - t.Fatalf("expected BulkProcessorService; got: %v", p) - } - if got, want := p.name, ""; got != want { - t.Errorf("expected %q; got: %q", want, got) - } - if got, want := p.numWorkers, 1; got != want { - t.Errorf("expected %d; got: %d", want, got) - } - if got, want := p.bulkActions, 1000; got != want { - t.Errorf("expected %d; got: %d", want, got) - } - if got, want := p.bulkSize, 5*1024*1024; got != want { - t.Errorf("expected %d; got: %d", want, got) - } - if got, want := p.flushInterval, time.Duration(0); got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := p.wantStats, false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if p.backoff == nil { - t.Fatalf("expected non-nill backoff; got: %v", p.backoff) - } -} - -func TestBulkProcessorCommitOnBulkActions(t *testing.T) { - //client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - testBulkProcessor(t, - 10000, - client.BulkProcessor(). - Name("Actions-1"). - Workers(1). - BulkActions(100). - BulkSize(-1), - ) - - testBulkProcessor(t, - 10000, - client.BulkProcessor(). - Name("Actions-2"). - Workers(2). - BulkActions(100). - BulkSize(-1), - ) -} - -func TestBulkProcessorCommitOnBulkSize(t *testing.T) { - //client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - testBulkProcessor(t, - 10000, - client.BulkProcessor(). - Name("Size-1"). - Workers(1). - BulkActions(-1). - BulkSize(64*1024), - ) - - testBulkProcessor(t, - 10000, - client.BulkProcessor(). - Name("Size-2"). - Workers(2). - BulkActions(-1). - BulkSize(64*1024), - ) -} - -func TestBulkProcessorBasedOnFlushInterval(t *testing.T) { - //client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - var beforeRequests int64 - var befores int64 - var afters int64 - var failures int64 - var afterRequests int64 - - beforeFn := func(executionId int64, requests []BulkableRequest) { - atomic.AddInt64(&beforeRequests, int64(len(requests))) - atomic.AddInt64(&befores, 1) - } - afterFn := func(executionId int64, requests []BulkableRequest, response *BulkResponse, err error) { - atomic.AddInt64(&afters, 1) - if err != nil { - atomic.AddInt64(&failures, 1) - } - atomic.AddInt64(&afterRequests, int64(len(requests))) - } - - svc := client.BulkProcessor(). - Name("FlushInterval-1"). - Workers(2). - BulkActions(-1). - BulkSize(-1). - FlushInterval(1 * time.Second). - Before(beforeFn). - After(afterFn) - - p, err := svc.Do(context.Background()) - if err != nil { - t.Fatal(err) - } - - const numDocs = 1000 // low-enough number that flush should be invoked - - for i := 1; i <= numDocs; i++ { - tweet := tweet{User: "olivere", Message: fmt.Sprintf("%d. %s", i, randomString(rand.Intn(64)))} - request := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id(fmt.Sprintf("%d", i)).Doc(tweet) - p.Add(request) - } - - // Should flush at least once - time.Sleep(2 * time.Second) - - err = p.Close() - if err != nil { - t.Fatal(err) - } - - if p.stats.Flushed == 0 { - t.Errorf("expected at least 1 flush; got: %d", p.stats.Flushed) - } - if got, want := beforeRequests, int64(numDocs); got != want { - t.Errorf("expected %d requests to before callback; got: %d", want, got) - } - if got, want := afterRequests, int64(numDocs); got != want { - t.Errorf("expected %d requests to after callback; got: %d", want, got) - } - if befores == 0 { - t.Error("expected at least 1 call to before callback") - } - if afters == 0 { - t.Error("expected at least 1 call to after callback") - } - if failures != 0 { - t.Errorf("expected 0 calls to failure callback; got: %d", failures) - } - - // Check number of documents that were bulk indexed - _, err = p.c.Flush(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - count, err := p.c.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != int64(numDocs) { - t.Fatalf("expected %d documents; got: %d", numDocs, count) - } -} - -func TestBulkProcessorClose(t *testing.T) { - //client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - var beforeRequests int64 - var befores int64 - var afters int64 - var failures int64 - var afterRequests int64 - - beforeFn := func(executionId int64, requests []BulkableRequest) { - atomic.AddInt64(&beforeRequests, int64(len(requests))) - atomic.AddInt64(&befores, 1) - } - afterFn := func(executionId int64, requests []BulkableRequest, response *BulkResponse, err error) { - atomic.AddInt64(&afters, 1) - if err != nil { - atomic.AddInt64(&failures, 1) - } - atomic.AddInt64(&afterRequests, int64(len(requests))) - } - - p, err := client.BulkProcessor(). - Name("FlushInterval-1"). - Workers(2). - BulkActions(-1). - BulkSize(-1). - FlushInterval(30 * time.Second). // 30 seconds to flush - Before(beforeFn).After(afterFn). - Do(context.Background()) - if err != nil { - t.Fatal(err) - } - - const numDocs = 1000 // low-enough number that flush should be invoked - - for i := 1; i <= numDocs; i++ { - tweet := tweet{User: "olivere", Message: fmt.Sprintf("%d. %s", i, randomString(rand.Intn(64)))} - request := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id(fmt.Sprintf("%d", i)).Doc(tweet) - p.Add(request) - } - - // Should not flush because 30s > 1s - time.Sleep(1 * time.Second) - - // Close should flush - err = p.Close() - if err != nil { - t.Fatal(err) - } - - if p.stats.Flushed != 0 { - t.Errorf("expected no flush; got: %d", p.stats.Flushed) - } - if got, want := beforeRequests, int64(numDocs); got != want { - t.Errorf("expected %d requests to before callback; got: %d", want, got) - } - if got, want := afterRequests, int64(numDocs); got != want { - t.Errorf("expected %d requests to after callback; got: %d", want, got) - } - if befores == 0 { - t.Error("expected at least 1 call to before callback") - } - if afters == 0 { - t.Error("expected at least 1 call to after callback") - } - if failures != 0 { - t.Errorf("expected 0 calls to failure callback; got: %d", failures) - } - - // Check number of documents that were bulk indexed - _, err = p.c.Flush(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - count, err := p.c.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != int64(numDocs) { - t.Fatalf("expected %d documents; got: %d", numDocs, count) - } -} - -func TestBulkProcessorFlush(t *testing.T) { - //client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - p, err := client.BulkProcessor(). - Name("ManualFlush"). - Workers(10). - BulkActions(-1). - BulkSize(-1). - FlushInterval(30 * time.Second). // 30 seconds to flush - Stats(true). - Do(context.Background()) - if err != nil { - t.Fatal(err) - } - - const numDocs = 100 - - for i := 1; i <= numDocs; i++ { - tweet := tweet{User: "olivere", Message: fmt.Sprintf("%d. %s", i, randomString(rand.Intn(64)))} - request := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id(fmt.Sprintf("%d", i)).Doc(tweet) - p.Add(request) - } - - // Should not flush because 30s > 1s - time.Sleep(1 * time.Second) - - // No flush yet - stats := p.Stats() - if stats.Flushed != 0 { - t.Errorf("expected no flush; got: %d", p.stats.Flushed) - } - - // Manual flush - err = p.Flush() - if err != nil { - t.Fatal(err) - } - - time.Sleep(1 * time.Second) - - // Now flushed - stats = p.Stats() - if got, want := p.stats.Flushed, int64(1); got != want { - t.Errorf("expected %d flush; got: %d", want, got) - } - - // Close should not start another flush - err = p.Close() - if err != nil { - t.Fatal(err) - } - - // Still 1 flush - stats = p.Stats() - if got, want := p.stats.Flushed, int64(1); got != want { - t.Errorf("expected %d flush; got: %d", want, got) - } - - // Check number of documents that were bulk indexed - _, err = p.c.Flush(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - count, err := p.c.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != int64(numDocs) { - t.Fatalf("expected %d documents; got: %d", numDocs, count) - } -} - -// -- Helper -- - -func testBulkProcessor(t *testing.T, numDocs int, svc *BulkProcessorService) { - var beforeRequests int64 - var befores int64 - var afters int64 - var failures int64 - var afterRequests int64 - - beforeFn := func(executionId int64, requests []BulkableRequest) { - atomic.AddInt64(&beforeRequests, int64(len(requests))) - atomic.AddInt64(&befores, 1) - } - afterFn := func(executionId int64, requests []BulkableRequest, response *BulkResponse, err error) { - atomic.AddInt64(&afters, 1) - if err != nil { - atomic.AddInt64(&failures, 1) - } - atomic.AddInt64(&afterRequests, int64(len(requests))) - } - - p, err := svc.Before(beforeFn).After(afterFn).Stats(true).Do(context.Background()) - if err != nil { - t.Fatal(err) - } - - for i := 1; i <= numDocs; i++ { - tweet := tweet{User: "olivere", Message: fmt.Sprintf("%07d. %s", i, randomString(1+rand.Intn(63)))} - request := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id(fmt.Sprintf("%d", i)).Doc(tweet) - p.Add(request) - } - - err = p.Close() - if err != nil { - t.Fatal(err) - } - - stats := p.Stats() - - if stats.Flushed != 0 { - t.Errorf("expected no flush; got: %d", stats.Flushed) - } - if stats.Committed <= 0 { - t.Errorf("expected committed > %d; got: %d", 0, stats.Committed) - } - if got, want := stats.Indexed, int64(numDocs); got != want { - t.Errorf("expected indexed = %d; got: %d", want, got) - } - if got, want := stats.Created, int64(0); got != want { - t.Errorf("expected created = %d; got: %d", want, got) - } - if got, want := stats.Updated, int64(0); got != want { - t.Errorf("expected updated = %d; got: %d", want, got) - } - if got, want := stats.Deleted, int64(0); got != want { - t.Errorf("expected deleted = %d; got: %d", want, got) - } - if got, want := stats.Succeeded, int64(numDocs); got != want { - t.Errorf("expected succeeded = %d; got: %d", want, got) - } - if got, want := stats.Failed, int64(0); got != want { - t.Errorf("expected failed = %d; got: %d", want, got) - } - if got, want := beforeRequests, int64(numDocs); got != want { - t.Errorf("expected %d requests to before callback; got: %d", want, got) - } - if got, want := afterRequests, int64(numDocs); got != want { - t.Errorf("expected %d requests to after callback; got: %d", want, got) - } - if befores == 0 { - t.Error("expected at least 1 call to before callback") - } - if afters == 0 { - t.Error("expected at least 1 call to after callback") - } - if failures != 0 { - t.Errorf("expected 0 calls to failure callback; got: %d", failures) - } - - // Check number of documents that were bulk indexed - _, err = p.c.Flush(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - count, err := p.c.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != int64(numDocs) { - t.Fatalf("expected %d documents; got: %d", numDocs, count) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/bulk_test.go b/vendor/gopkg.in/olivere/elastic.v5/bulk_test.go deleted file mode 100644 index f31ed6613..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/bulk_test.go +++ /dev/null @@ -1,600 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "fmt" - "math/rand" - "net/http" - "net/http/httptest" - "testing" -) - -func TestBulk(t *testing.T) { - client := setupTestClientAndCreateIndex(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "sandrae", Message: "Dancing all night long. Yeah."} - - index1Req := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1").Doc(tweet1) - index2Req := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("2").Doc(tweet2) - delete1Req := NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1") - - bulkRequest := client.Bulk() - bulkRequest = bulkRequest.Add(index1Req) - bulkRequest = bulkRequest.Add(index2Req) - bulkRequest = bulkRequest.Add(delete1Req) - - if bulkRequest.NumberOfActions() != 3 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 3, bulkRequest.NumberOfActions()) - } - - bulkResponse, err := bulkRequest.Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if bulkResponse == nil { - t.Errorf("expected bulkResponse to be != nil; got nil") - } - - if bulkRequest.NumberOfActions() != 0 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 0, bulkRequest.NumberOfActions()) - } - - // Document with Id="1" should not exist - exists, err := client.Exists().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if exists { - t.Errorf("expected exists %v; got %v", false, exists) - } - - // Document with Id="2" should exist - exists, err = client.Exists().Index(testIndexName).Type("doc").Id("2").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !exists { - t.Errorf("expected exists %v; got %v", true, exists) - } - - // Update - updateDoc := struct { - Retweets int `json:"retweets"` - }{ - 42, - } - update1Req := NewBulkUpdateRequest().Index(testIndexName).Type("doc").Id("2").Doc(&updateDoc) - bulkRequest = client.Bulk() - bulkRequest = bulkRequest.Add(update1Req) - - if bulkRequest.NumberOfActions() != 1 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 1, bulkRequest.NumberOfActions()) - } - - bulkResponse, err = bulkRequest.Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if bulkResponse == nil { - t.Errorf("expected bulkResponse to be != nil; got nil") - } - - if bulkRequest.NumberOfActions() != 0 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 0, bulkRequest.NumberOfActions()) - } - - // Document with Id="1" should have a retweets count of 42 - doc, err := client.Get().Index(testIndexName).Type("doc").Id("2").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if doc == nil { - t.Fatal("expected doc to be != nil; got nil") - } - if !doc.Found { - t.Fatalf("expected doc to be found; got found = %v", doc.Found) - } - if doc.Source == nil { - t.Fatal("expected doc source to be != nil; got nil") - } - var updatedTweet tweet - err = json.Unmarshal(*doc.Source, &updatedTweet) - if err != nil { - t.Fatal(err) - } - if updatedTweet.Retweets != 42 { - t.Errorf("expected updated tweet retweets = %v; got %v", 42, updatedTweet.Retweets) - } - - // Update with script - update2Req := NewBulkUpdateRequest().Index(testIndexName).Type("doc").Id("2"). - RetryOnConflict(3). - Script(NewScript("ctx._source.retweets += params.v").Param("v", 1)) - bulkRequest = client.Bulk() - bulkRequest = bulkRequest.Add(update2Req) - if bulkRequest.NumberOfActions() != 1 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 1, bulkRequest.NumberOfActions()) - } - bulkResponse, err = bulkRequest.Refresh("wait_for").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if bulkResponse == nil { - t.Errorf("expected bulkResponse to be != nil; got nil") - } - - if bulkRequest.NumberOfActions() != 0 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 0, bulkRequest.NumberOfActions()) - } - - // Document with Id="1" should have a retweets count of 43 - doc, err = client.Get().Index(testIndexName).Type("doc").Id("2").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if doc == nil { - t.Fatal("expected doc to be != nil; got nil") - } - if !doc.Found { - t.Fatalf("expected doc to be found; got found = %v", doc.Found) - } - if doc.Source == nil { - t.Fatal("expected doc source to be != nil; got nil") - } - err = json.Unmarshal(*doc.Source, &updatedTweet) - if err != nil { - t.Fatal(err) - } - if updatedTweet.Retweets != 43 { - t.Errorf("expected updated tweet retweets = %v; got %v", 43, updatedTweet.Retweets) - } -} - -func TestBulkWithIndexSetOnClient(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "sandrae", Message: "Dancing all night long. Yeah."} - - index1Req := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1").Doc(tweet1).Routing("1") - index2Req := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("2").Doc(tweet2) - delete1Req := NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1") - - bulkRequest := client.Bulk().Index(testIndexName).Type("doc") - bulkRequest = bulkRequest.Add(index1Req) - bulkRequest = bulkRequest.Add(index2Req) - bulkRequest = bulkRequest.Add(delete1Req) - - if bulkRequest.NumberOfActions() != 3 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 3, bulkRequest.NumberOfActions()) - } - - bulkResponse, err := bulkRequest.Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if bulkResponse == nil { - t.Errorf("expected bulkResponse to be != nil; got nil") - } - - // Document with Id="1" should not exist - exists, err := client.Exists().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if exists { - t.Errorf("expected exists %v; got %v", false, exists) - } - - // Document with Id="2" should exist - exists, err = client.Exists().Index(testIndexName).Type("doc").Id("2").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !exists { - t.Errorf("expected exists %v; got %v", true, exists) - } -} - -func TestBulkIndexDeleteUpdate(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - //client := setupTestClientAndCreateIndexAndLog(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "sandrae", Message: "Dancing all night long. Yeah."} - - index1Req := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1").Doc(tweet1) - index2Req := NewBulkIndexRequest().OpType("create").Index(testIndexName).Type("doc").Id("2").Doc(tweet2) - delete1Req := NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1") - update2Req := NewBulkUpdateRequest().Index(testIndexName).Type("doc").Id("2"). - ReturnSource(true). - Doc(struct { - Retweets int `json:"retweets"` - }{ - Retweets: 42, - }) - - bulkRequest := client.Bulk() - bulkRequest = bulkRequest.Add(index1Req) - bulkRequest = bulkRequest.Add(index2Req) - bulkRequest = bulkRequest.Add(delete1Req) - bulkRequest = bulkRequest.Add(update2Req) - - if bulkRequest.NumberOfActions() != 4 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 4, bulkRequest.NumberOfActions()) - } - - expected := `{"index":{"_index":"` + testIndexName + `","_id":"1","_type":"doc"}} -{"user":"olivere","message":"Welcome to Golang and Elasticsearch.","retweets":0,"created":"0001-01-01T00:00:00Z"} -{"create":{"_index":"` + testIndexName + `","_id":"2","_type":"doc"}} -{"user":"sandrae","message":"Dancing all night long. Yeah.","retweets":0,"created":"0001-01-01T00:00:00Z"} -{"delete":{"_index":"` + testIndexName + `","_type":"doc","_id":"1"}} -{"update":{"_index":"` + testIndexName + `","_type":"doc","_id":"2"}} -{"doc":{"retweets":42},"_source":true} -` - got, err := bulkRequest.bodyAsString() - if err != nil { - t.Fatalf("expected no error, got: %v", err) - } - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } - - // Run the bulk request - bulkResponse, err := bulkRequest.Pretty(true).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if bulkResponse == nil { - t.Errorf("expected bulkResponse to be != nil; got nil") - } - if bulkResponse.Took == 0 { - t.Errorf("expected took to be > 0; got %d", bulkResponse.Took) - } - if bulkResponse.Errors { - t.Errorf("expected errors to be %v; got %v", false, bulkResponse.Errors) - } - if len(bulkResponse.Items) != 4 { - t.Fatalf("expected 4 result items; got %d", len(bulkResponse.Items)) - } - - // Indexed actions - indexed := bulkResponse.Indexed() - if indexed == nil { - t.Fatal("expected indexed to be != nil; got nil") - } - if len(indexed) != 1 { - t.Fatalf("expected len(indexed) == %d; got %d", 1, len(indexed)) - } - if indexed[0].Id != "1" { - t.Errorf("expected indexed[0].Id == %s; got %s", "1", indexed[0].Id) - } - if indexed[0].Status != 201 { - t.Errorf("expected indexed[0].Status == %d; got %d", 201, indexed[0].Status) - } - - // Created actions - created := bulkResponse.Created() - if created == nil { - t.Fatal("expected created to be != nil; got nil") - } - if len(created) != 1 { - t.Fatalf("expected len(created) == %d; got %d", 1, len(created)) - } - if created[0].Id != "2" { - t.Errorf("expected created[0].Id == %s; got %s", "2", created[0].Id) - } - if created[0].Status != 201 { - t.Errorf("expected created[0].Status == %d; got %d", 201, created[0].Status) - } - if want, have := "created", created[0].Result; want != have { - t.Errorf("expected created[0].Result == %q; got %q", want, have) - } - - // Deleted actions - deleted := bulkResponse.Deleted() - if deleted == nil { - t.Fatal("expected deleted to be != nil; got nil") - } - if len(deleted) != 1 { - t.Fatalf("expected len(deleted) == %d; got %d", 1, len(deleted)) - } - if deleted[0].Id != "1" { - t.Errorf("expected deleted[0].Id == %s; got %s", "1", deleted[0].Id) - } - if deleted[0].Status != 200 { - t.Errorf("expected deleted[0].Status == %d; got %d", 200, deleted[0].Status) - } - if want, have := "deleted", deleted[0].Result; want != have { - t.Errorf("expected deleted[0].Result == %q; got %q", want, have) - } - - // Updated actions - updated := bulkResponse.Updated() - if updated == nil { - t.Fatal("expected updated to be != nil; got nil") - } - if len(updated) != 1 { - t.Fatalf("expected len(updated) == %d; got %d", 1, len(updated)) - } - if updated[0].Id != "2" { - t.Errorf("expected updated[0].Id == %s; got %s", "2", updated[0].Id) - } - if updated[0].Status != 200 { - t.Errorf("expected updated[0].Status == %d; got %d", 200, updated[0].Status) - } - if updated[0].Version != 2 { - t.Errorf("expected updated[0].Version == %d; got %d", 2, updated[0].Version) - } - if want, have := "updated", updated[0].Result; want != have { - t.Errorf("expected updated[0].Result == %q; got %q", want, have) - } - if updated[0].GetResult == nil { - t.Fatalf("expected updated[0].GetResult to be != nil; got nil") - } - if updated[0].GetResult.Source == nil { - t.Fatalf("expected updated[0].GetResult.Source to be != nil; got nil") - } - if want, have := true, updated[0].GetResult.Found; want != have { - t.Fatalf("expected updated[0].GetResult.Found to be != %v; got %v", want, have) - } - var doc tweet - if err := json.Unmarshal(*updated[0].GetResult.Source, &doc); err != nil { - t.Fatalf("expected to unmarshal updated[0].GetResult.Source; got %v", err) - } - if want, have := 42, doc.Retweets; want != have { - t.Fatalf("expected updated tweet to have Retweets = %v; got %v", want, have) - } - - // Succeeded actions - succeeded := bulkResponse.Succeeded() - if succeeded == nil { - t.Fatal("expected succeeded to be != nil; got nil") - } - if len(succeeded) != 4 { - t.Fatalf("expected len(succeeded) == %d; got %d", 4, len(succeeded)) - } - - // ById - id1Results := bulkResponse.ById("1") - if id1Results == nil { - t.Fatal("expected id1Results to be != nil; got nil") - } - if len(id1Results) != 2 { - t.Fatalf("expected len(id1Results) == %d; got %d", 2, len(id1Results)) - } - if id1Results[0].Id != "1" { - t.Errorf("expected id1Results[0].Id == %s; got %s", "1", id1Results[0].Id) - } - if id1Results[0].Status != 201 { - t.Errorf("expected id1Results[0].Status == %d; got %d", 201, id1Results[0].Status) - } - if id1Results[0].Version != 1 { - t.Errorf("expected id1Results[0].Version == %d; got %d", 1, id1Results[0].Version) - } - if id1Results[1].Id != "1" { - t.Errorf("expected id1Results[1].Id == %s; got %s", "1", id1Results[1].Id) - } - if id1Results[1].Status != 200 { - t.Errorf("expected id1Results[1].Status == %d; got %d", 200, id1Results[1].Status) - } - if id1Results[1].Version != 2 { - t.Errorf("expected id1Results[1].Version == %d; got %d", 2, id1Results[1].Version) - } -} - -func TestFailedBulkRequests(t *testing.T) { - js := `{ - "took" : 2, - "errors" : true, - "items" : [ { - "index" : { - "_index" : "elastic-test", - "_type" : "doc", - "_id" : "1", - "_version" : 1, - "status" : 201 - } - }, { - "create" : { - "_index" : "elastic-test", - "_type" : "doc", - "_id" : "2", - "_version" : 1, - "status" : 423, - "error" : { - "type":"routing_missing_exception", - "reason":"routing is required for [elastic-test2]/[comment]/[1]" - } - } - }, { - "delete" : { - "_index" : "elastic-test", - "_type" : "doc", - "_id" : "1", - "_version" : 2, - "status" : 404, - "found" : false - } - }, { - "update" : { - "_index" : "elastic-test", - "_type" : "doc", - "_id" : "2", - "_version" : 2, - "status" : 200 - } - } ] -}` - - var resp BulkResponse - err := json.Unmarshal([]byte(js), &resp) - if err != nil { - t.Fatal(err) - } - failed := resp.Failed() - if len(failed) != 2 { - t.Errorf("expected %d failed items; got: %d", 2, len(failed)) - } -} - -func TestBulkEstimatedSizeInBytes(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "sandrae", Message: "Dancing all night long. Yeah."} - - index1Req := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1").Doc(tweet1) - index2Req := NewBulkIndexRequest().OpType("create").Index(testIndexName).Type("doc").Id("2").Doc(tweet2) - delete1Req := NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1") - update2Req := NewBulkUpdateRequest().Index(testIndexName).Type("doc").Id("2"). - Doc(struct { - Retweets int `json:"retweets"` - }{ - Retweets: 42, - }) - - bulkRequest := client.Bulk() - bulkRequest = bulkRequest.Add(index1Req) - bulkRequest = bulkRequest.Add(index2Req) - bulkRequest = bulkRequest.Add(delete1Req) - bulkRequest = bulkRequest.Add(update2Req) - - if bulkRequest.NumberOfActions() != 4 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 4, bulkRequest.NumberOfActions()) - } - - // The estimated size of the bulk request in bytes must be at least - // the length of the body request. - raw, err := bulkRequest.bodyAsString() - if err != nil { - t.Fatal(err) - } - rawlen := int64(len([]byte(raw))) - - if got, want := bulkRequest.EstimatedSizeInBytes(), rawlen; got < want { - t.Errorf("expected an EstimatedSizeInBytes = %d; got: %v", want, got) - } - - // Reset should also reset the calculated estimated byte size - bulkRequest.reset() - - if got, want := bulkRequest.EstimatedSizeInBytes(), int64(0); got != want { - t.Errorf("expected an EstimatedSizeInBytes = %d; got: %v", want, got) - } -} - -func TestBulkEstimateSizeInBytesLength(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - s := client.Bulk() - r := NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1") - s = s.Add(r) - if got, want := s.estimateSizeInBytes(r), int64(1+len(r.String())); got != want { - t.Fatalf("expected %d; got: %d", want, got) - } -} - -func TestBulkContentType(t *testing.T) { - var header http.Header - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - header = r.Header - fmt.Fprintln(w, `{}`) - })) - defer ts.Close() - - client, err := NewSimpleClient(SetURL(ts.URL)) - if err != nil { - t.Fatal(err) - } - indexReq := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1").Doc(tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."}) - if _, err := client.Bulk().Add(indexReq).Do(context.Background()); err != nil { - t.Fatal(err) - } - if header == nil { - t.Fatalf("expected header, got %v", header) - } - if want, have := "application/x-ndjson", header.Get("Content-Type"); want != have { - t.Fatalf("Content-Type: want %q, have %q", want, have) - } -} - -// -- Benchmarks -- - -var benchmarkBulkEstimatedSizeInBytes int64 - -func BenchmarkBulkEstimatedSizeInBytesWith1Request(b *testing.B) { - client := setupTestClientAndCreateIndex(b) - s := client.Bulk() - var result int64 - for n := 0; n < b.N; n++ { - s = s.Add(NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1").Doc(struct{ A string }{"1"})) - s = s.Add(NewBulkUpdateRequest().Index(testIndexName).Type("doc").Id("1").Doc(struct{ A string }{"2"})) - s = s.Add(NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1")) - result = s.EstimatedSizeInBytes() - s.reset() - } - b.ReportAllocs() - benchmarkBulkEstimatedSizeInBytes = result // ensure the compiler doesn't optimize -} - -func BenchmarkBulkEstimatedSizeInBytesWith100Requests(b *testing.B) { - client := setupTestClientAndCreateIndex(b) - s := client.Bulk() - var result int64 - for n := 0; n < b.N; n++ { - for i := 0; i < 100; i++ { - s = s.Add(NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1").Doc(struct{ A string }{"1"})) - s = s.Add(NewBulkUpdateRequest().Index(testIndexName).Type("doc").Id("1").Doc(struct{ A string }{"2"})) - s = s.Add(NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1")) - } - result = s.EstimatedSizeInBytes() - s.reset() - } - b.ReportAllocs() - benchmarkBulkEstimatedSizeInBytes = result // ensure the compiler doesn't optimize -} - -func BenchmarkBulkAllocs(b *testing.B) { - b.Run("1000 docs with 64 byte", func(b *testing.B) { benchmarkBulkAllocs(b, 64, 1000) }) - b.Run("1000 docs with 1 KiB", func(b *testing.B) { benchmarkBulkAllocs(b, 1024, 1000) }) - b.Run("1000 docs with 4 KiB", func(b *testing.B) { benchmarkBulkAllocs(b, 4096, 1000) }) - b.Run("1000 docs with 16 KiB", func(b *testing.B) { benchmarkBulkAllocs(b, 16*1024, 1000) }) - b.Run("1000 docs with 64 KiB", func(b *testing.B) { benchmarkBulkAllocs(b, 64*1024, 1000) }) - b.Run("1000 docs with 256 KiB", func(b *testing.B) { benchmarkBulkAllocs(b, 256*1024, 1000) }) - b.Run("1000 docs with 1 MiB", func(b *testing.B) { benchmarkBulkAllocs(b, 1024*1024, 1000) }) -} - -const ( - charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-" -) - -func benchmarkBulkAllocs(b *testing.B, size, num int) { - buf := make([]byte, size) - for i := range buf { - buf[i] = charset[rand.Intn(len(charset))] - } - - s := &BulkService{} - n := 0 - for { - n++ - s = s.Add(NewBulkIndexRequest().Index("test").Type("doc").Id("1").Doc(struct { - S string `json:"s"` - }{ - S: string(buf), - })) - if n >= num { - break - } - } - for i := 0; i < b.N; i++ { - s.bodyAsString() - } - b.ReportAllocs() -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/bulk_update_request.go b/vendor/gopkg.in/olivere/elastic.v5/bulk_update_request.go index 50e5adb8f..bd05211b1 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/bulk_update_request.go +++ b/vendor/gopkg.in/olivere/elastic.v5/bulk_update_request.go @@ -14,7 +14,7 @@ import ( // BulkUpdateRequest is a request to update a document in Elasticsearch. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-bulk.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-bulk.html // for details. type BulkUpdateRequest struct { BulkableRequest @@ -45,15 +45,14 @@ type bulkUpdateRequestCommand map[string]bulkUpdateRequestCommandOp //easyjson:json type bulkUpdateRequestCommandOp struct { - Index string `json:"_index,omitempty"` - Type string `json:"_type,omitempty"` - Id string `json:"_id,omitempty"` - Parent string `json:"parent,omitempty"` - // RetryOnConflict is "_retry_on_conflict" for 6.0 and "retry_on_conflict" for 6.1+. - RetryOnConflict *int `json:"retry_on_conflict,omitempty"` - Routing string `json:"routing,omitempty"` - Version int64 `json:"version,omitempty"` - VersionType string `json:"version_type,omitempty"` + Id string `json:"_id,omitempty"` + Index string `json:"_index,omitempty"` + Type string `json:"_type,omitempty"` + Parent string `json:"_parent,omitempty"` + RetryOnConflict *int `json:"_retry_on_conflict,omitempty"` + Routing string `json:"_routing,omitempty"` + Version int64 `json:"_version,omitempty"` + VersionType string `json:"_version_type,omitempty"` } //easyjson:json @@ -61,9 +60,9 @@ type bulkUpdateRequestCommandData struct { DetectNoop *bool `json:"detect_noop,omitempty"` Doc interface{} `json:"doc,omitempty"` DocAsUpsert *bool `json:"doc_as_upsert,omitempty"` + Upsert interface{} `json:"upsert,omitempty"` Script interface{} `json:"script,omitempty"` ScriptedUpsert *bool `json:"scripted_upsert,omitempty"` - Upsert interface{} `json:"upsert,omitempty"` Source *bool `json:"_source,omitempty"` } @@ -120,8 +119,8 @@ func (r *BulkUpdateRequest) Parent(parent string) *BulkUpdateRequest { } // Script specifies an update script. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-bulk.html#bulk-update -// and https://www.elastic.co/guide/en/elasticsearch/reference/6.0/modules-scripting.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-bulk.html#bulk-update +// and https://www.elastic.co/guide/en/elasticsearch/reference/5.2/modules-scripting.html // for details. func (r *BulkUpdateRequest) Script(script *Script) *BulkUpdateRequest { r.script = script @@ -132,7 +131,7 @@ func (r *BulkUpdateRequest) Script(script *Script) *BulkUpdateRequest { // ScripedUpsert specifies if your script will run regardless of // whether the document exists or not. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-update.html#_literal_scripted_upsert_literal +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-update.html#_literal_scripted_upsert_literal func (r *BulkUpdateRequest) ScriptedUpsert(upsert bool) *BulkUpdateRequest { r.scriptedUpsert = &upsert r.source = nil @@ -155,7 +154,7 @@ func (r *BulkUpdateRequest) Version(version int64) *BulkUpdateRequest { } // VersionType can be "internal" (default), "external", "external_gte", -// or "external_gt". +// "external_gt", or "force". func (r *BulkUpdateRequest) VersionType(versionType string) *BulkUpdateRequest { r.versionType = versionType r.source = nil @@ -172,7 +171,7 @@ func (r *BulkUpdateRequest) Doc(doc interface{}) *BulkUpdateRequest { // DocAsUpsert indicates whether the contents of Doc should be used as // the Upsert value. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-update.html#_literal_doc_as_upsert_literal +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-update.html#_literal_doc_as_upsert_literal // for details. func (r *BulkUpdateRequest) DocAsUpsert(docAsUpsert bool) *BulkUpdateRequest { r.docAsUpsert = &docAsUpsert @@ -218,7 +217,7 @@ func (r *BulkUpdateRequest) String() string { // Source returns the on-wire representation of the update request, // split into an action-and-meta-data line and an (optional) source line. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-bulk.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-bulk.html // for details. func (r *BulkUpdateRequest) Source() ([]string, error) { // { "update" : { "_index" : "test", "_type" : "type1", "_id" : "1", ... } } diff --git a/vendor/gopkg.in/olivere/elastic.v5/bulk_update_request_easyjson.go b/vendor/gopkg.in/olivere/elastic.v5/bulk_update_request_easyjson.go index d2c2cbfc7..1edd4c127 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/bulk_update_request_easyjson.go +++ b/vendor/gopkg.in/olivere/elastic.v5/bulk_update_request_easyjson.go @@ -17,7 +17,7 @@ var ( _ easyjson.Marshaler ) -func easyjson1ed00e60DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkUpdateRequestCommandOp) { +func easyjson1ed00e60DecodeGopkgInOlivereElasticV5(in *jlexer.Lexer, out *bulkUpdateRequestCommandOp) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -36,15 +36,15 @@ func easyjson1ed00e60DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkUp continue } switch key { + case "_id": + out.Id = string(in.String()) case "_index": out.Index = string(in.String()) case "_type": out.Type = string(in.String()) - case "_id": - out.Id = string(in.String()) - case "parent": + case "_parent": out.Parent = string(in.String()) - case "retry_on_conflict": + case "_retry_on_conflict": if in.IsNull() { in.Skip() out.RetryOnConflict = nil @@ -54,11 +54,11 @@ func easyjson1ed00e60DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkUp } *out.RetryOnConflict = int(in.Int()) } - case "routing": + case "_routing": out.Routing = string(in.String()) - case "version": + case "_version": out.Version = int64(in.Int64()) - case "version_type": + case "_version_type": out.VersionType = string(in.String()) default: in.SkipRecursive() @@ -70,42 +70,42 @@ func easyjson1ed00e60DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkUp in.Consumed() } } -func easyjson1ed00e60EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkUpdateRequestCommandOp) { +func easyjson1ed00e60EncodeGopkgInOlivereElasticV5(out *jwriter.Writer, in bulkUpdateRequestCommandOp) { out.RawByte('{') first := true _ = first - if in.Index != "" { - const prefix string = ",\"_index\":" + if in.Id != "" { + const prefix string = ",\"_id\":" if first { first = false out.RawString(prefix[1:]) } else { out.RawString(prefix) } - out.String(string(in.Index)) + out.String(string(in.Id)) } - if in.Type != "" { - const prefix string = ",\"_type\":" + if in.Index != "" { + const prefix string = ",\"_index\":" if first { first = false out.RawString(prefix[1:]) } else { out.RawString(prefix) } - out.String(string(in.Type)) + out.String(string(in.Index)) } - if in.Id != "" { - const prefix string = ",\"_id\":" + if in.Type != "" { + const prefix string = ",\"_type\":" if first { first = false out.RawString(prefix[1:]) } else { out.RawString(prefix) } - out.String(string(in.Id)) + out.String(string(in.Type)) } if in.Parent != "" { - const prefix string = ",\"parent\":" + const prefix string = ",\"_parent\":" if first { first = false out.RawString(prefix[1:]) @@ -115,7 +115,7 @@ func easyjson1ed00e60EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkU out.String(string(in.Parent)) } if in.RetryOnConflict != nil { - const prefix string = ",\"retry_on_conflict\":" + const prefix string = ",\"_retry_on_conflict\":" if first { first = false out.RawString(prefix[1:]) @@ -125,7 +125,7 @@ func easyjson1ed00e60EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkU out.Int(int(*in.RetryOnConflict)) } if in.Routing != "" { - const prefix string = ",\"routing\":" + const prefix string = ",\"_routing\":" if first { first = false out.RawString(prefix[1:]) @@ -135,7 +135,7 @@ func easyjson1ed00e60EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkU out.String(string(in.Routing)) } if in.Version != 0 { - const prefix string = ",\"version\":" + const prefix string = ",\"_version\":" if first { first = false out.RawString(prefix[1:]) @@ -145,7 +145,7 @@ func easyjson1ed00e60EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkU out.Int64(int64(in.Version)) } if in.VersionType != "" { - const prefix string = ",\"version_type\":" + const prefix string = ",\"_version_type\":" if first { first = false out.RawString(prefix[1:]) @@ -160,27 +160,27 @@ func easyjson1ed00e60EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkU // MarshalJSON supports json.Marshaler interface func (v bulkUpdateRequestCommandOp) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson1ed00e60EncodeGithubComOlivereElastic(&w, v) + easyjson1ed00e60EncodeGopkgInOlivereElasticV5(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v bulkUpdateRequestCommandOp) MarshalEasyJSON(w *jwriter.Writer) { - easyjson1ed00e60EncodeGithubComOlivereElastic(w, v) + easyjson1ed00e60EncodeGopkgInOlivereElasticV5(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *bulkUpdateRequestCommandOp) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson1ed00e60DecodeGithubComOlivereElastic(&r, v) + easyjson1ed00e60DecodeGopkgInOlivereElasticV5(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *bulkUpdateRequestCommandOp) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson1ed00e60DecodeGithubComOlivereElastic(l, v) + easyjson1ed00e60DecodeGopkgInOlivereElasticV5(l, v) } -func easyjson1ed00e60DecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkUpdateRequestCommandData) { +func easyjson1ed00e60DecodeGopkgInOlivereElasticV51(in *jlexer.Lexer, out *bulkUpdateRequestCommandData) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -227,6 +227,14 @@ func easyjson1ed00e60DecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkU } *out.DocAsUpsert = bool(in.Bool()) } + case "upsert": + if m, ok := out.Upsert.(easyjson.Unmarshaler); ok { + m.UnmarshalEasyJSON(in) + } else if m, ok := out.Upsert.(json.Unmarshaler); ok { + _ = m.UnmarshalJSON(in.Raw()) + } else { + out.Upsert = in.Interface() + } case "script": if m, ok := out.Script.(easyjson.Unmarshaler); ok { m.UnmarshalEasyJSON(in) @@ -245,14 +253,6 @@ func easyjson1ed00e60DecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkU } *out.ScriptedUpsert = bool(in.Bool()) } - case "upsert": - if m, ok := out.Upsert.(easyjson.Unmarshaler); ok { - m.UnmarshalEasyJSON(in) - } else if m, ok := out.Upsert.(json.Unmarshaler); ok { - _ = m.UnmarshalJSON(in.Raw()) - } else { - out.Upsert = in.Interface() - } case "_source": if in.IsNull() { in.Skip() @@ -273,7 +273,7 @@ func easyjson1ed00e60DecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkU in.Consumed() } } -func easyjson1ed00e60EncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulkUpdateRequestCommandData) { +func easyjson1ed00e60EncodeGopkgInOlivereElasticV51(out *jwriter.Writer, in bulkUpdateRequestCommandData) { out.RawByte('{') first := true _ = first @@ -313,6 +313,22 @@ func easyjson1ed00e60EncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulk } out.Bool(bool(*in.DocAsUpsert)) } + if in.Upsert != nil { + const prefix string = ",\"upsert\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + if m, ok := in.Upsert.(easyjson.Marshaler); ok { + m.MarshalEasyJSON(out) + } else if m, ok := in.Upsert.(json.Marshaler); ok { + out.Raw(m.MarshalJSON()) + } else { + out.Raw(json.Marshal(in.Upsert)) + } + } if in.Script != nil { const prefix string = ",\"script\":" if first { @@ -339,22 +355,6 @@ func easyjson1ed00e60EncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulk } out.Bool(bool(*in.ScriptedUpsert)) } - if in.Upsert != nil { - const prefix string = ",\"upsert\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } - if m, ok := in.Upsert.(easyjson.Marshaler); ok { - m.MarshalEasyJSON(out) - } else if m, ok := in.Upsert.(json.Marshaler); ok { - out.Raw(m.MarshalJSON()) - } else { - out.Raw(json.Marshal(in.Upsert)) - } - } if in.Source != nil { const prefix string = ",\"_source\":" if first { @@ -371,27 +371,27 @@ func easyjson1ed00e60EncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulk // MarshalJSON supports json.Marshaler interface func (v bulkUpdateRequestCommandData) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson1ed00e60EncodeGithubComOlivereElastic1(&w, v) + easyjson1ed00e60EncodeGopkgInOlivereElasticV51(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v bulkUpdateRequestCommandData) MarshalEasyJSON(w *jwriter.Writer) { - easyjson1ed00e60EncodeGithubComOlivereElastic1(w, v) + easyjson1ed00e60EncodeGopkgInOlivereElasticV51(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *bulkUpdateRequestCommandData) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson1ed00e60DecodeGithubComOlivereElastic1(&r, v) + easyjson1ed00e60DecodeGopkgInOlivereElasticV51(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *bulkUpdateRequestCommandData) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson1ed00e60DecodeGithubComOlivereElastic1(l, v) + easyjson1ed00e60DecodeGopkgInOlivereElasticV51(l, v) } -func easyjson1ed00e60DecodeGithubComOlivereElastic2(in *jlexer.Lexer, out *bulkUpdateRequestCommand) { +func easyjson1ed00e60DecodeGopkgInOlivereElasticV52(in *jlexer.Lexer, out *bulkUpdateRequestCommand) { isTopLevel := in.IsStart() if in.IsNull() { in.Skip() @@ -416,7 +416,7 @@ func easyjson1ed00e60DecodeGithubComOlivereElastic2(in *jlexer.Lexer, out *bulkU in.Consumed() } } -func easyjson1ed00e60EncodeGithubComOlivereElastic2(out *jwriter.Writer, in bulkUpdateRequestCommand) { +func easyjson1ed00e60EncodeGopkgInOlivereElasticV52(out *jwriter.Writer, in bulkUpdateRequestCommand) { if in == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 { out.RawString(`null`) } else { @@ -439,23 +439,23 @@ func easyjson1ed00e60EncodeGithubComOlivereElastic2(out *jwriter.Writer, in bulk // MarshalJSON supports json.Marshaler interface func (v bulkUpdateRequestCommand) MarshalJSON() ([]byte, error) { w := jwriter.Writer{} - easyjson1ed00e60EncodeGithubComOlivereElastic2(&w, v) + easyjson1ed00e60EncodeGopkgInOlivereElasticV52(&w, v) return w.Buffer.BuildBytes(), w.Error } // MarshalEasyJSON supports easyjson.Marshaler interface func (v bulkUpdateRequestCommand) MarshalEasyJSON(w *jwriter.Writer) { - easyjson1ed00e60EncodeGithubComOlivereElastic2(w, v) + easyjson1ed00e60EncodeGopkgInOlivereElasticV52(w, v) } // UnmarshalJSON supports json.Unmarshaler interface func (v *bulkUpdateRequestCommand) UnmarshalJSON(data []byte) error { r := jlexer.Lexer{Data: data} - easyjson1ed00e60DecodeGithubComOlivereElastic2(&r, v) + easyjson1ed00e60DecodeGopkgInOlivereElasticV52(&r, v) return r.Error() } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *bulkUpdateRequestCommand) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjson1ed00e60DecodeGithubComOlivereElastic2(l, v) + easyjson1ed00e60DecodeGopkgInOlivereElasticV52(l, v) } diff --git a/vendor/gopkg.in/olivere/elastic.v5/bulk_update_request_test.go b/vendor/gopkg.in/olivere/elastic.v5/bulk_update_request_test.go deleted file mode 100644 index 53e73bd40..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/bulk_update_request_test.go +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestBulkUpdateRequestSerialization(t *testing.T) { - tests := []struct { - Request BulkableRequest - Expected []string - }{ - // #0 - { - Request: NewBulkUpdateRequest().Index("index1").Type("doc").Id("1").Doc(struct { - Counter int64 `json:"counter"` - }{ - Counter: 42, - }), - Expected: []string{ - `{"update":{"_index":"index1","_type":"doc","_id":"1"}}`, - `{"doc":{"counter":42}}`, - }, - }, - // #1 - { - Request: NewBulkUpdateRequest().Index("index1").Type("doc").Id("1"). - Routing("123"). - RetryOnConflict(3). - DocAsUpsert(true). - Doc(struct { - Counter int64 `json:"counter"` - }{ - Counter: 42, - }), - Expected: []string{ - `{"update":{"_index":"index1","_type":"doc","_id":"1","retry_on_conflict":3,"routing":"123"}}`, - `{"doc":{"counter":42},"doc_as_upsert":true}`, - }, - }, - // #2 - { - Request: NewBulkUpdateRequest().Index("index1").Type("doc").Id("1"). - RetryOnConflict(3). - Script(NewScript(`ctx._source.retweets += param1`).Lang("javascript").Param("param1", 42)). - Upsert(struct { - Counter int64 `json:"counter"` - }{ - Counter: 42, - }), - Expected: []string{ - `{"update":{"_index":"index1","_type":"doc","_id":"1","retry_on_conflict":3}}`, - `{"script":{"lang":"javascript","params":{"param1":42},"source":"ctx._source.retweets += param1"},"upsert":{"counter":42}}`, - }, - }, - // #3 - { - Request: NewBulkUpdateRequest().Index("index1").Type("doc").Id("1").DetectNoop(true).Doc(struct { - Counter int64 `json:"counter"` - }{ - Counter: 42, - }), - Expected: []string{ - `{"update":{"_index":"index1","_type":"doc","_id":"1"}}`, - `{"detect_noop":true,"doc":{"counter":42}}`, - }, - }, - // #4 - { - Request: NewBulkUpdateRequest().Index("index1").Type("doc").Id("1"). - RetryOnConflict(3). - ScriptedUpsert(true). - Script(NewScript(`ctx._source.retweets += param1`).Lang("javascript").Param("param1", 42)). - Upsert(struct { - Counter int64 `json:"counter"` - }{ - Counter: 42, - }), - Expected: []string{ - `{"update":{"_index":"index1","_type":"doc","_id":"1","retry_on_conflict":3}}`, - `{"script":{"lang":"javascript","params":{"param1":42},"source":"ctx._source.retweets += param1"},"scripted_upsert":true,"upsert":{"counter":42}}`, - }, - }, - // #5 - { - Request: NewBulkUpdateRequest().Index("index1").Type("doc").Id("4").ReturnSource(true).Doc(struct { - Counter int64 `json:"counter"` - }{ - Counter: 42, - }), - Expected: []string{ - `{"update":{"_index":"index1","_type":"doc","_id":"4"}}`, - `{"doc":{"counter":42},"_source":true}`, - }, - }, - } - - for i, test := range tests { - lines, err := test.Request.Source() - if err != nil { - t.Fatalf("#%d: expected no error, got: %v", i, err) - } - if lines == nil { - t.Fatalf("#%d: expected lines, got nil", i) - } - if len(lines) != len(test.Expected) { - t.Fatalf("#%d: expected %d lines, got %d", i, len(test.Expected), len(lines)) - } - for j, line := range lines { - if line != test.Expected[j] { - t.Errorf("#%d: expected line #%d to be\n%s\nbut got:\n%s", i, j, test.Expected[j], line) - } - } - } -} - -var bulkUpdateRequestSerializationResult string - -func BenchmarkBulkUpdateRequestSerialization(b *testing.B) { - b.Run("stdlib", func(b *testing.B) { - r := NewBulkUpdateRequest().Index("index1").Type("doc").Id("1").Doc(struct { - Counter int64 `json:"counter"` - }{ - Counter: 42, - }) - benchmarkBulkUpdateRequestSerialization(b, r.UseEasyJSON(false)) - }) - b.Run("easyjson", func(b *testing.B) { - r := NewBulkUpdateRequest().Index("index1").Type("doc").Id("1").Doc(struct { - Counter int64 `json:"counter"` - }{ - Counter: 42, - }).UseEasyJSON(false) - benchmarkBulkUpdateRequestSerialization(b, r.UseEasyJSON(true)) - }) -} - -func benchmarkBulkUpdateRequestSerialization(b *testing.B, r *BulkUpdateRequest) { - var s string - for n := 0; n < b.N; n++ { - s = r.String() - r.source = nil // Don't let caching spoil the benchmark - } - bulkUpdateRequestSerializationResult = s // ensure the compiler doesn't optimize - b.ReportAllocs() -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/canonicalize_test.go b/vendor/gopkg.in/olivere/elastic.v5/canonicalize_test.go deleted file mode 100644 index 86b62d498..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/canonicalize_test.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestCanonicalize(t *testing.T) { - tests := []struct { - Input []string - Output []string - }{ - // #0 - { - Input: []string{"http://127.0.0.1/"}, - Output: []string{"http://127.0.0.1"}, - }, - // #1 - { - Input: []string{"http://127.0.0.1:9200/", "gopher://golang.org/", "http://127.0.0.1:9201"}, - Output: []string{"http://127.0.0.1:9200", "http://127.0.0.1:9201"}, - }, - // #2 - { - Input: []string{"http://user:secret@127.0.0.1/path?query=1#fragment"}, - Output: []string{"http://user:secret@127.0.0.1/path"}, - }, - // #3 - { - Input: []string{"https://somewhere.on.mars:9999/path?query=1#fragment"}, - Output: []string{"https://somewhere.on.mars:9999/path"}, - }, - // #4 - { - Input: []string{"https://prod1:9999/one?query=1#fragment", "https://prod2:9998/two?query=1#fragment"}, - Output: []string{"https://prod1:9999/one", "https://prod2:9998/two"}, - }, - // #5 - { - Input: []string{"http://127.0.0.1/one/"}, - Output: []string{"http://127.0.0.1/one"}, - }, - // #6 - { - Input: []string{"http://127.0.0.1/one///"}, - Output: []string{"http://127.0.0.1/one"}, - }, - // #7: Invalid URL - { - Input: []string{"127.0.0.1/"}, - Output: []string{}, - }, - // #8: Invalid URL - { - Input: []string{"127.0.0.1:9200"}, - Output: []string{}, - }, - } - - for i, test := range tests { - got := canonicalize(test.Input...) - if want, have := len(test.Output), len(got); want != have { - t.Fatalf("#%d: expected %d elements; got: %d", i, want, have) - } - for i := 0; i < len(got); i++ { - if want, have := test.Output[i], got[i]; want != have { - t.Errorf("#%d: expected %q; got: %q", i, want, have) - } - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/clear_scroll.go b/vendor/gopkg.in/olivere/elastic.v5/clear_scroll.go index 4f449504c..83e592875 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/clear_scroll.go +++ b/vendor/gopkg.in/olivere/elastic.v5/clear_scroll.go @@ -12,7 +12,7 @@ import ( // ClearScrollService clears one or more scroll contexts by their ids. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-scroll.html#_clear_scroll_api +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-request-scroll.html#_clear_scroll_api // for details. type ClearScrollService struct { client *Client @@ -49,7 +49,7 @@ func (s *ClearScrollService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } return path, params, nil } @@ -85,12 +85,7 @@ func (s *ClearScrollService) Do(ctx context.Context) (*ClearScrollResponse, erro } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "DELETE", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "DELETE", path, params, body) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/clear_scroll_test.go b/vendor/gopkg.in/olivere/elastic.v5/clear_scroll_test.go deleted file mode 100644 index 4037d3cd6..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/clear_scroll_test.go +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - _ "net/http" - "testing" -) - -func TestClearScroll(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - // client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - res, err := client.Scroll(testIndexName).Size(1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected results != nil; got nil") - } - if res.ScrollId == "" { - t.Fatalf("expected scrollId in results; got %q", res.ScrollId) - } - - // Search should succeed - _, err = client.Scroll(testIndexName).Size(1).ScrollId(res.ScrollId).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Clear scroll id - clearScrollRes, err := client.ClearScroll().ScrollId(res.ScrollId).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if clearScrollRes == nil { - t.Fatal("expected results != nil; got nil") - } - - // Search result should fail - _, err = client.Scroll(testIndexName).Size(1).ScrollId(res.ScrollId).Do(context.TODO()) - if err == nil { - t.Fatalf("expected scroll to fail") - } -} - -func TestClearScrollValidate(t *testing.T) { - client := setupTestClient(t) - - // No scroll id -> fail with error - res, err := NewClearScrollService(client).Do(context.TODO()) - if err == nil { - t.Fatalf("expected ClearScroll to fail without scroll ids") - } - if res != nil { - t.Fatalf("expected result to be nil; got: %v", res) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/client.go b/vendor/gopkg.in/olivere/elastic.v5/client.go index 165a30526..e709b0bf4 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/client.go +++ b/vendor/gopkg.in/olivere/elastic.v5/client.go @@ -21,12 +21,12 @@ import ( "github.com/pkg/errors" - "github.com/olivere/elastic/config" + "gopkg.in/olivere/elastic.v5/config" ) const ( // Version is the current version of Elastic. - Version = "6.1.7" + Version = "5.0.66" // DefaultURL is the default endpoint of Elasticsearch on the local machine. // It is used e.g. when initializing a new Client without a specific URL. @@ -76,6 +76,9 @@ const ( // a GET request with a body. DefaultSendGetBodyAs = "GET" + // DefaultGzipEnabled specifies if gzip compression is enabled by default. + DefaultGzipEnabled = false + // off is used to disable timeouts. off = -1 * time.Second ) @@ -132,6 +135,7 @@ type Client struct { basicAuthPassword string // password for HTTP Basic Auth sendGetBodyAs string // override for when sending a GET with a body requiredPlugins []string // list of required plugins + gzipEnabled bool // gzip compression enabled or disabled (default) retrier Retrier // strategy for retries } @@ -154,7 +158,7 @@ type Client struct { // // If the sniffer is enabled (the default), the new client then sniffes // the cluster via the Nodes Info API -// (see https://www.elastic.co/guide/en/elasticsearch/reference/6.0/cluster-nodes-info.html#cluster-nodes-info). +// (see https://www.elastic.co/guide/en/elasticsearch/reference/5.2/cluster-nodes-info.html#cluster-nodes-info). // It uses the URLs specified by the caller. The caller is responsible // to only pass a list of URLs of nodes that belong to the same cluster. // This sniffing process is run on startup and periodically. @@ -205,6 +209,7 @@ func NewClient(options ...ClientOptionFunc) (*Client, error) { snifferCallback: nopSnifferCallback, snifferStop: make(chan bool), sendGetBodyAs: DefaultSendGetBodyAs, + gzipEnabled: DefaultGzipEnabled, retrier: noRetries, // no retries by default } @@ -362,6 +367,7 @@ func NewSimpleClient(options ...ClientOptionFunc) (*Client, error) { snifferCallback: nopSnifferCallback, snifferStop: make(chan bool), sendGetBodyAs: DefaultSendGetBodyAs, + gzipEnabled: DefaultGzipEnabled, retrier: noRetries, // no retries by default } @@ -590,6 +596,14 @@ func SetMaxRetries(maxRetries int) ClientOptionFunc { } } +// SetGzip enables or disables gzip compression (disabled by default). +func SetGzip(enabled bool) ClientOptionFunc { + return func(c *Client) error { + c.gzipEnabled = enabled + return nil + } +} + // SetDecoder sets the Decoder to use when decoding data from Elasticsearch. // DefaultDecoder is used by default. func SetDecoder(decoder Decoder) ClientOptionFunc { @@ -1075,11 +1089,6 @@ func (c *Client) startupHealthcheck(timeout time.Duration) error { var lastErr error start := time.Now() for { - // Make a copy of the HTTP client provided via options to respect - // settings like Basic Auth or a user-specified http.Transport. - cl := new(http.Client) - *cl = *c.c - cl.Timeout = timeout for _, url := range urls { req, err := http.NewRequest("HEAD", url, nil) if err != nil { @@ -1088,7 +1097,10 @@ func (c *Client) startupHealthcheck(timeout time.Duration) error { if basicAuth { req.SetBasicAuth(basicAuthUsername, basicAuthPassword) } - res, err := cl.Do(req) + ctx, cancel := context.WithTimeout(req.Context(), timeout) + defer cancel() + req = req.WithContext(ctx) + res, err := c.c.Do(req) if err == nil && res != nil && res.StatusCode >= 200 && res.StatusCode < 300 { return nil } else if err != nil { @@ -1096,7 +1108,7 @@ func (c *Client) startupHealthcheck(timeout time.Duration) error { } } time.Sleep(1 * time.Second) - if time.Now().Sub(start) > timeout { + if time.Since(start) > timeout { break } } @@ -1173,12 +1185,38 @@ type PerformRequestOptions struct { } // PerformRequest does a HTTP request to Elasticsearch. +// See PerformRequestWithContentType for details. +func (c *Client) PerformRequest(ctx context.Context, method, path string, params url.Values, body interface{}, ignoreErrors ...int) (*Response, error) { + return c.PerformRequestWithOptions(ctx, PerformRequestOptions{ + Method: method, + Path: path, + Params: params, + Body: body, + ContentType: "application/json", + IgnoreErrors: ignoreErrors, + }) +} + +// PerformRequestWithContentType executes a HTTP request with a specific content type. // It returns a response (which might be nil) and an error on failure. // // Optionally, a list of HTTP error codes to ignore can be passed. // This is necessary for services that expect e.g. HTTP status 404 as a // valid outcome (Exists, IndicesExists, IndicesTypeExists). -func (c *Client) PerformRequest(ctx context.Context, opt PerformRequestOptions) (*Response, error) { +func (c *Client) PerformRequestWithContentType(ctx context.Context, method, path string, params url.Values, body interface{}, contentType string, ignoreErrors ...int) (*Response, error) { + return c.PerformRequestWithOptions(ctx, PerformRequestOptions{ + Method: method, + Path: path, + Params: params, + Body: body, + ContentType: contentType, + IgnoreErrors: ignoreErrors, + }) +} + +// PerformRequestWithOptions executes a HTTP request with the specified options. +// It returns a response (which might be nil) and an error on failure. +func (c *Client) PerformRequestWithOptions(ctx context.Context, opt PerformRequestOptions) (*Response, error) { start := time.Now().UTC() c.mu.RLock() @@ -1187,6 +1225,7 @@ func (c *Client) PerformRequest(ctx context.Context, opt PerformRequestOptions) basicAuthUsername := c.basicAuthUsername basicAuthPassword := c.basicAuthPassword sendGetBodyAs := c.sendGetBodyAs + gzipEnabled := c.gzipEnabled retrier := c.retrier if opt.Retrier != nil { retrier = opt.Retrier @@ -1250,7 +1289,7 @@ func (c *Client) PerformRequest(ctx context.Context, opt PerformRequestOptions) // Set body if opt.Body != nil { - err = req.SetBody(opt.Body) + err = req.SetBody(opt.Body, gzipEnabled) if err != nil { c.errorf("elastic: couldn't set body %+v for request: %v", opt.Body, err) return nil, err @@ -1297,11 +1336,6 @@ func (c *Client) PerformRequest(ctx context.Context, opt PerformRequestOptions) // Tracing c.dumpResponse(res) - // Log deprecation warnings as errors - if s := res.Header.Get("Warning"); s != "" { - c.errorf(s) - } - // Check for errors if err := checkResponse((*http.Request)(req), res, opt.IgnoreErrors...); err != nil { // No retry if request succeeded @@ -1385,7 +1419,7 @@ func (c *Client) BulkProcessor() *BulkProcessorService { // Reindex copies data from a source index into a destination index. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-reindex.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-reindex.html // for details on the Reindex API. func (c *Client) Reindex() *ReindexService { return NewReindexService(c) @@ -1412,6 +1446,11 @@ func (c *Client) Search(indices ...string) *SearchService { return NewSearchService(c).Index(indices...) } +// Suggest returns a service to return suggestions. +func (c *Client) Suggest(indices ...string) *SuggestService { + return NewSuggestService(c).Index(indices...) +} + // MultiSearch is the entry point for multi searches. func (c *Client) MultiSearch() *MultiSearchService { return NewMultiSearchService(c) @@ -1428,15 +1467,28 @@ func (c *Client) Explain(index, typ, id string) *ExplainService { } // TODO Search Template -// TODO Search Shards API // TODO Search Exists API -// TODO Validate API + +// Validate allows a user to validate a potentially expensive query without executing it. +func (c *Client) Validate(indices ...string) *ValidateService { + return NewValidateService(c).Index(indices...) +} + +// SearchShards returns statistical information about nodes and shards. +func (c *Client) SearchShards(indices ...string) *SearchShardsService { + return NewSearchShardsService(c).Index(indices...) +} // FieldCaps returns statistical information about fields in indices. func (c *Client) FieldCaps(indices ...string) *FieldCapsService { return NewFieldCapsService(c).Index(indices...) } +// FieldStats returns statistical information about fields in indices. +func (c *Client) FieldStats(indices ...string) *FieldStatsService { + return NewFieldStatsService(c).Index(indices...) +} + // Exists checks if a document exists. func (c *Client) Exists() *ExistsService { return NewExistsService(c) @@ -1556,6 +1608,24 @@ func (c *Client) Aliases() *AliasesService { return NewAliasesService(c) } +// GetTemplate gets a search template. +// Use IndexXXXTemplate funcs to manage index templates. +func (c *Client) GetTemplate() *GetTemplateService { + return NewGetTemplateService(c) +} + +// PutTemplate creates or updates a search template. +// Use IndexXXXTemplate funcs to manage index templates. +func (c *Client) PutTemplate() *PutTemplateService { + return NewPutTemplateService(c) +} + +// DeleteTemplate deletes a search template. +// Use IndexXXXTemplate funcs to manage index templates. +func (c *Client) DeleteTemplate() *DeleteTemplateService { + return NewDeleteTemplateService(c) +} + // IndexGetTemplate gets an index template. // Use XXXTemplate funcs to manage search templates. func (c *Client) IndexGetTemplate(names ...string) *IndicesGetTemplateService { diff --git a/vendor/gopkg.in/olivere/elastic.v5/client_test.go b/vendor/gopkg.in/olivere/elastic.v5/client_test.go deleted file mode 100644 index 4d0440ee0..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/client_test.go +++ /dev/null @@ -1,1319 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "fmt" - "log" - "net" - "net/http" - "reflect" - "regexp" - "strings" - "sync" - "testing" - "time" - - "github.com/fortytw2/leaktest" -) - -func findConn(s string, slice ...*conn) (int, bool) { - for i, t := range slice { - if s == t.URL() { - return i, true - } - } - return -1, false -} - -// -- NewClient -- - -func TestClientDefaults(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - if client.healthcheckEnabled != true { - t.Errorf("expected health checks to be enabled, got: %v", client.healthcheckEnabled) - } - if client.healthcheckTimeoutStartup != DefaultHealthcheckTimeoutStartup { - t.Errorf("expected health checks timeout on startup = %v, got: %v", DefaultHealthcheckTimeoutStartup, client.healthcheckTimeoutStartup) - } - if client.healthcheckTimeout != DefaultHealthcheckTimeout { - t.Errorf("expected health checks timeout = %v, got: %v", DefaultHealthcheckTimeout, client.healthcheckTimeout) - } - if client.healthcheckInterval != DefaultHealthcheckInterval { - t.Errorf("expected health checks interval = %v, got: %v", DefaultHealthcheckInterval, client.healthcheckInterval) - } - if client.snifferEnabled != true { - t.Errorf("expected sniffing to be enabled, got: %v", client.snifferEnabled) - } - if client.snifferTimeoutStartup != DefaultSnifferTimeoutStartup { - t.Errorf("expected sniffer timeout on startup = %v, got: %v", DefaultSnifferTimeoutStartup, client.snifferTimeoutStartup) - } - if client.snifferTimeout != DefaultSnifferTimeout { - t.Errorf("expected sniffer timeout = %v, got: %v", DefaultSnifferTimeout, client.snifferTimeout) - } - if client.snifferInterval != DefaultSnifferInterval { - t.Errorf("expected sniffer interval = %v, got: %v", DefaultSnifferInterval, client.snifferInterval) - } - if client.basicAuth != false { - t.Errorf("expected no basic auth; got: %v", client.basicAuth) - } - if client.basicAuthUsername != "" { - t.Errorf("expected no basic auth username; got: %q", client.basicAuthUsername) - } - if client.basicAuthPassword != "" { - t.Errorf("expected no basic auth password; got: %q", client.basicAuthUsername) - } - if client.sendGetBodyAs != "GET" { - t.Errorf("expected sendGetBodyAs to be GET; got: %q", client.sendGetBodyAs) - } -} - -func TestClientWithoutURL(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - // Two things should happen here: - // 1. The client starts sniffing the cluster on DefaultURL - // 2. The sniffing process should find (at least) one node in the cluster, i.e. the DefaultURL - if len(client.conns) == 0 { - t.Fatalf("expected at least 1 node in the cluster, got: %d (%v)", len(client.conns), client.conns) - } - if !isTravis() { - if _, found := findConn(DefaultURL, client.conns...); !found { - t.Errorf("expected to find node with default URL of %s in %v", DefaultURL, client.conns) - } - } -} - -func TestClientWithSingleURL(t *testing.T) { - client, err := NewClient(SetURL("http://127.0.0.1:9200")) - if err != nil { - t.Fatal(err) - } - // Two things should happen here: - // 1. The client starts sniffing the cluster on DefaultURL - // 2. The sniffing process should find (at least) one node in the cluster, i.e. the DefaultURL - if len(client.conns) == 0 { - t.Fatalf("expected at least 1 node in the cluster, got: %d (%v)", len(client.conns), client.conns) - } - if !isTravis() { - if _, found := findConn(DefaultURL, client.conns...); !found { - t.Errorf("expected to find node with default URL of %s in %v", DefaultURL, client.conns) - } - } -} - -func TestClientWithMultipleURLs(t *testing.T) { - client, err := NewClient(SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) - if err != nil { - t.Fatal(err) - } - // The client should sniff both URLs, but only 127.0.0.1:9200 should return nodes. - if len(client.conns) != 1 { - t.Fatalf("expected exactly 1 node in the local cluster, got: %d (%v)", len(client.conns), client.conns) - } - if !isTravis() { - if client.conns[0].URL() != DefaultURL { - t.Errorf("expected to find node with default URL of %s in %v", DefaultURL, client.conns) - } - } -} - -func TestClientWithBasicAuth(t *testing.T) { - client, err := NewClient(SetBasicAuth("user", "secret")) - if err != nil { - t.Fatal(err) - } - if client.basicAuth != true { - t.Errorf("expected basic auth; got: %v", client.basicAuth) - } - if got, want := client.basicAuthUsername, "user"; got != want { - t.Errorf("expected basic auth username %q; got: %q", want, got) - } - if got, want := client.basicAuthPassword, "secret"; got != want { - t.Errorf("expected basic auth password %q; got: %q", want, got) - } -} - -func TestClientWithBasicAuthInUserInfo(t *testing.T) { - client, err := NewClient(SetURL("http://user1:secret1@localhost:9200", "http://user2:secret2@localhost:9200")) - if err != nil { - t.Fatal(err) - } - if client.basicAuth != true { - t.Errorf("expected basic auth; got: %v", client.basicAuth) - } - if got, want := client.basicAuthUsername, "user1"; got != want { - t.Errorf("expected basic auth username %q; got: %q", want, got) - } - if got, want := client.basicAuthPassword, "secret1"; got != want { - t.Errorf("expected basic auth password %q; got: %q", want, got) - } -} - -func TestClientSniffSuccess(t *testing.T) { - client, err := NewClient(SetURL("http://127.0.0.1:19200", "http://127.0.0.1:9200")) - if err != nil { - t.Fatal(err) - } - // The client should sniff both URLs, but only 127.0.0.1:9200 should return nodes. - if len(client.conns) != 1 { - t.Fatalf("expected exactly 1 node in the local cluster, got: %d (%v)", len(client.conns), client.conns) - } -} - -func TestClientSniffFailure(t *testing.T) { - _, err := NewClient(SetURL("http://127.0.0.1:19200", "http://127.0.0.1:19201")) - if err == nil { - t.Fatalf("expected cluster to fail with no nodes found") - } -} - -func TestClientSnifferCallback(t *testing.T) { - var calls int - cb := func(node *NodesInfoNode) bool { - calls++ - return false - } - _, err := NewClient( - SetURL("http://127.0.0.1:19200", "http://127.0.0.1:9200"), - SetSnifferCallback(cb)) - if err == nil { - t.Fatalf("expected cluster to fail with no nodes found") - } - if calls != 1 { - t.Fatalf("expected 1 call to the sniffer callback, got %d", calls) - } -} - -func TestClientSniffDisabled(t *testing.T) { - client, err := NewClient(SetSniff(false), SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) - if err != nil { - t.Fatal(err) - } - // The client should not sniff, so it should have two connections. - if len(client.conns) != 2 { - t.Fatalf("expected 2 nodes, got: %d (%v)", len(client.conns), client.conns) - } - // Make two requests, so that both connections are being used - for i := 0; i < len(client.conns); i++ { - client.Flush().Do(context.TODO()) - } - // The first connection (127.0.0.1:9200) should now be okay. - if i, found := findConn("http://127.0.0.1:9200", client.conns...); !found { - t.Fatalf("expected connection to %q to be found", "http://127.0.0.1:9200") - } else { - if conn := client.conns[i]; conn.IsDead() { - t.Fatal("expected connection to be alive, but it is dead") - } - } - // The second connection (127.0.0.1:9201) should now be marked as dead. - if i, found := findConn("http://127.0.0.1:9201", client.conns...); !found { - t.Fatalf("expected connection to %q to be found", "http://127.0.0.1:9201") - } else { - if conn := client.conns[i]; !conn.IsDead() { - t.Fatal("expected connection to be dead, but it is alive") - } - } -} - -func TestClientWillMarkConnectionsAsAliveWhenAllAreDead(t *testing.T) { - client, err := NewClient(SetURL("http://127.0.0.1:9201"), - SetSniff(false), SetHealthcheck(false), SetMaxRetries(0)) - if err != nil { - t.Fatal(err) - } - // We should have a connection. - if len(client.conns) != 1 { - t.Fatalf("expected 1 node, got: %d (%v)", len(client.conns), client.conns) - } - - // Make a request, so that the connections is marked as dead. - client.Flush().Do(context.TODO()) - - // The connection should now be marked as dead. - if i, found := findConn("http://127.0.0.1:9201", client.conns...); !found { - t.Fatalf("expected connection to %q to be found", "http://127.0.0.1:9201") - } else { - if conn := client.conns[i]; !conn.IsDead() { - t.Fatalf("expected connection to be dead, got: %v", conn) - } - } - - // Now send another request and the connection should be marked as alive again. - client.Flush().Do(context.TODO()) - - if i, found := findConn("http://127.0.0.1:9201", client.conns...); !found { - t.Fatalf("expected connection to %q to be found", "http://127.0.0.1:9201") - } else { - if conn := client.conns[i]; conn.IsDead() { - t.Fatalf("expected connection to be alive, got: %v", conn) - } - } -} - -func TestClientWithRequiredPlugins(t *testing.T) { - _, err := NewClient(SetRequiredPlugins("no-such-plugin")) - if err == nil { - t.Fatal("expected error when creating client") - } - if got, want := err.Error(), "elastic: plugin no-such-plugin not found"; got != want { - t.Fatalf("expected error %q; got: %q", want, got) - } -} - -func TestClientHealthcheckStartupTimeout(t *testing.T) { - start := time.Now() - _, err := NewClient(SetURL("http://localhost:9299"), SetHealthcheckTimeoutStartup(5*time.Second)) - duration := time.Now().Sub(start) - if !IsConnErr(err) { - t.Fatal(err) - } - if !strings.Contains(err.Error(), "connection refused") { - t.Fatalf("expected error to contain %q, have %q", "connection refused", err.Error()) - } - if duration < 5*time.Second { - t.Fatalf("expected a timeout in more than 5 seconds; got: %v", duration) - } -} - -func TestClientHealthcheckTimeoutLeak(t *testing.T) { - // This test test checks if healthcheck requests are canceled - // after timeout. - // It contains couple of hacks which won't be needed once we - // stop supporting Go1.7. - // On Go1.7 it uses server side effects to monitor if connection - // was closed, - // and on Go 1.8+ we're additionally honestly monitoring routine - // leaks via leaktest. - mux := http.NewServeMux() - - var reqDoneMu sync.Mutex - var reqDone bool - mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - cn, ok := w.(http.CloseNotifier) - if !ok { - t.Fatalf("Writer is not CloseNotifier, but %v", reflect.TypeOf(w).Name()) - } - <-cn.CloseNotify() - reqDoneMu.Lock() - reqDone = true - reqDoneMu.Unlock() - }) - - lis, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatalf("Couldn't setup listener: %v", err) - } - addr := lis.Addr().String() - - srv := &http.Server{ - Handler: mux, - } - go srv.Serve(lis) - - cli := &Client{ - c: &http.Client{}, - conns: []*conn{ - &conn{ - url: "http://" + addr + "/", - }, - }, - } - - type closer interface { - Shutdown(context.Context) error - } - - // pre-Go1.8 Server can't Shutdown - cl, isServerCloseable := (interface{}(srv)).(closer) - - // Since Go1.7 can't Shutdown() - there will be leak from server - // Monitor leaks on Go 1.8+ - if isServerCloseable { - defer leaktest.CheckTimeout(t, time.Second*10)() - } - - cli.healthcheck(time.Millisecond*500, true) - - if isServerCloseable { - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - cl.Shutdown(ctx) - } - - <-time.After(time.Second) - reqDoneMu.Lock() - if !reqDone { - reqDoneMu.Unlock() - t.Fatal("Request wasn't canceled or stopped") - } - reqDoneMu.Unlock() -} - -// -- NewSimpleClient -- - -func TestSimpleClientDefaults(t *testing.T) { - client, err := NewSimpleClient() - if err != nil { - t.Fatal(err) - } - if client.healthcheckEnabled != false { - t.Errorf("expected health checks to be disabled, got: %v", client.healthcheckEnabled) - } - if client.healthcheckTimeoutStartup != off { - t.Errorf("expected health checks timeout on startup = %v, got: %v", off, client.healthcheckTimeoutStartup) - } - if client.healthcheckTimeout != off { - t.Errorf("expected health checks timeout = %v, got: %v", off, client.healthcheckTimeout) - } - if client.healthcheckInterval != off { - t.Errorf("expected health checks interval = %v, got: %v", off, client.healthcheckInterval) - } - if client.snifferEnabled != false { - t.Errorf("expected sniffing to be disabled, got: %v", client.snifferEnabled) - } - if client.snifferTimeoutStartup != off { - t.Errorf("expected sniffer timeout on startup = %v, got: %v", off, client.snifferTimeoutStartup) - } - if client.snifferTimeout != off { - t.Errorf("expected sniffer timeout = %v, got: %v", off, client.snifferTimeout) - } - if client.snifferInterval != off { - t.Errorf("expected sniffer interval = %v, got: %v", off, client.snifferInterval) - } - if client.basicAuth != false { - t.Errorf("expected no basic auth; got: %v", client.basicAuth) - } - if client.basicAuthUsername != "" { - t.Errorf("expected no basic auth username; got: %q", client.basicAuthUsername) - } - if client.basicAuthPassword != "" { - t.Errorf("expected no basic auth password; got: %q", client.basicAuthUsername) - } - if client.sendGetBodyAs != "GET" { - t.Errorf("expected sendGetBodyAs to be GET; got: %q", client.sendGetBodyAs) - } -} - -// -- Start and stop -- - -func TestClientStartAndStop(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - - running := client.IsRunning() - if !running { - t.Fatalf("expected background processes to run; got: %v", running) - } - - // Stop - client.Stop() - running = client.IsRunning() - if running { - t.Fatalf("expected background processes to be stopped; got: %v", running) - } - - // Stop again => no-op - client.Stop() - running = client.IsRunning() - if running { - t.Fatalf("expected background processes to be stopped; got: %v", running) - } - - // Start - client.Start() - running = client.IsRunning() - if !running { - t.Fatalf("expected background processes to run; got: %v", running) - } - - // Start again => no-op - client.Start() - running = client.IsRunning() - if !running { - t.Fatalf("expected background processes to run; got: %v", running) - } -} - -func TestClientStartAndStopWithSnifferAndHealthchecksDisabled(t *testing.T) { - client, err := NewClient(SetSniff(false), SetHealthcheck(false)) - if err != nil { - t.Fatal(err) - } - - running := client.IsRunning() - if !running { - t.Fatalf("expected background processes to run; got: %v", running) - } - - // Stop - client.Stop() - running = client.IsRunning() - if running { - t.Fatalf("expected background processes to be stopped; got: %v", running) - } - - // Stop again => no-op - client.Stop() - running = client.IsRunning() - if running { - t.Fatalf("expected background processes to be stopped; got: %v", running) - } - - // Start - client.Start() - running = client.IsRunning() - if !running { - t.Fatalf("expected background processes to run; got: %v", running) - } - - // Start again => no-op - client.Start() - running = client.IsRunning() - if !running { - t.Fatalf("expected background processes to run; got: %v", running) - } -} - -// -- Sniffing -- - -func TestClientSniffNode(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - - ch := make(chan []*conn) - go func() { ch <- client.sniffNode(context.Background(), DefaultURL) }() - - select { - case nodes := <-ch: - if len(nodes) != 1 { - t.Fatalf("expected %d nodes; got: %d", 1, len(nodes)) - } - pattern := `http:\/\/[\d\.]+:9200` - matched, err := regexp.MatchString(pattern, nodes[0].URL()) - if err != nil { - t.Fatal(err) - } - if !matched { - t.Fatalf("expected node URL pattern %q; got: %q", pattern, nodes[0].URL()) - } - case <-time.After(2 * time.Second): - t.Fatal("expected no timeout in sniff node") - break - } -} - -func TestClientSniffOnDefaultURL(t *testing.T) { - client, _ := NewClient() - if client == nil { - t.Fatal("no client returned") - } - - ch := make(chan error, 1) - go func() { - ch <- client.sniff(DefaultSnifferTimeoutStartup) - }() - - select { - case err := <-ch: - if err != nil { - t.Fatalf("expected sniff to succeed; got: %v", err) - } - if len(client.conns) != 1 { - t.Fatalf("expected %d nodes; got: %d", 1, len(client.conns)) - } - pattern := `http:\/\/[\d\.]+:9200` - matched, err := regexp.MatchString(pattern, client.conns[0].URL()) - if err != nil { - t.Fatal(err) - } - if !matched { - t.Fatalf("expected node URL pattern %q; got: %q", pattern, client.conns[0].URL()) - } - case <-time.After(2 * time.Second): - t.Fatal("expected no timeout in sniff") - break - } -} - -func TestClientSniffTimeoutLeak(t *testing.T) { - // This test test checks if sniff requests are canceled - // after timeout. - // It contains couple of hacks which won't be needed once we - // stop supporting Go1.7. - // On Go1.7 it uses server side effects to monitor if connection - // was closed, - // and on Go 1.8+ we're additionally honestly monitoring routine - // leaks via leaktest. - mux := http.NewServeMux() - - var reqDoneMu sync.Mutex - var reqDone bool - mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - cn, ok := w.(http.CloseNotifier) - if !ok { - t.Fatalf("Writer is not CloseNotifier, but %v", reflect.TypeOf(w).Name()) - } - <-cn.CloseNotify() - reqDoneMu.Lock() - reqDone = true - reqDoneMu.Unlock() - }) - - lis, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatalf("Couldn't setup listener: %v", err) - } - addr := lis.Addr().String() - - srv := &http.Server{ - Handler: mux, - } - go srv.Serve(lis) - - cli := &Client{ - c: &http.Client{}, - conns: []*conn{ - &conn{ - url: "http://" + addr + "/", - }, - }, - snifferEnabled: true, - } - - type closer interface { - Shutdown(context.Context) error - } - - // pre-Go1.8 Server can't Shutdown - cl, isServerCloseable := (interface{}(srv)).(closer) - - // Since Go1.7 can't Shutdown() - there will be leak from server - // Monitor leaks on Go 1.8+ - if isServerCloseable { - defer leaktest.CheckTimeout(t, time.Second*10)() - } - - cli.sniff(time.Millisecond * 500) - - if isServerCloseable { - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - cl.Shutdown(ctx) - } - - <-time.After(time.Second) - reqDoneMu.Lock() - if !reqDone { - reqDoneMu.Unlock() - t.Fatal("Request wasn't canceled or stopped") - } - reqDoneMu.Unlock() -} - -func TestClientExtractHostname(t *testing.T) { - tests := []struct { - Scheme string - Address string - Output string - }{ - { - Scheme: "http", - Address: "", - Output: "", - }, - { - Scheme: "https", - Address: "abc", - Output: "", - }, - { - Scheme: "http", - Address: "127.0.0.1:19200", - Output: "http://127.0.0.1:19200", - }, - { - Scheme: "https", - Address: "127.0.0.1:9200", - Output: "https://127.0.0.1:9200", - }, - { - Scheme: "http", - Address: "myelk.local/10.1.0.24:9200", - Output: "http://10.1.0.24:9200", - }, - } - - client, err := NewClient(SetSniff(false), SetHealthcheck(false)) - if err != nil { - t.Fatal(err) - } - for _, test := range tests { - got := client.extractHostname(test.Scheme, test.Address) - if want := test.Output; want != got { - t.Errorf("expected %q; got: %q", want, got) - } - } -} - -// -- Selector -- - -func TestClientSelectConnHealthy(t *testing.T) { - client, err := NewClient( - SetSniff(false), - SetHealthcheck(false), - SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) - if err != nil { - t.Fatal(err) - } - - // Both are healthy, so we should get both URLs in round-robin - client.conns[0].MarkAsHealthy() - client.conns[1].MarkAsHealthy() - - // #1: Return 1st - c, err := client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[0].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) - } - // #2: Return 2nd - c, err = client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[1].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[1].URL()) - } - // #3: Return 1st - c, err = client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[0].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) - } -} - -func TestClientSelectConnHealthyAndDead(t *testing.T) { - client, err := NewClient( - SetSniff(false), - SetHealthcheck(false), - SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) - if err != nil { - t.Fatal(err) - } - - // 1st is healthy, second is dead - client.conns[0].MarkAsHealthy() - client.conns[1].MarkAsDead() - - // #1: Return 1st - c, err := client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[0].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) - } - // #2: Return 1st again - c, err = client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[0].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) - } - // #3: Return 1st again and again - c, err = client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[0].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) - } -} - -func TestClientSelectConnDeadAndHealthy(t *testing.T) { - client, err := NewClient( - SetSniff(false), - SetHealthcheck(false), - SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) - if err != nil { - t.Fatal(err) - } - - // 1st is dead, 2nd is healthy - client.conns[0].MarkAsDead() - client.conns[1].MarkAsHealthy() - - // #1: Return 2nd - c, err := client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[1].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[1].URL()) - } - // #2: Return 2nd again - c, err = client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[1].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[1].URL()) - } - // #3: Return 2nd again and again - c, err = client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[1].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[1].URL()) - } -} - -func TestClientSelectConnAllDead(t *testing.T) { - client, err := NewClient( - SetSniff(false), - SetHealthcheck(false), - SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) - if err != nil { - t.Fatal(err) - } - - // Both are dead - client.conns[0].MarkAsDead() - client.conns[1].MarkAsDead() - - // If all connections are dead, next should make them alive again, but - // still return an error when it first finds out. - c, err := client.next() - if !IsConnErr(err) { - t.Fatal(err) - } - if c != nil { - t.Fatalf("expected no connection; got: %v", c) - } - // Return a connection - c, err = client.next() - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if c == nil { - t.Fatalf("expected connection; got: %v", c) - } - // Return a connection - c, err = client.next() - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if c == nil { - t.Fatalf("expected connection; got: %v", c) - } -} - -// -- ElasticsearchVersion -- - -func TestElasticsearchVersion(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - version, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if version == "" { - t.Errorf("expected a version number, got: %q", version) - } -} - -// -- IndexNames -- - -func TestIndexNames(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - names, err := client.IndexNames() - if err != nil { - t.Fatal(err) - } - if len(names) == 0 { - t.Fatalf("expected some index names, got: %d", len(names)) - } - var found bool - for _, name := range names { - if name == testIndexName { - found = true - break - } - } - if !found { - t.Fatalf("expected to find index %q; got: %v", testIndexName, found) - } -} - -// -- PerformRequest -- - -func TestPerformRequest(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ - Method: "GET", - Path: "/", - }) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected response to be != nil") - } - - ret := new(PingResult) - if err := json.Unmarshal(res.Body, ret); err != nil { - t.Fatalf("expected no error on decode; got: %v", err) - } - if ret.ClusterName == "" { - t.Errorf("expected cluster name; got: %q", ret.ClusterName) - } -} - -func TestPerformRequestWithSimpleClient(t *testing.T) { - client, err := NewSimpleClient() - if err != nil { - t.Fatal(err) - } - res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ - Method: "GET", - Path: "/", - }) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected response to be != nil") - } - - ret := new(PingResult) - if err := json.Unmarshal(res.Body, ret); err != nil { - t.Fatalf("expected no error on decode; got: %v", err) - } - if ret.ClusterName == "" { - t.Errorf("expected cluster name; got: %q", ret.ClusterName) - } -} - -func TestPerformRequestWithLogger(t *testing.T) { - var w bytes.Buffer - out := log.New(&w, "LOGGER ", log.LstdFlags) - - client, err := NewClient(SetInfoLog(out), SetSniff(false)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ - Method: "GET", - Path: "/", - }) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected response to be != nil") - } - - ret := new(PingResult) - if err := json.Unmarshal(res.Body, ret); err != nil { - t.Fatalf("expected no error on decode; got: %v", err) - } - if ret.ClusterName == "" { - t.Errorf("expected cluster name; got: %q", ret.ClusterName) - } - - got := w.String() - pattern := `^LOGGER \d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} GET http://.*/ \[status:200, request:\d+\.\d{3}s\]\n` - matched, err := regexp.MatchString(pattern, got) - if err != nil { - t.Fatalf("expected log line to match %q; got: %v", pattern, err) - } - if !matched { - t.Errorf("expected log line to match %q; got: %v", pattern, got) - } -} - -func TestPerformRequestWithLoggerAndTracer(t *testing.T) { - var lw bytes.Buffer - lout := log.New(&lw, "LOGGER ", log.LstdFlags) - - var tw bytes.Buffer - tout := log.New(&tw, "TRACER ", log.LstdFlags) - - client, err := NewClient(SetInfoLog(lout), SetTraceLog(tout), SetSniff(false)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ - Method: "GET", - Path: "/", - }) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected response to be != nil") - } - - ret := new(PingResult) - if err := json.Unmarshal(res.Body, ret); err != nil { - t.Fatalf("expected no error on decode; got: %v", err) - } - if ret.ClusterName == "" { - t.Errorf("expected cluster name; got: %q", ret.ClusterName) - } - - lgot := lw.String() - if lgot == "" { - t.Errorf("expected logger output; got: %q", lgot) - } - - tgot := tw.String() - if tgot == "" { - t.Errorf("expected tracer output; got: %q", tgot) - } -} -func TestPerformRequestWithTracerOnError(t *testing.T) { - var tw bytes.Buffer - tout := log.New(&tw, "TRACER ", log.LstdFlags) - - client, err := NewClient(SetTraceLog(tout), SetSniff(false)) - if err != nil { - t.Fatal(err) - } - - client.PerformRequest(context.TODO(), PerformRequestOptions{ - Method: "GET", - Path: "/no-such-index", - }) - - tgot := tw.String() - if tgot == "" { - t.Errorf("expected tracer output; got: %q", tgot) - } -} - -type customLogger struct { - out bytes.Buffer -} - -func (l *customLogger) Printf(format string, v ...interface{}) { - l.out.WriteString(fmt.Sprintf(format, v...) + "\n") -} - -func TestPerformRequestWithCustomLogger(t *testing.T) { - logger := &customLogger{} - - client, err := NewClient(SetInfoLog(logger), SetSniff(false)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ - Method: "GET", - Path: "/", - }) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected response to be != nil") - } - - ret := new(PingResult) - if err := json.Unmarshal(res.Body, ret); err != nil { - t.Fatalf("expected no error on decode; got: %v", err) - } - if ret.ClusterName == "" { - t.Errorf("expected cluster name; got: %q", ret.ClusterName) - } - - got := logger.out.String() - pattern := `^GET http://.*/ \[status:200, request:\d+\.\d{3}s\]\n` - matched, err := regexp.MatchString(pattern, got) - if err != nil { - t.Fatalf("expected log line to match %q; got: %v", pattern, err) - } - if !matched { - t.Errorf("expected log line to match %q; got: %v", pattern, got) - } -} - -// failingTransport will run a fail callback if it sees a given URL path prefix. -type failingTransport struct { - path string // path prefix to look for - fail func(*http.Request) (*http.Response, error) // call when path prefix is found - next http.RoundTripper // next round-tripper (use http.DefaultTransport if nil) -} - -// RoundTrip implements a failing transport. -func (tr *failingTransport) RoundTrip(r *http.Request) (*http.Response, error) { - if strings.HasPrefix(r.URL.Path, tr.path) && tr.fail != nil { - return tr.fail(r) - } - if tr.next != nil { - return tr.next.RoundTrip(r) - } - return http.DefaultTransport.RoundTrip(r) -} - -func TestPerformRequestRetryOnHttpError(t *testing.T) { - var numFailedReqs int - fail := func(r *http.Request) (*http.Response, error) { - numFailedReqs += 1 - //return &http.Response{Request: r, StatusCode: 400}, nil - return nil, errors.New("request failed") - } - - // Run against a failing endpoint and see if PerformRequest - // retries correctly. - tr := &failingTransport{path: "/fail", fail: fail} - httpClient := &http.Client{Transport: tr} - - client, err := NewClient(SetHttpClient(httpClient), SetMaxRetries(5), SetHealthcheck(false)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ - Method: "GET", - Path: "/fail", - }) - if err == nil { - t.Fatal("expected error") - } - if res != nil { - t.Fatal("expected no response") - } - // Connection should be marked as dead after it failed - if numFailedReqs != 5 { - t.Errorf("expected %d failed requests; got: %d", 5, numFailedReqs) - } -} - -func TestPerformRequestNoRetryOnValidButUnsuccessfulHttpStatus(t *testing.T) { - var numFailedReqs int - fail := func(r *http.Request) (*http.Response, error) { - numFailedReqs += 1 - return &http.Response{Request: r, StatusCode: 500}, nil - } - - // Run against a failing endpoint and see if PerformRequest - // retries correctly. - tr := &failingTransport{path: "/fail", fail: fail} - httpClient := &http.Client{Transport: tr} - - client, err := NewClient(SetHttpClient(httpClient), SetMaxRetries(5), SetHealthcheck(false)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ - Method: "GET", - Path: "/fail", - }) - if err == nil { - t.Fatal("expected error") - } - if res == nil { - t.Fatal("expected response, got nil") - } - if want, got := 500, res.StatusCode; want != got { - t.Fatalf("expected status code = %d, got %d", want, got) - } - // Retry should not have triggered additional requests because - if numFailedReqs != 1 { - t.Errorf("expected %d failed requests; got: %d", 1, numFailedReqs) - } -} - -// failingBody will return an error when json.Marshal is called on it. -type failingBody struct{} - -// MarshalJSON implements the json.Marshaler interface and always returns an error. -func (fb failingBody) MarshalJSON() ([]byte, error) { - return nil, errors.New("failing to marshal") -} - -func TestPerformRequestWithSetBodyError(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ - Method: "GET", - Path: "/", - Body: failingBody{}, - }) - if err == nil { - t.Fatal("expected error") - } - if res != nil { - t.Fatal("expected no response") - } -} - -// sleepingTransport will sleep before doing a request. -type sleepingTransport struct { - timeout time.Duration -} - -// RoundTrip implements a "sleepy" transport. -func (tr *sleepingTransport) RoundTrip(r *http.Request) (*http.Response, error) { - time.Sleep(tr.timeout) - return http.DefaultTransport.RoundTrip(r) -} - -func TestPerformRequestWithCancel(t *testing.T) { - tr := &sleepingTransport{timeout: 3 * time.Second} - httpClient := &http.Client{Transport: tr} - - client, err := NewSimpleClient(SetHttpClient(httpClient), SetMaxRetries(0)) - if err != nil { - t.Fatal(err) - } - - type result struct { - res *Response - err error - } - ctx, cancel := context.WithCancel(context.Background()) - - resc := make(chan result, 1) - go func() { - res, err := client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: "/", - }) - resc <- result{res: res, err: err} - }() - select { - case <-time.After(1 * time.Second): - cancel() - case res := <-resc: - t.Fatalf("expected response before cancel, got %v", res) - case <-ctx.Done(): - t.Fatalf("expected no early termination, got ctx.Done(): %v", ctx.Err()) - } - err = ctx.Err() - if err != context.Canceled { - t.Fatalf("expected error context.Canceled, got: %v", err) - } -} - -func TestPerformRequestWithTimeout(t *testing.T) { - tr := &sleepingTransport{timeout: 3 * time.Second} - httpClient := &http.Client{Transport: tr} - - client, err := NewSimpleClient(SetHttpClient(httpClient), SetMaxRetries(0)) - if err != nil { - t.Fatal(err) - } - - type result struct { - res *Response - err error - } - ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) - defer cancel() - - resc := make(chan result, 1) - go func() { - res, err := client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: "/", - }) - resc <- result{res: res, err: err} - }() - select { - case res := <-resc: - t.Fatalf("expected timeout before response, got %v", res) - case <-ctx.Done(): - err := ctx.Err() - if err != context.DeadlineExceeded { - t.Fatalf("expected error context.DeadlineExceeded, got: %v", err) - } - } -} - -// -- Compression -- - -// Notice that the trace log does always print "Accept-Encoding: gzip" -// regardless of whether compression is enabled or not. This is because -// of the underlying "httputil.DumpRequestOut". -// -// Use a real HTTP proxy/recorder to convince yourself that -// "Accept-Encoding: gzip" is NOT sent when DisableCompression -// is set to true. -// -// See also: -// https://groups.google.com/forum/#!topic/golang-nuts/ms8QNCzew8Q - -func TestPerformRequestWithCompressionEnabled(t *testing.T) { - testPerformRequestWithCompression(t, &http.Client{ - Transport: &http.Transport{ - DisableCompression: true, - }, - }) -} - -func TestPerformRequestWithCompressionDisabled(t *testing.T) { - testPerformRequestWithCompression(t, &http.Client{ - Transport: &http.Transport{ - DisableCompression: false, - }, - }) -} - -func testPerformRequestWithCompression(t *testing.T, hc *http.Client) { - client, err := NewClient(SetHttpClient(hc), SetSniff(false)) - if err != nil { - t.Fatal(err) - } - res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ - Method: "GET", - Path: "/", - }) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected response to be != nil") - } - - ret := new(PingResult) - if err := json.Unmarshal(res.Body, ret); err != nil { - t.Fatalf("expected no error on decode; got: %v", err) - } - if ret.ClusterName == "" { - t.Errorf("expected cluster name; got: %q", ret.ClusterName) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/cluster-test/Makefile b/vendor/gopkg.in/olivere/elastic.v5/cluster-test/Makefile deleted file mode 100644 index cc6261db5..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/cluster-test/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -.PHONY: build run-omega-cluster-test - -default: build - -build: - go build cluster-test.go - -run-omega-cluster-test: - go run -race cluster-test.go \ - -nodes=http://192.168.2.65:8200,http://192.168.2.64:8200 \ - -n=5 \ - -retries=5 \ - -sniff=true -sniffer=10s \ - -healthcheck=true -healthchecker=5s \ - -errorlog=errors.log - diff --git a/vendor/gopkg.in/olivere/elastic.v5/cluster-test/README.md b/vendor/gopkg.in/olivere/elastic.v5/cluster-test/README.md deleted file mode 100644 index f10748cc2..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/cluster-test/README.md +++ /dev/null @@ -1,63 +0,0 @@ -# Cluster Test - -This directory contains a program you can use to test a cluster. - -Here's how: - -First, install a cluster of Elasticsearch nodes. You can install them on -different computers, or start several nodes on a single machine. - -Build cluster-test by `go build cluster-test.go` (or build with `make`). - -Run `./cluster-test -h` to get a list of flags: - -```sh -$ ./cluster-test -h -Usage of ./cluster-test: - -errorlog="": error log file - -healthcheck=true: enable or disable healthchecks - -healthchecker=1m0s: healthcheck interval - -index="twitter": name of ES index to use - -infolog="": info log file - -n=5: number of goroutines that run searches - -nodes="": comma-separated list of ES URLs (e.g. 'http://192.168.2.10:9200,http://192.168.2.11:9200') - -retries=0: number of retries - -sniff=true: enable or disable sniffer - -sniffer=15m0s: sniffer interval - -tracelog="": trace log file -``` - -Example: - -```sh -$ ./cluster-test -nodes=http://127.0.0.1:9200,http://127.0.0.1:9201,http://127.0.0.1:9202 -n=5 -index=twitter -retries=5 -sniff=true -sniffer=10s -healthcheck=true -healthchecker=5s -errorlog=error.log -``` - -The above example will create an index and start some search jobs on the -cluster defined by http://127.0.0.1:9200, http://127.0.0.1:9201, -and http://127.0.0.1:9202. - -* It will create an index called `twitter` on the cluster (`-index=twitter`) -* It will run 5 search jobs in parallel (`-n=5`). -* It will retry failed requests 5 times (`-retries=5`). -* It will sniff the cluster periodically (`-sniff=true`). -* It will sniff the cluster every 10 seconds (`-sniffer=10s`). -* It will perform health checks periodically (`-healthcheck=true`). -* It will perform health checks on the nodes every 5 seconds (`-healthchecker=5s`). -* It will write an error log file (`-errorlog=error.log`). - -If you want to test Elastic with nodes going up and down, you can use a -chaos monkey script like this and run it on the nodes of your cluster: - -```sh -#!/bin/bash -while true -do - echo "Starting ES node" - elasticsearch -d -Xmx4g -Xms1g -Des.config=elasticsearch.yml -p es.pid - sleep `jot -r 1 10 300` # wait for 10-300s - echo "Stopping ES node" - kill -TERM `cat es.pid` - sleep `jot -r 1 10 60` # wait for 10-60s -done -``` diff --git a/vendor/gopkg.in/olivere/elastic.v5/cluster-test/cluster-test.go b/vendor/gopkg.in/olivere/elastic.v5/cluster-test/cluster-test.go deleted file mode 100644 index 96b0c5d9b..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/cluster-test/cluster-test.go +++ /dev/null @@ -1,361 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package main - -import ( - "context" - "encoding/json" - "errors" - "flag" - "fmt" - "log" - "math/rand" - "os" - "runtime" - "strings" - "sync/atomic" - "time" - - elastic "github.com/olivere/elastic" -) - -type Tweet struct { - User string `json:"user"` - Message string `json:"message"` - Retweets int `json:"retweets"` - Image string `json:"image,omitempty"` - Created time.Time `json:"created,omitempty"` - Tags []string `json:"tags,omitempty"` - Location string `json:"location,omitempty"` - Suggest *elastic.SuggestField `json:"suggest_field,omitempty"` -} - -var ( - nodes = flag.String("nodes", "", "comma-separated list of ES URLs (e.g. 'http://192.168.2.10:9200,http://192.168.2.11:9200')") - n = flag.Int("n", 5, "number of goroutines that run searches") - index = flag.String("index", "twitter", "name of ES index to use") - errorlogfile = flag.String("errorlog", "", "error log file") - infologfile = flag.String("infolog", "", "info log file") - tracelogfile = flag.String("tracelog", "", "trace log file") - retries = flag.Int("retries", 0, "number of retries") - sniff = flag.Bool("sniff", elastic.DefaultSnifferEnabled, "enable or disable sniffer") - sniffer = flag.Duration("sniffer", elastic.DefaultSnifferInterval, "sniffer interval") - healthcheck = flag.Bool("healthcheck", elastic.DefaultHealthcheckEnabled, "enable or disable healthchecks") - healthchecker = flag.Duration("healthchecker", elastic.DefaultHealthcheckInterval, "healthcheck interval") -) - -func main() { - flag.Parse() - - runtime.GOMAXPROCS(runtime.NumCPU()) - - if *nodes == "" { - log.Fatal("no nodes specified") - } - urls := strings.SplitN(*nodes, ",", -1) - - testcase, err := NewTestCase(*index, urls) - if err != nil { - log.Fatal(err) - } - - testcase.SetErrorLogFile(*errorlogfile) - testcase.SetInfoLogFile(*infologfile) - testcase.SetTraceLogFile(*tracelogfile) - testcase.SetMaxRetries(*retries) - testcase.SetHealthcheck(*healthcheck) - testcase.SetHealthcheckInterval(*healthchecker) - testcase.SetSniff(*sniff) - testcase.SetSnifferInterval(*sniffer) - - if err := testcase.Run(*n); err != nil { - log.Fatal(err) - } - - select {} -} - -type RunInfo struct { - Success bool -} - -type TestCase struct { - nodes []string - client *elastic.Client - runs int64 - failures int64 - runCh chan RunInfo - index string - errorlogfile string - infologfile string - tracelogfile string - maxRetries int - healthcheck bool - healthcheckInterval time.Duration - sniff bool - snifferInterval time.Duration -} - -func NewTestCase(index string, nodes []string) (*TestCase, error) { - if index == "" { - return nil, errors.New("no index name specified") - } - - return &TestCase{ - index: index, - nodes: nodes, - runCh: make(chan RunInfo), - }, nil -} - -func (t *TestCase) SetIndex(name string) { - t.index = name -} - -func (t *TestCase) SetErrorLogFile(name string) { - t.errorlogfile = name -} - -func (t *TestCase) SetInfoLogFile(name string) { - t.infologfile = name -} - -func (t *TestCase) SetTraceLogFile(name string) { - t.tracelogfile = name -} - -func (t *TestCase) SetMaxRetries(n int) { - t.maxRetries = n -} - -func (t *TestCase) SetSniff(enabled bool) { - t.sniff = enabled -} - -func (t *TestCase) SetSnifferInterval(d time.Duration) { - t.snifferInterval = d -} - -func (t *TestCase) SetHealthcheck(enabled bool) { - t.healthcheck = enabled -} - -func (t *TestCase) SetHealthcheckInterval(d time.Duration) { - t.healthcheckInterval = d -} - -func (t *TestCase) Run(n int) error { - if err := t.setup(); err != nil { - return err - } - - for i := 1; i < n; i++ { - go t.search() - } - - go t.monitor() - - return nil -} - -func (t *TestCase) monitor() { - print := func() { - fmt.Printf("\033[32m%5d\033[0m; \033[31m%5d\033[0m: %s%s\r", t.runs, t.failures, t.client.String(), " ") - } - - for { - select { - case run := <-t.runCh: - atomic.AddInt64(&t.runs, 1) - if !run.Success { - atomic.AddInt64(&t.failures, 1) - fmt.Println() - } - print() - case <-time.After(5 * time.Second): - // Print stats after some inactivity - print() - break - } - } -} - -func (t *TestCase) setup() error { - var errorlogger *log.Logger - if t.errorlogfile != "" { - f, err := os.OpenFile(t.errorlogfile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0664) - if err != nil { - return err - } - errorlogger = log.New(f, "", log.Ltime|log.Lmicroseconds|log.Lshortfile) - } - - var infologger *log.Logger - if t.infologfile != "" { - f, err := os.OpenFile(t.infologfile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0664) - if err != nil { - return err - } - infologger = log.New(f, "", log.LstdFlags) - } - - // Trace request and response details like this - var tracelogger *log.Logger - if t.tracelogfile != "" { - f, err := os.OpenFile(t.tracelogfile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0664) - if err != nil { - return err - } - tracelogger = log.New(f, "", log.LstdFlags) - } - - client, err := elastic.NewClient( - elastic.SetURL(t.nodes...), - elastic.SetErrorLog(errorlogger), - elastic.SetInfoLog(infologger), - elastic.SetTraceLog(tracelogger), - elastic.SetMaxRetries(t.maxRetries), - elastic.SetSniff(t.sniff), - elastic.SetSnifferInterval(t.snifferInterval), - elastic.SetHealthcheck(t.healthcheck), - elastic.SetHealthcheckInterval(t.healthcheckInterval)) - if err != nil { - // Handle error - return err - } - t.client = client - - ctx := context.Background() - - // Use the IndexExists service to check if a specified index exists. - exists, err := t.client.IndexExists(t.index).Do(ctx) - if err != nil { - return err - } - if exists { - deleteIndex, err := t.client.DeleteIndex(t.index).Do(ctx) - if err != nil { - return err - } - if !deleteIndex.Acknowledged { - return errors.New("delete index not acknowledged") - } - } - - // Create a new index. - createIndex, err := t.client.CreateIndex(t.index).Do(ctx) - if err != nil { - return err - } - if !createIndex.Acknowledged { - return errors.New("create index not acknowledged") - } - - // Index a tweet (using JSON serialization) - tweet1 := Tweet{User: "olivere", Message: "Take Five", Retweets: 0} - _, err = t.client.Index(). - Index(t.index). - Type("tweet"). - Id("1"). - BodyJson(tweet1). - Do(ctx) - if err != nil { - return err - } - - // Index a second tweet (by string) - tweet2 := `{"user" : "olivere", "message" : "It's a Raggy Waltz"}` - _, err = t.client.Index(). - Index(t.index). - Type("tweet"). - Id("2"). - BodyString(tweet2). - Do(ctx) - if err != nil { - return err - } - - // Flush to make sure the documents got written. - _, err = t.client.Flush().Index(t.index).Do(ctx) - if err != nil { - return err - } - - return nil -} - -func (t *TestCase) search() { - ctx := context.Background() - - // Loop forever to check for connection issues - for { - // Get tweet with specified ID - get1, err := t.client.Get(). - Index(t.index). - Type("tweet"). - Id("1"). - Do(ctx) - if err != nil { - //failf("Get failed: %v", err) - t.runCh <- RunInfo{Success: false} - continue - } - if !get1.Found { - //log.Printf("Document %s not found\n", "1") - //fmt.Printf("Got document %s in version %d from index %s, type %s\n", get1.Id, get1.Version, get1.Index, get1.Type) - t.runCh <- RunInfo{Success: false} - continue - } - - // Search with a term query - searchResult, err := t.client.Search(). - Index(t.index). // search in index t.index - Query(elastic.NewTermQuery("user", "olivere")). // 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(ctx) // execute - if err != nil { - //failf("Search failed: %v\n", err) - t.runCh <- RunInfo{Success: false} - continue - } - - // 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.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 tweet Tweet - err := json.Unmarshal(*hit.Source, &tweet) - if err != nil { - // Deserialization failed - //failf("Deserialize failed: %v\n", err) - t.runCh <- RunInfo{Success: false} - continue - } - - // Work with tweet - //fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) - } - } else { - // No hits - //fmt.Print("Found no tweets\n") - } - - t.runCh <- RunInfo{Success: true} - - // Sleep some time - time.Sleep(time.Duration(rand.Intn(500)) * time.Millisecond) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/cluster_health.go b/vendor/gopkg.in/olivere/elastic.v5/cluster_health.go index f960cfe8e..a3ee72cd1 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/cluster_health.go +++ b/vendor/gopkg.in/olivere/elastic.v5/cluster_health.go @@ -10,7 +10,7 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // ClusterHealthService allows to get a very simple status on the health of the cluster. @@ -131,7 +131,7 @@ func (s *ClusterHealthService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.level != "" { params.Set("level", s.level) @@ -179,11 +179,7 @@ func (s *ClusterHealthService) Do(ctx context.Context) (*ClusterHealthResponse, } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/cluster_health_test.go b/vendor/gopkg.in/olivere/elastic.v5/cluster_health_test.go deleted file mode 100644 index c2caee985..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/cluster_health_test.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "net/url" - "testing" -) - -func TestClusterHealth(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - // Get cluster health - res, err := client.ClusterHealth().Index(testIndexName).Level("shards").Pretty(true).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatalf("expected res to be != nil; got: %v", res) - } - if res.Status != "green" && res.Status != "red" && res.Status != "yellow" { - t.Fatalf("expected status \"green\", \"red\", or \"yellow\"; got: %q", res.Status) - } -} - -func TestClusterHealthURLs(t *testing.T) { - tests := []struct { - Service *ClusterHealthService - ExpectedPath string - ExpectedParams url.Values - }{ - { - Service: &ClusterHealthService{ - indices: []string{}, - }, - ExpectedPath: "/_cluster/health", - }, - { - Service: &ClusterHealthService{ - indices: []string{"twitter"}, - }, - ExpectedPath: "/_cluster/health/twitter", - }, - { - Service: &ClusterHealthService{ - indices: []string{"twitter", "gplus"}, - }, - ExpectedPath: "/_cluster/health/twitter%2Cgplus", - }, - { - Service: &ClusterHealthService{ - indices: []string{"twitter"}, - waitForStatus: "yellow", - }, - ExpectedPath: "/_cluster/health/twitter", - ExpectedParams: url.Values{"wait_for_status": []string{"yellow"}}, - }, - } - - for _, test := range tests { - gotPath, gotParams, err := test.Service.buildURL() - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if gotPath != test.ExpectedPath { - t.Errorf("expected URL path = %q; got: %q", test.ExpectedPath, gotPath) - } - if gotParams.Encode() != test.ExpectedParams.Encode() { - t.Errorf("expected URL params = %v; got: %v", test.ExpectedParams, gotParams) - } - } -} - -func TestClusterHealthWaitForStatus(t *testing.T) { - client := setupTestClientAndCreateIndex(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) - - // Ensure preconditions are met: A green cluster. - health, err := client.ClusterHealth().Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if got, want := health.Status, "green"; got != want { - t.Skipf("precondition failed: expected cluster to be %q, not %q", want, got) - } - - // Cluster health on an index that does not exist should never get to yellow - health, err = client.ClusterHealth().Index("no-such-index").WaitForStatus("yellow").Timeout("1s").Do(context.TODO()) - if err == nil { - t.Fatalf("expected timeout error; got: %v", err) - } - if !IsTimeout(err) { - t.Fatalf("expected timeout error; got: %v", err) - } - if health != nil { - t.Fatalf("expected no response; got: %v", health) - } - - // Cluster wide health - health, err = client.ClusterHealth().WaitForGreenStatus().Timeout("10s").Do(context.TODO()) - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if health.TimedOut != false { - t.Fatalf("expected no timeout; got: %v "+ - "(does your local cluster contain unassigned shards?)", health.TimedOut) - } - if health.Status != "green" { - t.Fatalf("expected health = %q; got: %q", "green", health.Status) - } - - // Cluster wide health via shortcut on client - err = client.WaitForGreenStatus("10s") - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/cluster_state.go b/vendor/gopkg.in/olivere/elastic.v5/cluster_state.go index 54e9aa428..d6e608211 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/cluster_state.go +++ b/vendor/gopkg.in/olivere/elastic.v5/cluster_state.go @@ -10,12 +10,12 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // ClusterStateService allows to get a comprehensive state information of the whole cluster. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/cluster-state.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/cluster-state.html // for details. type ClusterStateService struct { client *Client @@ -123,7 +123,7 @@ func (s *ClusterStateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) @@ -165,11 +165,7 @@ func (s *ClusterStateService) Do(ctx context.Context) (*ClusterStateResponse, er } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } @@ -239,10 +235,10 @@ type clusterStateRoutingNode struct { } type indexTemplateMetaData struct { - IndexPatterns []string `json:"index_patterns"` // e.g. ["store-*"] - Order int `json:"order"` - Settings map[string]interface{} `json:"settings"` // index settings - Mappings map[string]interface{} `json:"mappings"` // type name -> mapping + Template string `json:"template"` // e.g. "store-*" + Order int `json:"order"` + Settings map[string]interface{} `json:"settings"` // index settings + Mappings map[string]interface{} `json:"mappings"` // type name -> mapping } type indexMetaData struct { diff --git a/vendor/gopkg.in/olivere/elastic.v5/cluster_state_test.go b/vendor/gopkg.in/olivere/elastic.v5/cluster_state_test.go deleted file mode 100644 index 6eedb0c1b..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/cluster_state_test.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "net/url" - "testing" -) - -func TestClusterState(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - // Get cluster state - res, err := client.ClusterState().Index("_all").Metric("_all").Pretty(true).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatalf("expected res to be != nil; got: %v", res) - } - if res.ClusterName == "" { - t.Fatalf("expected a cluster name; got: %q", res.ClusterName) - } -} - -func TestClusterStateURLs(t *testing.T) { - tests := []struct { - Service *ClusterStateService - ExpectedPath string - ExpectedParams url.Values - }{ - { - Service: &ClusterStateService{ - indices: []string{}, - metrics: []string{}, - }, - ExpectedPath: "/_cluster/state/_all/_all", - }, - { - Service: &ClusterStateService{ - indices: []string{"twitter"}, - metrics: []string{}, - }, - ExpectedPath: "/_cluster/state/_all/twitter", - }, - { - Service: &ClusterStateService{ - indices: []string{"twitter", "gplus"}, - metrics: []string{}, - }, - ExpectedPath: "/_cluster/state/_all/twitter%2Cgplus", - }, - { - Service: &ClusterStateService{ - indices: []string{}, - metrics: []string{"nodes"}, - }, - ExpectedPath: "/_cluster/state/nodes/_all", - }, - { - Service: &ClusterStateService{ - indices: []string{"twitter"}, - metrics: []string{"nodes"}, - }, - ExpectedPath: "/_cluster/state/nodes/twitter", - }, - { - Service: &ClusterStateService{ - indices: []string{"twitter"}, - metrics: []string{"nodes"}, - masterTimeout: "1s", - }, - ExpectedPath: "/_cluster/state/nodes/twitter", - ExpectedParams: url.Values{"master_timeout": []string{"1s"}}, - }, - } - - for _, test := range tests { - gotPath, gotParams, err := test.Service.buildURL() - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if gotPath != test.ExpectedPath { - t.Errorf("expected URL path = %q; got: %q", test.ExpectedPath, gotPath) - } - if gotParams.Encode() != test.ExpectedParams.Encode() { - t.Errorf("expected URL params = %v; got: %v", test.ExpectedParams, gotParams) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/cluster_stats.go b/vendor/gopkg.in/olivere/elastic.v5/cluster_stats.go index 4d05c2e97..8c5374d0f 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/cluster_stats.go +++ b/vendor/gopkg.in/olivere/elastic.v5/cluster_stats.go @@ -10,11 +10,11 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // ClusterStatsService is documented at -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/cluster-stats.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/cluster-stats.html. type ClusterStatsService struct { client *Client pretty bool @@ -78,7 +78,7 @@ func (s *ClusterStatsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.flatSettings != nil { params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) @@ -108,11 +108,7 @@ func (s *ClusterStatsService) Do(ctx context.Context) (*ClusterStatsResponse, er } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } @@ -179,8 +175,10 @@ type ClusterStatsIndicesDocs struct { } type ClusterStatsIndicesStore struct { - Size string `json:"size"` // e.g. "5.3gb" - SizeInBytes int64 `json:"size_in_bytes"` + Size string `json:"size"` // e.g. "5.3gb" + SizeInBytes int64 `json:"size_in_bytes"` + ThrottleTime string `json:"throttle_time"` // e.g. "0s" + ThrottleTimeInMillis int64 `json:"throttle_time_in_millis"` } type ClusterStatsIndicesFieldData struct { diff --git a/vendor/gopkg.in/olivere/elastic.v5/cluster_stats_test.go b/vendor/gopkg.in/olivere/elastic.v5/cluster_stats_test.go deleted file mode 100644 index fe6da4704..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/cluster_stats_test.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "net/url" - "testing" -) - -func TestClusterStats(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - // Get cluster stats - res, err := client.ClusterStats().Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatalf("expected res to be != nil; got: %v", res) - } - if res.ClusterName == "" { - t.Fatalf("expected a cluster name; got: %q", res.ClusterName) - } - if res.Nodes == nil { - t.Fatalf("expected nodes; got: %v", res.Nodes) - } - if res.Nodes.Count == nil { - t.Fatalf("expected nodes count; got: %v", res.Nodes.Count) - } -} - -func TestClusterStatsURLs(t *testing.T) { - fFlag := false - tFlag := true - - tests := []struct { - Service *ClusterStatsService - ExpectedPath string - ExpectedParams url.Values - }{ - { - Service: &ClusterStatsService{ - nodeId: []string{}, - }, - ExpectedPath: "/_cluster/stats", - }, - { - Service: &ClusterStatsService{ - nodeId: []string{"node1"}, - }, - ExpectedPath: "/_cluster/stats/nodes/node1", - }, - { - Service: &ClusterStatsService{ - nodeId: []string{"node1", "node2"}, - }, - ExpectedPath: "/_cluster/stats/nodes/node1%2Cnode2", - }, - { - Service: &ClusterStatsService{ - nodeId: []string{}, - flatSettings: &tFlag, - }, - ExpectedPath: "/_cluster/stats", - ExpectedParams: url.Values{"flat_settings": []string{"true"}}, - }, - { - Service: &ClusterStatsService{ - nodeId: []string{"node1"}, - flatSettings: &fFlag, - }, - ExpectedPath: "/_cluster/stats/nodes/node1", - ExpectedParams: url.Values{"flat_settings": []string{"false"}}, - }, - } - - for _, test := range tests { - gotPath, gotParams, err := test.Service.buildURL() - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if gotPath != test.ExpectedPath { - t.Errorf("expected URL path = %q; got: %q", test.ExpectedPath, gotPath) - } - if gotParams.Encode() != test.ExpectedParams.Encode() { - t.Errorf("expected URL params = %v; got: %v", test.ExpectedParams, gotParams) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/config/config_test.go b/vendor/gopkg.in/olivere/elastic.v5/config/config_test.go deleted file mode 100644 index caa3bbadb..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/config/config_test.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package config - -import "testing" - -func TestParse(t *testing.T) { - urls := "http://user:pwd@elastic:19220/store-blobs?shards=5&replicas=2&sniff=true&errorlog=elastic.error.log&infolog=elastic.info.log&tracelog=elastic.trace.log" - cfg, err := Parse(urls) - if err != nil { - t.Fatal(err) - } - if want, got := "http://elastic:19220", cfg.URL; want != got { - t.Fatalf("expected URL = %q, got %q", want, got) - } - if want, got := "store-blobs", cfg.Index; want != got { - t.Fatalf("expected Index = %q, got %q", want, got) - } - if want, got := "user", cfg.Username; want != got { - t.Fatalf("expected Username = %q, got %q", want, got) - } - if want, got := "pwd", cfg.Password; want != got { - t.Fatalf("expected Password = %q, got %q", want, got) - } - if want, got := 5, cfg.Shards; want != got { - t.Fatalf("expected Shards = %v, got %v", want, got) - } - if want, got := 2, cfg.Replicas; want != got { - t.Fatalf("expected Replicas = %v, got %v", want, got) - } - if want, got := true, *cfg.Sniff; want != got { - t.Fatalf("expected Sniff = %v, got %v", want, got) - } - if want, got := "elastic.error.log", cfg.Errorlog; want != got { - t.Fatalf("expected Errorlog = %q, got %q", want, got) - } - if want, got := "elastic.info.log", cfg.Infolog; want != got { - t.Fatalf("expected Infolog = %q, got %q", want, got) - } - if want, got := "elastic.trace.log", cfg.Tracelog; want != got { - t.Fatalf("expected Tracelog = %q, got %q", want, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/count.go b/vendor/gopkg.in/olivere/elastic.v5/count.go index 44416fab0..d7aca4801 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/count.go +++ b/vendor/gopkg.in/olivere/elastic.v5/count.go @@ -8,9 +8,10 @@ import ( "context" "fmt" "net/url" + "strconv" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // CountService is a convenient service for determining the @@ -35,6 +36,7 @@ type CountService struct { q string query Query routing string + terminateAfter *int bodyJson interface{} bodyString string } @@ -158,6 +160,13 @@ func (s *CountService) Routing(routing string) *CountService { return s } +// TerminateAfter indicates the maximum count for each shard, upon reaching +// which the query execution will terminate early. +func (s *CountService) TerminateAfter(terminateAfter int) *CountService { + s.terminateAfter = &terminateAfter + return s +} + // Pretty indicates that the JSON response be indented and human readable. func (s *CountService) Pretty(pretty bool) *CountService { s.pretty = pretty @@ -207,7 +216,7 @@ func (s *CountService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) @@ -248,6 +257,9 @@ func (s *CountService) buildURL() (string, url.Values, error) { if s.routing != "" { params.Set("routing", s.routing) } + if s.terminateAfter != nil { + params.Set("terminate_after", strconv.Itoa(*s.terminateAfter)) + } return path, params, nil } @@ -286,12 +298,7 @@ func (s *CountService) Do(ctx context.Context) (int64, error) { } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, body) if err != nil { return 0, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/count_test.go b/vendor/gopkg.in/olivere/elastic.v5/count_test.go deleted file mode 100644 index a0ee52112..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/count_test.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestCountURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Types []string - Expected string - }{ - { - []string{}, - []string{}, - "/_all/_count", - }, - { - []string{}, - []string{"tweet"}, - "/_all/tweet/_count", - }, - { - []string{"twitter-*"}, - []string{"tweet", "follower"}, - "/twitter-%2A/tweet%2Cfollower/_count", - }, - { - []string{"twitter-2014", "twitter-2015"}, - []string{"tweet", "follower"}, - "/twitter-2014%2Ctwitter-2015/tweet%2Cfollower/_count", - }, - } - - for _, test := range tests { - path, _, err := client.Count().Index(test.Indices...).Type(test.Types...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} - -func TestCount(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Count documents - count, err := client.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != 3 { - t.Errorf("expected Count = %d; got %d", 3, count) - } - - // Count documents - count, err = client.Count(testIndexName).Type("doc").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != 3 { - t.Errorf("expected Count = %d; got %d", 3, count) - } - - // Count documents - count, err = client.Count(testIndexName).Type("gezwitscher").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != 0 { - t.Errorf("expected Count = %d; got %d", 0, count) - } - - // Count with query - query := NewTermQuery("user", "olivere") - count, err = client.Count(testIndexName).Query(query).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != 2 { - t.Errorf("expected Count = %d; got %d", 2, count) - } - - // Count with query and type - query = NewTermQuery("user", "olivere") - count, err = client.Count(testIndexName).Type("doc").Query(query).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != 2 { - t.Errorf("expected Count = %d; got %d", 2, count) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/decoder_test.go b/vendor/gopkg.in/olivere/elastic.v5/decoder_test.go deleted file mode 100644 index 2c3dde8ca..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/decoder_test.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "bytes" - "context" - "encoding/json" - "sync/atomic" - "testing" -) - -type decoder struct { - dec json.Decoder - - N int64 -} - -func (d *decoder) Decode(data []byte, v interface{}) error { - atomic.AddInt64(&d.N, 1) - dec := json.NewDecoder(bytes.NewReader(data)) - dec.UseNumber() - return dec.Decode(v) -} - -func TestDecoder(t *testing.T) { - dec := &decoder{} - client := setupTestClientAndCreateIndex(t, SetDecoder(dec), SetMaxRetries(0)) - - tweet := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - - // Add a document - indexResult, err := client.Index(). - Index(testIndexName). - Type("doc"). - Id("1"). - BodyJson(&tweet). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if indexResult == nil { - t.Errorf("expected result to be != nil; got: %v", indexResult) - } - if dec.N == 0 { - t.Errorf("expected at least 1 call of decoder; got: %d", dec.N) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/delete.go b/vendor/gopkg.in/olivere/elastic.v5/delete.go index 1e20de11f..3efdce46b 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/delete.go +++ b/vendor/gopkg.in/olivere/elastic.v5/delete.go @@ -7,16 +7,17 @@ package elastic import ( "context" "fmt" - "net/http" "net/url" - "github.com/olivere/elastic/uritemplates" + "net/http" + + "gopkg.in/olivere/elastic.v5/uritemplates" ) // DeleteService allows to delete a typed JSON document from a specified // index based on its id. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-delete.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-delete.html // for details. type DeleteService struct { client *Client @@ -125,7 +126,7 @@ func (s *DeleteService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.refresh != "" { params.Set("refresh", s.refresh) @@ -185,12 +186,7 @@ func (s *DeleteService) Do(ctx context.Context) (*DeleteResponse, error) { } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "DELETE", - Path: path, - Params: params, - IgnoreErrors: []int{http.StatusNotFound}, - }) + res, err := s.client.PerformRequest(ctx, "DELETE", path, params, nil, http.StatusNotFound) if err != nil { return nil, err } @@ -223,4 +219,5 @@ type DeleteResponse struct { PrimaryTerm int64 `json:"_primary_term,omitempty"` Status int `json:"status,omitempty"` ForcedRefresh bool `json:"forced_refresh,omitempty"` + Found bool `json:"found,omitempty"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/delete_by_query.go b/vendor/gopkg.in/olivere/elastic.v5/delete_by_query.go index 694d81c2a..a890bd84f 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/delete_by_query.go +++ b/vendor/gopkg.in/olivere/elastic.v5/delete_by_query.go @@ -10,11 +10,11 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // DeleteByQueryService deletes documents that match a query. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-delete-by-query.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-delete-by-query.html. type DeleteByQueryService struct { client *Client index []string @@ -598,12 +598,7 @@ func (s *DeleteByQueryService) Do(ctx context.Context) (*BulkIndexByScrollRespon } // Get response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, body) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/delete_by_query_test.go b/vendor/gopkg.in/olivere/elastic.v5/delete_by_query_test.go deleted file mode 100644 index 40e45b871..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/delete_by_query_test.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestDeleteByQueryBuildURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Indices []string - Types []string - Expected string - ExpectErr bool - }{ - { - []string{}, - []string{}, - "", - true, - }, - { - []string{"index1"}, - []string{}, - "/index1/_delete_by_query", - false, - }, - { - []string{"index1", "index2"}, - []string{}, - "/index1%2Cindex2/_delete_by_query", - false, - }, - { - []string{}, - []string{"type1"}, - "", - true, - }, - { - []string{"index1"}, - []string{"type1"}, - "/index1/type1/_delete_by_query", - false, - }, - { - []string{"index1", "index2"}, - []string{"type1", "type2"}, - "/index1%2Cindex2/type1%2Ctype2/_delete_by_query", - false, - }, - } - - for i, test := range tests { - builder := client.DeleteByQuery().Index(test.Indices...).Type(test.Types...) - err := builder.Validate() - if err != nil { - if !test.ExpectErr { - t.Errorf("case #%d: %v", i+1, err) - continue - } - } else { - // err == nil - if test.ExpectErr { - t.Errorf("case #%d: expected error", i+1) - continue - } - path, _, _ := builder.buildURL() - if path != test.Expected { - t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) - } - } - } -} - -func TestDeleteByQuery(t *testing.T) { - // client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Count documents - count, err := client.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != 3 { - t.Fatalf("expected count = %d; got: %d", 3, count) - } - - // Delete all documents by sandrae - q := NewTermQuery("user", "sandrae") - res, err := client.DeleteByQuery(). - Index(testIndexName). - Type("doc"). - Query(q). - Pretty(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatalf("expected response != nil; got: %v", res) - } - - // Flush and check count - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - count, err = client.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != 2 { - t.Fatalf("expected Count = %d; got: %d", 2, count) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/delete_template.go b/vendor/gopkg.in/olivere/elastic.v5/delete_template.go new file mode 100644 index 000000000..4775baf84 --- /dev/null +++ b/vendor/gopkg.in/olivere/elastic.v5/delete_template.go @@ -0,0 +1,109 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + + "gopkg.in/olivere/elastic.v5/uritemplates" +) + +// DeleteTemplateService deletes a search template. More information can +// be found at https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-template.html. +type DeleteTemplateService struct { + client *Client + pretty bool + id string + version *int + versionType string +} + +// NewDeleteTemplateService creates a new DeleteTemplateService. +func NewDeleteTemplateService(client *Client) *DeleteTemplateService { + return &DeleteTemplateService{ + client: client, + } +} + +// Id is the template ID. +func (s *DeleteTemplateService) Id(id string) *DeleteTemplateService { + s.id = id + return s +} + +// Version an explicit version number for concurrency control. +func (s *DeleteTemplateService) Version(version int) *DeleteTemplateService { + s.version = &version + return s +} + +// VersionType specifies a version type. +func (s *DeleteTemplateService) VersionType(versionType string) *DeleteTemplateService { + s.versionType = versionType + return s +} + +// buildURL builds the URL for the operation. +func (s *DeleteTemplateService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_search/template/{id}", map[string]string{ + "id": s.id, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.version != nil { + params.Set("version", fmt.Sprintf("%d", *s.version)) + } + if s.versionType != "" { + params.Set("version_type", s.versionType) + } + + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *DeleteTemplateService) Validate() error { + var invalid []string + if s.id == "" { + invalid = append(invalid, "Id") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *DeleteTemplateService) Do(ctx context.Context) (*AcknowledgedResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, "DELETE", path, params, nil) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(AcknowledgedResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v5/delete_test.go b/vendor/gopkg.in/olivere/elastic.v5/delete_test.go deleted file mode 100644 index 571fcf589..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/delete_test.go +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestDelete(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Count documents - count, err := client.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != 3 { - t.Errorf("expected Count = %d; got %d", 3, count) - } - - // Delete document 1 - res, err := client.Delete().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if want, have := "deleted", res.Result; want != have { - t.Errorf("expected Result = %q; got %q", want, have) - } - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - count, err = client.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != 2 { - t.Errorf("expected Count = %d; got %d", 2, count) - } - - // Delete non existent document 99 - res, err = client.Delete().Index(testIndexName).Type("doc").Id("99").Refresh("true").Do(context.TODO()) - if err == nil { - t.Fatal("expected error") - } - if !IsNotFound(err) { - t.Fatalf("expected 404, got: %v", err) - } - if _, ok := err.(*Error); !ok { - t.Fatalf("expected error type *Error, got: %T", err) - } - if res == nil { - t.Fatal("expected response") - } - if have, want := res.Id, "99"; have != want { - t.Errorf("expected _id = %q, got %q", have, want) - } - if have, want := res.Index, testIndexName; have != want { - t.Errorf("expected _index = %q, got %q", have, want) - } - if have, want := res.Type, "doc"; have != want { - t.Errorf("expected _type = %q, got %q", have, want) - } - if have, want := res.Result, "not_found"; have != want { - t.Errorf("expected Result = %q, got %q", have, want) - } - - count, err = client.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != 2 { - t.Errorf("expected Count = %d; got %d", 2, count) - } -} - -func TestDeleteValidate(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // No index name -> fail with error - res, err := NewDeleteService(client).Type("doc").Id("1").Do(context.TODO()) - if err == nil { - t.Fatalf("expected Delete to fail without index name") - } - if res != nil { - t.Fatalf("expected result to be == nil; got: %v", res) - } - - // No type -> fail with error - res, err = NewDeleteService(client).Index(testIndexName).Id("1").Do(context.TODO()) - if err == nil { - t.Fatalf("expected Delete to fail without type") - } - if res != nil { - t.Fatalf("expected result to be == nil; got: %v", res) - } - - // No id -> fail with error - res, err = NewDeleteService(client).Index(testIndexName).Type("doc").Do(context.TODO()) - if err == nil { - t.Fatalf("expected Delete to fail without id") - } - if res != nil { - t.Fatalf("expected result to be == nil; got: %v", res) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/errors_test.go b/vendor/gopkg.in/olivere/elastic.v5/errors_test.go deleted file mode 100644 index 75d3949e5..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/errors_test.go +++ /dev/null @@ -1,295 +0,0 @@ -package elastic - -import ( - "bufio" - "fmt" - "net/http" - "strings" - "testing" -) - -func TestResponseError(t *testing.T) { - raw := "HTTP/1.1 404 Not Found\r\n" + - "\r\n" + - `{"error":{"root_cause":[{"type":"index_missing_exception","reason":"no such index","index":"elastic-test"}],"type":"index_missing_exception","reason":"no such index","index":"elastic-test"},"status":404}` + "\r\n" - r := bufio.NewReader(strings.NewReader(raw)) - - req, err := http.NewRequest("GET", "/", nil) - if err != nil { - t.Fatal(err) - } - - resp, err := http.ReadResponse(r, nil) - if err != nil { - t.Fatal(err) - } - err = checkResponse(req, resp) - if err == nil { - t.Fatalf("expected error; got: %v", err) - } - - // Check for correct error message - expected := fmt.Sprintf("elastic: Error %d (%s): no such index [type=index_missing_exception]", resp.StatusCode, http.StatusText(resp.StatusCode)) - got := err.Error() - if got != expected { - t.Fatalf("expected %q; got: %q", expected, got) - } - - // Check that error is of type *elastic.Error, which contains additional information - e, ok := err.(*Error) - if !ok { - t.Fatal("expected error to be of type *elastic.Error") - } - if e.Status != resp.StatusCode { - t.Fatalf("expected status code %d; got: %d", resp.StatusCode, e.Status) - } - if e.Details == nil { - t.Fatalf("expected error details; got: %v", e.Details) - } - if got, want := e.Details.Index, "elastic-test"; got != want { - t.Fatalf("expected error details index %q; got: %q", want, got) - } - if got, want := e.Details.Type, "index_missing_exception"; got != want { - t.Fatalf("expected error details type %q; got: %q", want, got) - } - if got, want := e.Details.Reason, "no such index"; got != want { - t.Fatalf("expected error details reason %q; got: %q", want, got) - } - if got, want := len(e.Details.RootCause), 1; got != want { - t.Fatalf("expected %d error details root causes; got: %d", want, got) - } - - if got, want := e.Details.RootCause[0].Index, "elastic-test"; got != want { - t.Fatalf("expected root cause index %q; got: %q", want, got) - } - if got, want := e.Details.RootCause[0].Type, "index_missing_exception"; got != want { - t.Fatalf("expected root cause type %q; got: %q", want, got) - } - if got, want := e.Details.RootCause[0].Reason, "no such index"; got != want { - t.Fatalf("expected root cause reason %q; got: %q", want, got) - } -} - -func TestResponseErrorHTML(t *testing.T) { - raw := "HTTP/1.1 413 Request Entity Too Large\r\n" + - "\r\n" + - `<html> -<head><title>413 Request Entity Too Large</title></head> -<body bgcolor="white"> -<center><h1>413 Request Entity Too Large</h1></center> -<hr><center>nginx/1.6.2</center> -</body> -</html>` + "\r\n" - r := bufio.NewReader(strings.NewReader(raw)) - - req, err := http.NewRequest("GET", "/", nil) - if err != nil { - t.Fatal(err) - } - - resp, err := http.ReadResponse(r, nil) - if err != nil { - t.Fatal(err) - } - err = checkResponse(req, resp) - if err == nil { - t.Fatalf("expected error; got: %v", err) - } - - // Check for correct error message - expected := fmt.Sprintf("elastic: Error %d (%s)", http.StatusRequestEntityTooLarge, http.StatusText(http.StatusRequestEntityTooLarge)) - got := err.Error() - if got != expected { - t.Fatalf("expected %q; got: %q", expected, got) - } -} - -func TestResponseErrorWithIgnore(t *testing.T) { - raw := "HTTP/1.1 404 Not Found\r\n" + - "\r\n" + - `{"some":"response"}` + "\r\n" - r := bufio.NewReader(strings.NewReader(raw)) - - req, err := http.NewRequest("HEAD", "/", nil) - if err != nil { - t.Fatal(err) - } - - resp, err := http.ReadResponse(r, nil) - if err != nil { - t.Fatal(err) - } - err = checkResponse(req, resp) - if err == nil { - t.Fatalf("expected error; got: %v", err) - } - err = checkResponse(req, resp, 404) // ignore 404 errors - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } -} - -func TestIsNotFound(t *testing.T) { - if got, want := IsNotFound(nil), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsNotFound(""), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsNotFound(200), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsNotFound(404), true; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - - if got, want := IsNotFound(&Error{Status: 404}), true; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsNotFound(&Error{Status: 200}), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - - if got, want := IsNotFound(Error{Status: 404}), true; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsNotFound(Error{Status: 200}), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - - if got, want := IsNotFound(&http.Response{StatusCode: 404}), true; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsNotFound(&http.Response{StatusCode: 200}), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } -} - -func TestIsTimeout(t *testing.T) { - if got, want := IsTimeout(nil), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsTimeout(""), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsTimeout(200), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsTimeout(408), true; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - - if got, want := IsTimeout(&Error{Status: 408}), true; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsTimeout(&Error{Status: 200}), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - - if got, want := IsTimeout(Error{Status: 408}), true; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsTimeout(Error{Status: 200}), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - - if got, want := IsTimeout(&http.Response{StatusCode: 408}), true; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsTimeout(&http.Response{StatusCode: 200}), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } -} - -func TestIsConflict(t *testing.T) { - if got, want := IsConflict(nil), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsConflict(""), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsConflict(200), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsConflict(http.StatusConflict), true; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - - if got, want := IsConflict(&Error{Status: 409}), true; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsConflict(&Error{Status: 200}), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - - if got, want := IsConflict(Error{Status: 409}), true; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsConflict(Error{Status: 200}), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - - if got, want := IsConflict(&http.Response{StatusCode: 409}), true; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := IsConflict(&http.Response{StatusCode: 200}), false; got != want { - t.Errorf("expected %v; got: %v", want, got) - } -} - -func TestIsStatusCode(t *testing.T) { - tests := []struct { - Error interface{} - Code int - Want bool - }{ - // #0 - { - Error: nil, - Code: 200, - Want: false, - }, - // #1 - { - Error: "", - Code: 200, - Want: false, - }, - // #2 - { - Error: http.StatusConflict, - Code: 409, - Want: true, - }, - // #3 - { - Error: http.StatusConflict, - Code: http.StatusInternalServerError, - Want: false, - }, - // #4 - { - Error: &Error{Status: http.StatusConflict}, - Code: 409, - Want: true, - }, - // #5 - { - Error: Error{Status: http.StatusConflict}, - Code: 409, - Want: true, - }, - // #6 - { - Error: &http.Response{StatusCode: http.StatusConflict}, - Code: 409, - Want: true, - }, - } - - for i, tt := range tests { - if have, want := IsStatusCode(tt.Error, tt.Code), tt.Want; have != want { - t.Errorf("#%d: have %v, want %v", i, have, want) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/etc/elasticsearch.yml b/vendor/gopkg.in/olivere/elastic.v5/etc/elasticsearch.yml deleted file mode 100644 index 9923cfe4f..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/etc/elasticsearch.yml +++ /dev/null @@ -1,15 +0,0 @@ -# bootstrap.ignore_system_bootstrap_checks: true - -discovery.zen.minimum_master_nodes: 1 - -network.host: -- _local_ -- _site_ - -network.publish_host: _local_ - - -# Enable scripting as described here: https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-scripting.html -script.inline: true -script.stored: true -script.file: true diff --git a/vendor/gopkg.in/olivere/elastic.v5/etc/ingest-geoip/.gitkeep b/vendor/gopkg.in/olivere/elastic.v5/etc/ingest-geoip/.gitkeep deleted file mode 100644 index e69de29bb..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/etc/ingest-geoip/.gitkeep +++ /dev/null diff --git a/vendor/gopkg.in/olivere/elastic.v5/etc/jvm.options b/vendor/gopkg.in/olivere/elastic.v5/etc/jvm.options deleted file mode 100644 index d97fbc9ec..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/etc/jvm.options +++ /dev/null @@ -1,100 +0,0 @@ -## JVM configuration - -################################################################ -## IMPORTANT: JVM heap size -################################################################ -## -## You should always set the min and max JVM heap -## size to the same value. For example, to set -## the heap to 4 GB, set: -## -## -Xms4g -## -Xmx4g -## -## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html -## for more information -## -################################################################ - -# Xms represents the initial size of total heap space -# Xmx represents the maximum size of total heap space - --Xms2g --Xmx2g - -################################################################ -## Expert settings -################################################################ -## -## All settings below this section are considered -## expert settings. Don't tamper with them unless -## you understand what you are doing -## -################################################################ - -## GC configuration --XX:+UseConcMarkSweepGC --XX:CMSInitiatingOccupancyFraction=75 --XX:+UseCMSInitiatingOccupancyOnly - -## optimizations - -# disable calls to System#gc --XX:+DisableExplicitGC - -# pre-touch memory pages used by the JVM during initialization --XX:+AlwaysPreTouch - -## basic - -# force the server VM --server - -# set to headless, just in case --Djava.awt.headless=true - -# ensure UTF-8 encoding by default (e.g. filenames) --Dfile.encoding=UTF-8 - -# use our provided JNA always versus the system one --Djna.nosys=true - -# flags to keep Netty from being unsafe --Dio.netty.noUnsafe=true --Dio.netty.noKeySetOptimization=true - -# log4j 2 --Dlog4j.shutdownHookEnabled=false --Dlog4j2.disable.jmx=true --Dlog4j.skipJansi=true - -## heap dumps - -# generate a heap dump when an allocation from the Java heap fails -# heap dumps are created in the working directory of the JVM --XX:+HeapDumpOnOutOfMemoryError - -# specify an alternative path for heap dumps -# ensure the directory exists and has sufficient space -#-XX:HeapDumpPath=${heap.dump.path} - -## GC logging - -#-XX:+PrintGCDetails -#-XX:+PrintGCTimeStamps -#-XX:+PrintGCDateStamps -#-XX:+PrintClassHistogram -#-XX:+PrintTenuringDistribution -#-XX:+PrintGCApplicationStoppedTime - -# log GC status to a file with time stamps -# ensure the directory exists -#-Xloggc:${loggc} - -# Elasticsearch 5.0.0 will throw an exception on unquoted field names in JSON. -# If documents were already indexed with unquoted fields in a previous version -# of Elasticsearch, some operations may throw errors. -# -# WARNING: This option will be removed in Elasticsearch 6.0.0 and is provided -# only for migration purposes. -#-Delasticsearch.json.allow_unquoted_field_names=true diff --git a/vendor/gopkg.in/olivere/elastic.v5/etc/log4j2.properties b/vendor/gopkg.in/olivere/elastic.v5/etc/log4j2.properties deleted file mode 100644 index 9a3147f5a..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/etc/log4j2.properties +++ /dev/null @@ -1,74 +0,0 @@ -status = error - -# log action execution errors for easier debugging -logger.action.name = org.elasticsearch.action -logger.action.level = debug - -appender.console.type = Console -appender.console.name = console -appender.console.layout.type = PatternLayout -appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%m%n - -appender.rolling.type = RollingFile -appender.rolling.name = rolling -appender.rolling.fileName = ${sys:es.logs}.log -appender.rolling.layout.type = PatternLayout -appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.10000m%n -appender.rolling.filePattern = ${sys:es.logs}-%d{yyyy-MM-dd}.log -appender.rolling.policies.type = Policies -appender.rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.rolling.policies.time.interval = 1 -appender.rolling.policies.time.modulate = true - -rootLogger.level = info -rootLogger.appenderRef.console.ref = console -rootLogger.appenderRef.rolling.ref = rolling - -appender.deprecation_rolling.type = RollingFile -appender.deprecation_rolling.name = deprecation_rolling -appender.deprecation_rolling.fileName = ${sys:es.logs}_deprecation.log -appender.deprecation_rolling.layout.type = PatternLayout -appender.deprecation_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.10000m%n -appender.deprecation_rolling.filePattern = ${sys:es.logs}_deprecation-%i.log.gz -appender.deprecation_rolling.policies.type = Policies -appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy -appender.deprecation_rolling.policies.size.size = 1GB -appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy -appender.deprecation_rolling.strategy.max = 4 - -logger.deprecation.name = org.elasticsearch.deprecation -logger.deprecation.level = warn -logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling -logger.deprecation.additivity = false - -appender.index_search_slowlog_rolling.type = RollingFile -appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling -appender.index_search_slowlog_rolling.fileName = ${sys:es.logs}_index_search_slowlog.log -appender.index_search_slowlog_rolling.layout.type = PatternLayout -appender.index_search_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.10000m%n -appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs}_index_search_slowlog-%d{yyyy-MM-dd}.log -appender.index_search_slowlog_rolling.policies.type = Policies -appender.index_search_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.index_search_slowlog_rolling.policies.time.interval = 1 -appender.index_search_slowlog_rolling.policies.time.modulate = true - -logger.index_search_slowlog_rolling.name = index.search.slowlog -logger.index_search_slowlog_rolling.level = trace -logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling -logger.index_search_slowlog_rolling.additivity = false - -appender.index_indexing_slowlog_rolling.type = RollingFile -appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling -appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs}_index_indexing_slowlog.log -appender.index_indexing_slowlog_rolling.layout.type = PatternLayout -appender.index_indexing_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.10000m%n -appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs}_index_indexing_slowlog-%d{yyyy-MM-dd}.log -appender.index_indexing_slowlog_rolling.policies.type = Policies -appender.index_indexing_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy -appender.index_indexing_slowlog_rolling.policies.time.interval = 1 -appender.index_indexing_slowlog_rolling.policies.time.modulate = true - -logger.index_indexing_slowlog.name = index.indexing.slowlog.index -logger.index_indexing_slowlog.level = trace -logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling -logger.index_indexing_slowlog.additivity = false diff --git a/vendor/gopkg.in/olivere/elastic.v5/etc/scripts/.gitkeep b/vendor/gopkg.in/olivere/elastic.v5/etc/scripts/.gitkeep deleted file mode 100644 index e69de29bb..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/etc/scripts/.gitkeep +++ /dev/null diff --git a/vendor/gopkg.in/olivere/elastic.v5/example_test.go b/vendor/gopkg.in/olivere/elastic.v5/example_test.go deleted file mode 100644 index 62dc15d89..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/example_test.go +++ /dev/null @@ -1,530 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic_test - -import ( - "context" - "encoding/json" - "fmt" - "log" - "os" - "reflect" - "time" - - elastic "github.com/olivere/elastic" -) - -type Tweet struct { - User string `json:"user"` - Message string `json:"message"` - Retweets int `json:"retweets"` - Image string `json:"image,omitempty"` - Created time.Time `json:"created,omitempty"` - Tags []string `json:"tags,omitempty"` - Location string `json:"location,omitempty"` - Suggest *elastic.SuggestField `json:"suggest_field,omitempty"` -} - -func Example() { - errorlog := log.New(os.Stdout, "APP ", log.LstdFlags) - - // Obtain a client. You can also provide your own HTTP client here. - client, err := elastic.NewClient(elastic.SetErrorLog(errorlog)) - if err != nil { - // Handle error - panic(err) - } - - // Trace request and response details like this - //client.SetTracer(log.New(os.Stdout, "", 0)) - - // Ping the Elasticsearch server to get e.g. the version number - info, code, err := client.Ping("http://127.0.0.1:9200").Do(context.Background()) - if err != nil { - // Handle error - panic(err) - } - fmt.Printf("Elasticsearch returned with code %d and version %s\n", code, info.Version.Number) - - // Getting the ES version number is quite common, so there's a shortcut - esversion, err := client.ElasticsearchVersion("http://127.0.0.1:9200") - if err != nil { - // Handle error - panic(err) - } - fmt.Printf("Elasticsearch version %s\n", esversion) - - // Use the IndexExists service to check if a specified index exists. - exists, err := client.IndexExists("twitter").Do(context.Background()) - if err != nil { - // Handle error - panic(err) - } - if !exists { - // Create a new index. - mapping := ` -{ - "settings":{ - "number_of_shards":1, - "number_of_replicas":0 - }, - "mappings":{ - "doc":{ - "properties":{ - "user":{ - "type":"keyword" - }, - "message":{ - "type":"text", - "store": true, - "fielddata": true - }, - "retweets":{ - "type":"long" - }, - "tags":{ - "type":"keyword" - }, - "location":{ - "type":"geo_point" - }, - "suggest_field":{ - "type":"completion" - } - } - } - } -} -` - createIndex, err := client.CreateIndex("twitter").Body(mapping).Do(context.Background()) - 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", Retweets: 0} - put1, err := client.Index(). - Index("twitter"). - Type("doc"). - Id("1"). - BodyJson(tweet1). - Do(context.Background()) - 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("twitter"). - Type("doc"). - Id("2"). - BodyString(tweet2). - Do(context.Background()) - 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("twitter"). - Type("doc"). - Id("1"). - Do(context.Background()) - 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("twitter").Do(context.Background()) - if err != nil { - 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(context.Background()) // 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.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") - } - - // Update a tweet by the update API of Elasticsearch. - // We just increment the number of retweets. - script := elastic.NewScript("ctx._source.retweets += params.num").Param("num", 1) - update, err := client.Update().Index("twitter").Type("doc").Id("1"). - Script(script). - Upsert(map[string]interface{}{"retweets": 0}). - Do(context.Background()) - if err != nil { - // Handle error - panic(err) - } - fmt.Printf("New version of tweet %q is now %d", update.Id, update.Version) - - // ... - - // Delete an index. - deleteIndex, err := client.DeleteIndex("twitter").Do(context.Background()) - if err != nil { - // Handle error - panic(err) - } - if !deleteIndex.Acknowledged { - // Not acknowledged - } -} - -func ExampleClient_NewClient_default() { - // Obtain a client to the Elasticsearch instance on http://127.0.0.1:9200. - client, err := elastic.NewClient() - if err != nil { - // Handle error - fmt.Printf("connection failed: %v\n", err) - } else { - fmt.Println("connected") - } - _ = client - // Output: - // connected -} - -func ExampleClient_NewClient_cluster() { - // Obtain a client for an Elasticsearch cluster of two nodes, - // running on 10.0.1.1 and 10.0.1.2. - client, err := elastic.NewClient(elastic.SetURL("http://10.0.1.1:9200", "http://10.0.1.2:9200")) - if err != nil { - // Handle error - panic(err) - } - _ = client -} - -func ExampleClient_NewClient_manyOptions() { - // Obtain a client for an Elasticsearch cluster of two nodes, - // running on 10.0.1.1 and 10.0.1.2. Do not run the sniffer. - // Set the healthcheck interval to 10s. When requests fail, - // retry 5 times. Print error messages to os.Stderr and informational - // messages to os.Stdout. - client, err := elastic.NewClient( - elastic.SetURL("http://10.0.1.1:9200", "http://10.0.1.2:9200"), - elastic.SetSniff(false), - elastic.SetHealthcheckInterval(10*time.Second), - elastic.SetMaxRetries(5), - elastic.SetErrorLog(log.New(os.Stderr, "ELASTIC ", log.LstdFlags)), - elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags))) - if err != nil { - // Handle error - panic(err) - } - _ = client -} - -func ExampleIndexExistsService() { - // Get a client to the local Elasticsearch instance. - client, err := elastic.NewClient() - if err != nil { - // Handle error - panic(err) - } - // Use the IndexExists service to check if the index "twitter" exists. - exists, err := client.IndexExists("twitter").Do(context.Background()) - if err != nil { - // Handle error - panic(err) - } - if exists { - // ... - } -} - -func ExampleCreateIndexService() { - // Get a client to the local Elasticsearch instance. - client, err := elastic.NewClient() - if err != nil { - // Handle error - panic(err) - } - // Create a new index. - createIndex, err := client.CreateIndex("twitter").Do(context.Background()) - if err != nil { - // Handle error - panic(err) - } - if !createIndex.Acknowledged { - // Not acknowledged - } -} - -func ExampleDeleteIndexService() { - // Get a client to the local Elasticsearch instance. - client, err := elastic.NewClient() - if err != nil { - // Handle error - panic(err) - } - // Delete an index. - deleteIndex, err := client.DeleteIndex("twitter").Do(context.Background()) - if err != nil { - // Handle error - panic(err) - } - if !deleteIndex.Acknowledged { - // Not acknowledged - } -} - -func ExampleSearchService() { - // Get a client to the local Elasticsearch instance. - client, err := elastic.NewClient() - 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(context.Background()) // 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.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") - } -} - -func ExampleAggregations() { - // Get a client to the local Elasticsearch instance. - client, err := elastic.NewClient() - if err != nil { - // Handle error - panic(err) - } - - // Create an aggregation for users and a sub-aggregation for a date histogram of tweets (per year). - timeline := elastic.NewTermsAggregation().Field("user").Size(10).OrderByCountDesc() - histogram := elastic.NewDateHistogramAggregation().Field("created").Interval("year") - timeline = timeline.SubAggregation("history", histogram) - - // Search with a term query - searchResult, err := client.Search(). - Index("twitter"). // search in index "twitter" - Query(elastic.NewMatchAllQuery()). // return all results, but ... - SearchType("count"). // ... do not return hits, just the count - Aggregation("timeline", timeline). // add our aggregation to the query - Pretty(true). // pretty print request and response JSON - Do(context.Background()) // execute - if err != nil { - // Handle error - panic(err) - } - - // Access "timeline" aggregate in search result. - agg, found := searchResult.Aggregations.Terms("timeline") - if !found { - log.Fatalf("we should have a terms aggregation called %q", "timeline") - } - for _, userBucket := range agg.Buckets { - // Every bucket should have the user field as key. - user := userBucket.Key - - // The sub-aggregation history should have the number of tweets per year. - histogram, found := userBucket.DateHistogram("history") - if found { - for _, year := range histogram.Buckets { - fmt.Printf("user %q has %d tweets in %q\n", user, year.DocCount, year.KeyAsString) - } - } - } -} - -func ExampleSearchResult() { - client, err := elastic.NewClient() - if err != nil { - panic(err) - } - - // Do a search - searchResult, err := client.Search().Index("twitter").Query(elastic.NewMatchAllQuery()).Do(context.Background()) - if err != nil { - 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 utility 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) - } - fmt.Printf("Found a total of %d tweets\n", searchResult.TotalHits()) - - // Here's how you iterate hits with full control. - 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") - } -} - -func ExampleClusterHealthService() { - client, err := elastic.NewClient() - if err != nil { - panic(err) - } - - // Get cluster health - res, err := client.ClusterHealth().Index("twitter").Do(context.Background()) - if err != nil { - panic(err) - } - if res == nil { - panic(err) - } - fmt.Printf("Cluster status is %q\n", res.Status) -} - -func ExampleClusterHealthService_WaitForGreen() { - client, err := elastic.NewClient() - if err != nil { - panic(err) - } - - // Wait for status green - res, err := client.ClusterHealth().WaitForStatus("green").Timeout("15s").Do(context.Background()) - if err != nil { - panic(err) - } - if res.TimedOut { - fmt.Printf("time out waiting for cluster status %q\n", "green") - } else { - fmt.Printf("cluster status is %q\n", res.Status) - } -} - -func ExampleClusterStateService() { - client, err := elastic.NewClient() - if err != nil { - panic(err) - } - - // Get cluster state - res, err := client.ClusterState().Metric("version").Do(context.Background()) - if err != nil { - panic(err) - } - fmt.Printf("Cluster %q has version %d", res.ClusterName, res.Version) -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/exists.go b/vendor/gopkg.in/olivere/elastic.v5/exists.go index ae5a88fa7..7cae2bde8 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/exists.go +++ b/vendor/gopkg.in/olivere/elastic.v5/exists.go @@ -10,12 +10,12 @@ import ( "net/http" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // ExistsService checks for the existence of a document using HEAD. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-get.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-get.html // for details. type ExistsService struct { client *Client @@ -107,7 +107,7 @@ func (s *ExistsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.realtime != nil { params.Set("realtime", fmt.Sprintf("%v", *s.realtime)) @@ -159,12 +159,7 @@ func (s *ExistsService) Do(ctx context.Context) (bool, error) { } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "HEAD", - Path: path, - Params: params, - IgnoreErrors: []int{404}, - }) + res, err := s.client.PerformRequest(ctx, "HEAD", path, params, nil, 404) if err != nil { return false, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/exists_test.go b/vendor/gopkg.in/olivere/elastic.v5/exists_test.go deleted file mode 100644 index 9b834223d..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/exists_test.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestExists(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) - - exists, err := client.Exists().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !exists { - t.Fatal("expected document to exist") - } -} - -func TestExistsValidate(t *testing.T) { - client := setupTestClient(t) - - // No index -> fail with error - res, err := NewExistsService(client).Type("doc").Id("1").Do(context.TODO()) - if err == nil { - t.Fatalf("expected Delete to fail without index name") - } - if res != false { - t.Fatalf("expected result to be false; got: %v", res) - } - - // No type -> fail with error - res, err = NewExistsService(client).Index(testIndexName).Id("1").Do(context.TODO()) - if err == nil { - t.Fatalf("expected Delete to fail without index name") - } - if res != false { - t.Fatalf("expected result to be false; got: %v", res) - } - - // No id -> fail with error - res, err = NewExistsService(client).Index(testIndexName).Type("doc").Do(context.TODO()) - if err == nil { - t.Fatalf("expected Delete to fail without index name") - } - if res != false { - t.Fatalf("expected result to be false; got: %v", res) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/explain.go b/vendor/gopkg.in/olivere/elastic.v5/explain.go index 2b975ad5d..bdfa00f1d 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/explain.go +++ b/vendor/gopkg.in/olivere/elastic.v5/explain.go @@ -10,12 +10,12 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // ExplainService computes a score explanation for a query and // a specific document. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-explain.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-explain.html. type ExplainService struct { client *Client pretty bool @@ -208,7 +208,7 @@ func (s *ExplainService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if len(s.xSource) > 0 { params.Set("_source", strings.Join(s.xSource, ",")) @@ -298,12 +298,7 @@ func (s *ExplainService) Do(ctx context.Context) (*ExplainResponse, error) { } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, body) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/explain_test.go b/vendor/gopkg.in/olivere/elastic.v5/explain_test.go deleted file mode 100644 index 22cb9668a..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/explain_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestExplain(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - - // Add a document - indexResult, err := client.Index(). - Index(testIndexName). - Type("doc"). - Id("1"). - BodyJson(&tweet1). - Refresh("true"). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if indexResult == nil { - t.Errorf("expected result to be != nil; got: %v", indexResult) - } - - // Explain - query := NewTermQuery("user", "olivere") - expl, err := client.Explain(testIndexName, "doc", "1").Query(query).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if expl == nil { - t.Fatal("expected to return an explanation") - } - if !expl.Matched { - t.Errorf("expected matched to be %v; got: %v", true, expl.Matched) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/fetch_source_context.go b/vendor/gopkg.in/olivere/elastic.v5/fetch_source_context.go index 874c4c1da..53e7fcd90 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/fetch_source_context.go +++ b/vendor/gopkg.in/olivere/elastic.v5/fetch_source_context.go @@ -14,7 +14,7 @@ import ( // with various endpoints, e.g. when searching for documents, retrieving // individual documents, or even updating documents. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-source-filtering.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.5/search-request-source-filtering.html // for details. type FetchSourceContext struct { fetchSource bool diff --git a/vendor/gopkg.in/olivere/elastic.v5/fetch_source_context_test.go b/vendor/gopkg.in/olivere/elastic.v5/fetch_source_context_test.go deleted file mode 100644 index b98549036..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/fetch_source_context_test.go +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestFetchSourceContextNoFetchSource(t *testing.T) { - builder := NewFetchSourceContext(false) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `false` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFetchSourceContextNoFetchSourceIgnoreIncludesAndExcludes(t *testing.T) { - builder := NewFetchSourceContext(false).Include("a", "b").Exclude("c") - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `false` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFetchSourceContextFetchSource(t *testing.T) { - builder := NewFetchSourceContext(true) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `true` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFetchSourceContextFetchSourceWithIncludesOnly(t *testing.T) { - builder := NewFetchSourceContext(true).Include("a", "b") - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"includes":["a","b"]}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFetchSourceContextFetchSourceWithIncludesAndExcludes(t *testing.T) { - builder := NewFetchSourceContext(true).Include("a", "b").Exclude("c") - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"excludes":["c"],"includes":["a","b"]}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFetchSourceContextQueryDefaults(t *testing.T) { - builder := NewFetchSourceContext(true) - values := builder.Query() - got := values.Encode() - expected := "" - if got != expected { - t.Errorf("expected %q; got: %q", expected, got) - } -} - -func TestFetchSourceContextQueryNoFetchSource(t *testing.T) { - builder := NewFetchSourceContext(false) - values := builder.Query() - got := values.Encode() - expected := "_source=false" - if got != expected { - t.Errorf("expected %q; got: %q", expected, got) - } -} - -func TestFetchSourceContextQueryFetchSourceWithIncludesAndExcludes(t *testing.T) { - builder := NewFetchSourceContext(true).Include("a", "b").Exclude("c") - values := builder.Query() - got := values.Encode() - expected := "_source_exclude=c&_source_include=a%2Cb" - if got != expected { - t.Errorf("expected %q; got: %q", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/field_caps.go b/vendor/gopkg.in/olivere/elastic.v5/field_caps.go index 393cd3ce8..78b343370 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/field_caps.go +++ b/vendor/gopkg.in/olivere/elastic.v5/field_caps.go @@ -11,12 +11,12 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // FieldCapsService allows retrieving the capabilities of fields among multiple indices. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.1/search-field-caps.html +// See http://www.elastic.co/guide/en/elasticsearch/reference/5.x/search-field-caps.html // for details type FieldCapsService struct { client *Client @@ -152,13 +152,7 @@ func (s *FieldCapsService) Do(ctx context.Context) (*FieldCapsResponse, error) { } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - IgnoreErrors: []int{http.StatusNotFound}, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, body, http.StatusNotFound) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/field_caps_test.go b/vendor/gopkg.in/olivere/elastic.v5/field_caps_test.go deleted file mode 100644 index e299fd516..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/field_caps_test.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "net/url" - "reflect" - "sort" - "testing" -) - -func TestFieldCapsURLs(t *testing.T) { - tests := []struct { - Service *FieldCapsService - ExpectedPath string - ExpectedParams url.Values - }{ - { - Service: &FieldCapsService{}, - ExpectedPath: "/_field_caps", - ExpectedParams: url.Values{}, - }, - { - Service: &FieldCapsService{ - index: []string{"index1", "index2"}, - }, - ExpectedPath: "/index1%2Cindex2/_field_caps", - ExpectedParams: url.Values{}, - }, - { - Service: &FieldCapsService{ - index: []string{"index_*"}, - pretty: true, - }, - ExpectedPath: "/index_%2A/_field_caps", - ExpectedParams: url.Values{"pretty": []string{"true"}}, - }, - } - - for _, test := range tests { - gotPath, gotParams, err := test.Service.buildURL() - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if gotPath != test.ExpectedPath { - t.Errorf("expected URL path = %q; got: %q", test.ExpectedPath, gotPath) - } - if gotParams.Encode() != test.ExpectedParams.Encode() { - t.Errorf("expected URL params = %v; got: %v", test.ExpectedParams, gotParams) - } - } -} - -func TestFieldCapsRequestSerialize(t *testing.T) { - req := &FieldCapsRequest{ - Fields: []string{"creation_date", "answer_count"}, - } - data, err := json.Marshal(req) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fields":["creation_date","answer_count"]}` - if got != expected { - t.Fatalf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFieldCapsRequestDeserialize(t *testing.T) { - body := `{ - "fields" : ["creation_date", "answer_count"] - }` - - var request FieldCapsRequest - if err := json.Unmarshal([]byte(body), &request); err != nil { - t.Fatalf("unexpected error during unmarshalling: %v", err) - } - - sort.Sort(lexicographically{request.Fields}) - - expectedFields := []string{"answer_count", "creation_date"} - if !reflect.DeepEqual(request.Fields, expectedFields) { - t.Fatalf("expected fields to be %v, got %v", expectedFields, request.Fields) - } -} - -func TestFieldCapsResponseUnmarshalling(t *testing.T) { - clusterStats := `{ - "_shards": { - "total": 1, - "successful": 1, - "failed": 0 - }, - "fields": { - "creation_date": { - "type": "date", - "searchable": true, - "aggregatable": true, - "indices": ["index1", "index2"], - "non_searchable_indices": null, - "non_aggregatable_indices": null - }, - "answer": { - "type": "keyword", - "searchable": true, - "aggregatable": true - } - } - }` - - var resp FieldCapsResponse - if err := json.Unmarshal([]byte(clusterStats), &resp); err != nil { - t.Errorf("unexpected error during unmarshalling: %v", err) - } - - caps, ok := resp.Fields["creation_date"] - if !ok { - t.Errorf("expected creation_date to be in the fields map, didn't find it") - } - if want, have := true, caps.Searchable; want != have { - t.Errorf("expected creation_date searchable to be %v, got %v", want, have) - } - if want, have := true, caps.Aggregatable; want != have { - t.Errorf("expected creation_date aggregatable to be %v, got %v", want, have) - } - if want, have := []string{"index1", "index2"}, caps.Indices; !reflect.DeepEqual(want, have) { - t.Errorf("expected creation_date indices to be %v, got %v", want, have) - } -} - -func TestFieldCaps123(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - // client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", 0))) - - res, err := client.FieldCaps("_all").Fields("user", "message", "retweets", "created").Pretty(true).Do(context.TODO()) - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if res == nil { - t.Fatalf("expected response; got: %v", res) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/field_stats.go b/vendor/gopkg.in/olivere/elastic.v5/field_stats.go new file mode 100644 index 000000000..c2104c5cb --- /dev/null +++ b/vendor/gopkg.in/olivere/elastic.v5/field_stats.go @@ -0,0 +1,259 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "gopkg.in/olivere/elastic.v5/uritemplates" +) + +const ( + FieldStatsClusterLevel = "cluster" + FieldStatsIndicesLevel = "indices" +) + +// FieldStatsService allows finding statistical properties of a field without executing a search, +// but looking up measurements that are natively available in the Lucene index. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-field-stats.html +// for details +type FieldStatsService struct { + client *Client + pretty bool + level string + index []string + allowNoIndices *bool + expandWildcards string + fields []string + ignoreUnavailable *bool + bodyJson interface{} + bodyString string +} + +// NewFieldStatsService creates a new FieldStatsService +func NewFieldStatsService(client *Client) *FieldStatsService { + return &FieldStatsService{ + client: client, + index: make([]string, 0), + fields: make([]string, 0), + } +} + +// Index is a list of index names; use `_all` or empty string to perform +// the operation on all indices. +func (s *FieldStatsService) Index(index ...string) *FieldStatsService { + s.index = append(s.index, index...) + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices expression +// resolves into no concrete indices. +// (This includes `_all` string or when no indices have been specified). +func (s *FieldStatsService) AllowNoIndices(allowNoIndices bool) *FieldStatsService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *FieldStatsService) ExpandWildcards(expandWildcards string) *FieldStatsService { + s.expandWildcards = expandWildcards + return s +} + +// Fields is a list of fields for to get field statistics +// for (min value, max value, and more). +func (s *FieldStatsService) Fields(fields ...string) *FieldStatsService { + s.fields = append(s.fields, fields...) + return s +} + +// IgnoreUnavailable is documented as: Whether specified concrete indices should be ignored when unavailable (missing or closed). +func (s *FieldStatsService) IgnoreUnavailable(ignoreUnavailable bool) *FieldStatsService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// Level sets if stats should be returned on a per index level or on a cluster wide level; +// should be one of 'cluster' or 'indices'; defaults to former +func (s *FieldStatsService) Level(level string) *FieldStatsService { + s.level = level + return s +} + +// ClusterLevel is a helper that sets Level to "cluster". +func (s *FieldStatsService) ClusterLevel() *FieldStatsService { + s.level = FieldStatsClusterLevel + return s +} + +// IndicesLevel is a helper that sets Level to "indices". +func (s *FieldStatsService) IndicesLevel() *FieldStatsService { + s.level = FieldStatsIndicesLevel + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *FieldStatsService) Pretty(pretty bool) *FieldStatsService { + s.pretty = pretty + return s +} + +// BodyJson is documented as: Field json objects containing the name and optionally a range to filter out indices result, that have results outside the defined bounds. +func (s *FieldStatsService) BodyJson(body interface{}) *FieldStatsService { + s.bodyJson = body + return s +} + +// BodyString is documented as: Field json objects containing the name and optionally a range to filter out indices result, that have results outside the defined bounds. +func (s *FieldStatsService) BodyString(body string) *FieldStatsService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *FieldStatsService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_field_stats", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else { + path = "/_field_stats" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if len(s.fields) > 0 { + params.Set("fields", strings.Join(s.fields, ",")) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.level != "" { + params.Set("level", s.level) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *FieldStatsService) Validate() error { + var invalid []string + if s.level != "" && (s.level != FieldStatsIndicesLevel && s.level != FieldStatsClusterLevel) { + invalid = append(invalid, "Level") + } + if len(invalid) != 0 { + return fmt.Errorf("missing or invalid required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *FieldStatsService) Do(ctx context.Context) (*FieldStatsResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else { + body = s.bodyString + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, "POST", path, params, body, http.StatusNotFound) + if err != nil { + return nil, err + } + + // TODO(oe): Is 404 really a valid response here? + if res.StatusCode == http.StatusNotFound { + return &FieldStatsResponse{make(map[string]IndexFieldStats)}, nil + } + + // Return operation response + ret := new(FieldStatsResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Request -- + +// FieldStatsRequest can be used to set up the body to be used in the +// Field Stats API. +type FieldStatsRequest struct { + Fields []string `json:"fields"` + IndexConstraints map[string]*FieldStatsConstraints `json:"index_constraints,omitempty"` +} + +// FieldStatsConstraints is a constraint on a field. +type FieldStatsConstraints struct { + Min *FieldStatsComparison `json:"min_value,omitempty"` + Max *FieldStatsComparison `json:"max_value,omitempty"` +} + +// FieldStatsComparison contain all comparison operations that can be used +// in FieldStatsConstraints. +type FieldStatsComparison struct { + Lte interface{} `json:"lte,omitempty"` + Lt interface{} `json:"lt,omitempty"` + Gte interface{} `json:"gte,omitempty"` + Gt interface{} `json:"gt,omitempty"` +} + +// -- Response -- + +// FieldStatsResponse is the response body content +type FieldStatsResponse struct { + Indices map[string]IndexFieldStats `json:"indices,omitempty"` +} + +// IndexFieldStats contains field stats for an index +type IndexFieldStats struct { + Fields map[string]FieldStats `json:"fields,omitempty"` +} + +// FieldStats contains stats of an individual field +type FieldStats struct { + Type string `json:"type"` + MaxDoc int64 `json:"max_doc"` + DocCount int64 `json:"doc_count"` + Density int64 `json:"density"` + SumDocFrequeny int64 `json:"sum_doc_freq"` + SumTotalTermFrequency int64 `json:"sum_total_term_freq"` + Searchable bool `json:"searchable"` + Aggregatable bool `json:"aggregatable"` + MinValue interface{} `json:"min_value"` + MinValueAsString string `json:"min_value_as_string"` + MaxValue interface{} `json:"max_value"` + MaxValueAsString string `json:"max_value_as_string"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v5/geo_point_test.go b/vendor/gopkg.in/olivere/elastic.v5/geo_point_test.go deleted file mode 100644 index 1d085cd38..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/geo_point_test.go +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGeoPointSource(t *testing.T) { - pt := GeoPoint{Lat: 40, Lon: -70} - - data, err := json.Marshal(pt.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"lat":40,"lon":-70}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/get.go b/vendor/gopkg.in/olivere/elastic.v5/get.go index efcc748bb..ef569e174 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/get.go +++ b/vendor/gopkg.in/olivere/elastic.v5/get.go @@ -11,13 +11,13 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // GetService allows to get a typed JSON document from the index based // on its id. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-get.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-get.html // for details. type GetService struct { client *Client @@ -172,7 +172,7 @@ func (s *GetService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.routing != "" { params.Set("routing", s.routing) @@ -223,11 +223,7 @@ func (s *GetService) Do(ctx context.Context) (*GetResult, error) { } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/get_template.go b/vendor/gopkg.in/olivere/elastic.v5/get_template.go new file mode 100644 index 000000000..93279a3a7 --- /dev/null +++ b/vendor/gopkg.in/olivere/elastic.v5/get_template.go @@ -0,0 +1,113 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + + "gopkg.in/olivere/elastic.v5/uritemplates" +) + +// GetTemplateService reads a search template. +// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-template.html. +type GetTemplateService struct { + client *Client + pretty bool + id string + version interface{} + versionType string +} + +// NewGetTemplateService creates a new GetTemplateService. +func NewGetTemplateService(client *Client) *GetTemplateService { + return &GetTemplateService{ + client: client, + } +} + +// Id is the template ID. +func (s *GetTemplateService) Id(id string) *GetTemplateService { + s.id = id + return s +} + +// Version is an explicit version number for concurrency control. +func (s *GetTemplateService) Version(version interface{}) *GetTemplateService { + s.version = version + return s +} + +// VersionType is a specific version type. +func (s *GetTemplateService) VersionType(versionType string) *GetTemplateService { + s.versionType = versionType + return s +} + +// buildURL builds the URL for the operation. +func (s *GetTemplateService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_search/template/{id}", map[string]string{ + "id": s.id, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.version != nil { + params.Set("version", fmt.Sprintf("%v", s.version)) + } + if s.versionType != "" { + params.Set("version_type", s.versionType) + } + + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *GetTemplateService) Validate() error { + var invalid []string + if s.id == "" { + invalid = append(invalid, "Id") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation and returns the template. +func (s *GetTemplateService) Do(ctx context.Context) (*GetTemplateResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) + if err != nil { + return nil, err + } + + // Return result + ret := new(GetTemplateResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +type GetTemplateResponse struct { + Template string `json:"template"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v5/get_test.go b/vendor/gopkg.in/olivere/elastic.v5/get_test.go deleted file mode 100644 index f9504bdbf..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/get_test.go +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "testing" -) - -func TestGet(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Get document 1 - res, err := client.Get().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res.Found != true { - t.Errorf("expected Found = true; got %v", res.Found) - } - if res.Source == nil { - t.Errorf("expected Source != nil; got %v", res.Source) - } - - // Get non existent document 99 - res, err = client.Get().Index(testIndexName).Type("doc").Id("99").Do(context.TODO()) - if err == nil { - t.Fatalf("expected error; got: %v", err) - } - if !IsNotFound(err) { - t.Errorf("expected NotFound error; got: %v", err) - } - if res != nil { - t.Errorf("expected no response; got: %v", res) - } -} - -func TestGetWithSourceFiltering(t *testing.T) { - client := setupTestClientAndCreateIndex(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Get document 1, without source - res, err := client.Get().Index(testIndexName).Type("doc").Id("1").FetchSource(false).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res.Found != true { - t.Errorf("expected Found = true; got %v", res.Found) - } - if res.Source != nil { - t.Errorf("expected Source == nil; got %v", res.Source) - } - - // Get document 1, exclude Message field - fsc := NewFetchSourceContext(true).Exclude("message") - res, err = client.Get().Index(testIndexName).Type("doc").Id("1").FetchSourceContext(fsc).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res.Found != true { - t.Errorf("expected Found = true; got %v", res.Found) - } - if res.Source == nil { - t.Errorf("expected Source != nil; got %v", res.Source) - } - var tw tweet - err = json.Unmarshal(*res.Source, &tw) - if err != nil { - t.Fatal(err) - } - if tw.User != "olivere" { - t.Errorf("expected user %q; got: %q", "olivere", tw.User) - } - if tw.Message != "" { - t.Errorf("expected message %q; got: %q", "", tw.Message) - } -} - -func TestGetWithFields(t *testing.T) { - client := setupTestClientAndCreateIndex(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Get document 1, specifying fields - res, err := client.Get().Index(testIndexName).Type("doc").Id("1").StoredFields("message").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res.Found != true { - t.Errorf("expected Found = true; got: %v", res.Found) - } - - // We must NOT have the "user" field - _, ok := res.Fields["user"] - if ok { - t.Fatalf("expected no field %q in document", "user") - } - - // We must have the "message" field - messageField, ok := res.Fields["message"] - if !ok { - t.Fatalf("expected field %q in document", "message") - } - - // Depending on the version of elasticsearch the message field will be returned - // as a string or a slice of strings. This test works in both cases. - - messageString, ok := messageField.(string) - if !ok { - messageArray, ok := messageField.([]interface{}) - if !ok { - t.Fatalf("expected field %q to be a string or a slice of strings; got: %T", "message", messageField) - } else { - messageString, ok = messageArray[0].(string) - if !ok { - t.Fatalf("expected field %q to be a string or a slice of strings; got: %T", "message", messageField) - } - } - } - - if messageString != tweet1.Message { - t.Errorf("expected message %q; got: %q", tweet1.Message, messageString) - } -} - -func TestGetValidate(t *testing.T) { - // Mitigate against http://stackoverflow.com/questions/27491738/elasticsearch-go-index-failures-no-feature-for-name - client := setupTestClientAndCreateIndex(t) - - if _, err := client.Get().Do(context.TODO()); err == nil { - t.Fatal("expected Get to fail") - } - if _, err := client.Get().Index(testIndexName).Do(context.TODO()); err == nil { - t.Fatal("expected Get to fail") - } - if _, err := client.Get().Type("doc").Do(context.TODO()); err == nil { - t.Fatal("expected Get to fail") - } - if _, err := client.Get().Id("1").Do(context.TODO()); err == nil { - t.Fatal("expected Get to fail") - } - if _, err := client.Get().Index(testIndexName).Type("doc").Do(context.TODO()); err == nil { - t.Fatal("expected Get to fail") - } - if _, err := client.Get().Type("doc").Id("1").Do(context.TODO()); err == nil { - t.Fatal("expected Get to fail") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/highlight.go b/vendor/gopkg.in/olivere/elastic.v5/highlight.go index 6d8d2ba63..478ff1d67 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/highlight.go +++ b/vendor/gopkg.in/olivere/elastic.v5/highlight.go @@ -6,7 +6,7 @@ package elastic // Highlight allows highlighting search results on one or more fields. // For details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-highlighting.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-request-highlighting.html type Highlight struct { fields []*HighlighterField tagsSchema *string diff --git a/vendor/gopkg.in/olivere/elastic.v5/highlight_test.go b/vendor/gopkg.in/olivere/elastic.v5/highlight_test.go deleted file mode 100644 index c7b972c44..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/highlight_test.go +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "testing" -) - -func TestHighlighterField(t *testing.T) { - field := NewHighlighterField("grade") - src, err := field.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHighlighterFieldWithOptions(t *testing.T) { - field := NewHighlighterField("grade").FragmentSize(2).NumOfFragments(1) - src, err := field.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fragment_size":2,"number_of_fragments":1}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHighlightWithStringField(t *testing.T) { - builder := NewHighlight().Field("grade") - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fields":{"grade":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHighlightWithFields(t *testing.T) { - gradeField := NewHighlighterField("grade") - builder := NewHighlight().Fields(gradeField) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fields":{"grade":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHighlightWithMultipleFields(t *testing.T) { - gradeField := NewHighlighterField("grade") - colorField := NewHighlighterField("color") - builder := NewHighlight().Fields(gradeField, colorField) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fields":{"color":{},"grade":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHighlighterWithExplicitFieldOrder(t *testing.T) { - gradeField := NewHighlighterField("grade").FragmentSize(2) - colorField := NewHighlighterField("color").FragmentSize(2).NumOfFragments(1) - builder := NewHighlight().Fields(gradeField, colorField).UseExplicitFieldOrder(true) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fields":[{"grade":{"fragment_size":2}},{"color":{"fragment_size":2,"number_of_fragments":1}}]}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHighlightWithBoundarySettings(t *testing.T) { - builder := NewHighlight(). - BoundaryChars(" \t\r"). - BoundaryScannerType("word") - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"boundary_chars":" \t\r","boundary_scanner":"word"}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHighlightWithTermQuery(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun to do."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Specify highlighter - hl := NewHighlight() - hl = hl.Fields(NewHighlighterField("message")) - hl = hl.PreTags("<em>").PostTags("</em>") - - // Match all should return all documents - query := NewPrefixQuery("message", "golang") - searchResult, err := client.Search(). - Index(testIndexName). - Highlight(hl). - Query(query). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Fatalf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 1 { - t.Fatalf("expected SearchResult.Hits.TotalHits = %d; got %d", 1, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 1 { - t.Fatalf("expected len(SearchResult.Hits.Hits) = %d; got %d", 1, len(searchResult.Hits.Hits)) - } - - hit := searchResult.Hits.Hits[0] - var tw tweet - if err := json.Unmarshal(*hit.Source, &tw); err != nil { - t.Fatal(err) - } - if hit.Highlight == nil || len(hit.Highlight) == 0 { - t.Fatal("expected hit to have a highlight; got nil") - } - if hl, found := hit.Highlight["message"]; found { - if len(hl) != 1 { - t.Fatalf("expected to have one highlight for field \"message\"; got %d", len(hl)) - } - expected := "Welcome to <em>Golang</em> and Elasticsearch." - if hl[0] != expected { - t.Errorf("expected to have highlight \"%s\"; got \"%s\"", expected, hl[0]) - } - } else { - t.Fatal("expected to have a highlight on field \"message\"; got none") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/index.go b/vendor/gopkg.in/olivere/elastic.v5/index.go index 4a4c3278e..302e0cdb6 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/index.go +++ b/vendor/gopkg.in/olivere/elastic.v5/index.go @@ -9,13 +9,13 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndexService adds or updates a typed JSON document in a specified index, // making it searchable. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-index_.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-index_.html // for details. type IndexService struct { client *Client @@ -172,7 +172,7 @@ func (s *IndexService) buildURL() (string, string, url.Values, error) { }) } else { // Automatic ID generation - // See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-index_.html#index-creation + // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-index_.html#index-creation method = "POST" path, err = uritemplates.Expand("/{index}/{type}/", map[string]string{ "index": s.index, @@ -186,7 +186,7 @@ func (s *IndexService) buildURL() (string, string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.waitForActiveShards != "" { params.Set("wait_for_active_shards", s.waitForActiveShards) @@ -264,12 +264,7 @@ func (s *IndexService) Do(ctx context.Context) (*IndexResponse, error) { } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: method, - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, method, path, params, body) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/index_test.go b/vendor/gopkg.in/olivere/elastic.v5/index_test.go deleted file mode 100644 index 1a0c38576..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/index_test.go +++ /dev/null @@ -1,280 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "testing" -) - -func TestIndexLifecycle(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - - // Add a document - indexResult, err := client.Index(). - Index(testIndexName). - Type("doc"). - Id("1"). - BodyJson(&tweet1). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if indexResult == nil { - t.Errorf("expected result to be != nil; got: %v", indexResult) - } - - // Exists - exists, err := client.Exists().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !exists { - t.Errorf("expected exists %v; got %v", true, exists) - } - - // Get document - getResult, err := client.Get(). - Index(testIndexName). - Type("doc"). - Id("1"). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if getResult.Index != testIndexName { - t.Errorf("expected GetResult.Index %q; got %q", testIndexName, getResult.Index) - } - if getResult.Type != "doc" { - t.Errorf("expected GetResult.Type %q; got %q", "doc", getResult.Type) - } - if getResult.Id != "1" { - t.Errorf("expected GetResult.Id %q; got %q", "1", getResult.Id) - } - if getResult.Source == nil { - t.Errorf("expected GetResult.Source to be != nil; got nil") - } - - // Decode the Source field - var tweetGot tweet - err = json.Unmarshal(*getResult.Source, &tweetGot) - if err != nil { - t.Fatal(err) - } - if tweetGot.User != tweet1.User { - t.Errorf("expected Tweet.User to be %q; got %q", tweet1.User, tweetGot.User) - } - if tweetGot.Message != tweet1.Message { - t.Errorf("expected Tweet.Message to be %q; got %q", tweet1.Message, tweetGot.Message) - } - - // Delete document again - deleteResult, err := client.Delete().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if deleteResult == nil { - t.Errorf("expected result to be != nil; got: %v", deleteResult) - } - - // Exists - exists, err = client.Exists().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if exists { - t.Errorf("expected exists %v; got %v", false, exists) - } -} - -func TestIndexLifecycleWithAutomaticIDGeneration(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - - // Add a document - indexResult, err := client.Index(). - Index(testIndexName). - Type("doc"). - BodyJson(&tweet1). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if indexResult == nil { - t.Errorf("expected result to be != nil; got: %v", indexResult) - } - if indexResult.Id == "" { - t.Fatalf("expected Es to generate an automatic ID, got: %v", indexResult.Id) - } - id := indexResult.Id - - // Exists - exists, err := client.Exists().Index(testIndexName).Type("doc").Id(id).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !exists { - t.Errorf("expected exists %v; got %v", true, exists) - } - - // Get document - getResult, err := client.Get(). - Index(testIndexName). - Type("doc"). - Id(id). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if getResult.Index != testIndexName { - t.Errorf("expected GetResult.Index %q; got %q", testIndexName, getResult.Index) - } - if getResult.Type != "doc" { - t.Errorf("expected GetResult.Type %q; got %q", "doc", getResult.Type) - } - if getResult.Id != id { - t.Errorf("expected GetResult.Id %q; got %q", id, getResult.Id) - } - if getResult.Source == nil { - t.Errorf("expected GetResult.Source to be != nil; got nil") - } - - // Decode the Source field - var tweetGot tweet - err = json.Unmarshal(*getResult.Source, &tweetGot) - if err != nil { - t.Fatal(err) - } - if tweetGot.User != tweet1.User { - t.Errorf("expected Tweet.User to be %q; got %q", tweet1.User, tweetGot.User) - } - if tweetGot.Message != tweet1.Message { - t.Errorf("expected Tweet.Message to be %q; got %q", tweet1.Message, tweetGot.Message) - } - - // Delete document again - deleteResult, err := client.Delete().Index(testIndexName).Type("doc").Id(id).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if deleteResult == nil { - t.Errorf("expected result to be != nil; got: %v", deleteResult) - } - - // Exists - exists, err = client.Exists().Index(testIndexName).Type("doc").Id(id).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if exists { - t.Errorf("expected exists %v; got %v", false, exists) - } -} - -func TestIndexValidate(t *testing.T) { - client := setupTestClient(t) - - tweet := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - - // No index name -> fail with error - res, err := NewIndexService(client).Type("doc").Id("1").BodyJson(&tweet).Do(context.TODO()) - if err == nil { - t.Fatalf("expected Index to fail without index name") - } - if res != nil { - t.Fatalf("expected result to be == nil; got: %v", res) - } - - // No index name -> fail with error - res, err = NewIndexService(client).Index(testIndexName).Id("1").BodyJson(&tweet).Do(context.TODO()) - if err == nil { - t.Fatalf("expected Index to fail without type") - } - if res != nil { - t.Fatalf("expected result to be == nil; got: %v", res) - } -} - -func TestIndexCreateExistsOpenCloseDelete(t *testing.T) { - // TODO: Find out how to make these test robust - t.Skip("test fails regularly with 409 (Conflict): " + - "IndexPrimaryShardNotAllocatedException[[elastic-test] " + - "primary not allocated post api... skipping") - - client := setupTestClient(t) - - // Create index - createIndex, err := client.CreateIndex(testIndexName).Body(testMapping).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if createIndex == nil { - t.Fatalf("expected response; got: %v", createIndex) - } - if !createIndex.Acknowledged { - t.Errorf("expected ack for creating index; got: %v", createIndex.Acknowledged) - } - - // Exists - indexExists, err := client.IndexExists(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !indexExists { - t.Fatalf("expected index exists=%v; got %v", true, indexExists) - } - - // Flush - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Close index - closeIndex, err := client.CloseIndex(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if closeIndex == nil { - t.Fatalf("expected response; got: %v", closeIndex) - } - if !closeIndex.Acknowledged { - t.Errorf("expected ack for closing index; got: %v", closeIndex.Acknowledged) - } - - // Open index - openIndex, err := client.OpenIndex(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if openIndex == nil { - t.Fatalf("expected response; got: %v", openIndex) - } - if !openIndex.Acknowledged { - t.Errorf("expected ack for opening index; got: %v", openIndex.Acknowledged) - } - - // Flush - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Delete index - deleteIndex, err := client.DeleteIndex(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if deleteIndex == nil { - t.Fatalf("expected response; got: %v", deleteIndex) - } - if !deleteIndex.Acknowledged { - t.Errorf("expected ack for deleting index; got %v", deleteIndex.Acknowledged) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_analyze.go b/vendor/gopkg.in/olivere/elastic.v5/indices_analyze.go index fb3a91234..b9000f128 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_analyze.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_analyze.go @@ -9,13 +9,13 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesAnalyzeService performs the analysis process on a text and returns // the tokens breakdown of the text. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-analyze.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-analyze.html // for detail. type IndicesAnalyzeService struct { client *Client @@ -152,7 +152,7 @@ func (s *IndicesAnalyzeService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.format != "" { params.Set("format", s.format) @@ -185,16 +185,11 @@ func (s *IndicesAnalyzeService) Do(ctx context.Context) (*IndicesAnalyzeResponse } else { // Request parameters are deprecated in 5.1.1, and we must use a JSON // structure in the body to pass the parameters. - // See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-analyze.html + // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-analyze.html body = s.request } - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, body) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_analyze_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_analyze_test.go deleted file mode 100644 index 90dbf1e73..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_analyze_test.go +++ /dev/null @@ -1,85 +0,0 @@ -package elastic - -import ( - "context" - "testing" -) - -func TestIndicesAnalyzeURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Index string - Expected string - }{ - { - "", - "/_analyze", - }, - { - "tweets", - "/tweets/_analyze", - }, - } - - for _, test := range tests { - path, _, err := client.IndexAnalyze().Index(test.Index).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} - -func TestIndicesAnalyze(t *testing.T) { - client := setupTestClient(t) - // client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) - - res, err := client.IndexAnalyze().Text("hello hi guy").Do(context.TODO()) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - if len(res.Tokens) != 3 { - t.Fatalf("expected %d, got %d (%+v)", 3, len(res.Tokens), res.Tokens) - } -} - -func TestIndicesAnalyzeDetail(t *testing.T) { - client := setupTestClient(t) - // client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) - - res, err := client.IndexAnalyze().Text("hello hi guy").Explain(true).Do(context.TODO()) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - - if len(res.Detail.Analyzer.Tokens) != 3 { - t.Fatalf("expected %d tokens, got %d (%+v)", 3, len(res.Detail.Tokenizer.Tokens), res.Detail.Tokenizer.Tokens) - } -} - -func TestIndicesAnalyzeWithIndex(t *testing.T) { - client := setupTestClient(t) - - _, err := client.IndexAnalyze().Index("foo").Text("hello hi guy").Do(context.TODO()) - if err == nil { - t.Fatal("expected error, got nil") - } - if want, have := "elastic: Error 404 (Not Found): no such index [type=index_not_found_exception]", err.Error(); want != have { - t.Fatalf("expected error %q, got %q", want, have) - } -} - -func TestIndicesAnalyzeValidate(t *testing.T) { - client := setupTestClient(t) - - _, err := client.IndexAnalyze().Do(context.TODO()) - if err == nil { - t.Fatal("expected error, got nil") - } - if want, have := "missing required fields: [Text]", err.Error(); want != have { - t.Fatalf("expected error %q, got %q", want, have) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_close.go b/vendor/gopkg.in/olivere/elastic.v5/indices_close.go index 00ecdf966..9388bc973 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_close.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_close.go @@ -9,12 +9,12 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesCloseService closes an index. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-open-close.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-open-close.html // for details. type IndicesCloseService struct { client *Client @@ -134,11 +134,7 @@ func (s *IndicesCloseService) Do(ctx context.Context) (*IndicesCloseResponse, er } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, nil) if err != nil { return nil, err } @@ -153,7 +149,5 @@ func (s *IndicesCloseService) Do(ctx context.Context) (*IndicesCloseResponse, er // IndicesCloseResponse is the response of IndicesCloseService.Do. type IndicesCloseResponse struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` + Acknowledged bool `json:"acknowledged"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_close_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_close_test.go deleted file mode 100644 index e7a4d9e05..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_close_test.go +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -// TODO(oe): Find out why this test fails on Travis CI. -/* -func TestIndicesOpenAndClose(t *testing.T) { - client := setupTestClient(t) - - // Create index - createIndex, err := client.CreateIndex(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !createIndex.Acknowledged { - t.Errorf("expected CreateIndexResult.Acknowledged %v; got %v", true, createIndex.Acknowledged) - } - defer func() { - // Delete index - deleteIndex, err := client.DeleteIndex(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !deleteIndex.Acknowledged { - t.Errorf("expected DeleteIndexResult.Acknowledged %v; got %v", true, deleteIndex.Acknowledged) - } - }() - - waitForYellow := func() { - // Wait for status yellow - res, err := client.ClusterHealth().WaitForStatus("yellow").Timeout("15s").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res != nil && res.TimedOut { - t.Fatalf("cluster time out waiting for status %q", "yellow") - } - } - - // Wait for cluster - waitForYellow() - - // Close index - cresp, err := client.CloseIndex(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !cresp.Acknowledged { - t.Fatalf("expected close index of %q to be acknowledged\n", testIndexName) - } - - // Wait for cluster - waitForYellow() - - // Open index again - oresp, err := client.OpenIndex(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !oresp.Acknowledged { - t.Fatalf("expected open index of %q to be acknowledged\n", testIndexName) - } -} -*/ - -func TestIndicesCloseValidate(t *testing.T) { - client := setupTestClient(t) - - // No index name -> fail with error - res, err := NewIndicesCloseService(client).Do(context.TODO()) - if err == nil { - t.Fatalf("expected IndicesClose to fail without index name") - } - if res != nil { - t.Fatalf("expected result to be == nil; got: %v", res) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_create.go b/vendor/gopkg.in/olivere/elastic.v5/indices_create.go index 8d8e0c25e..dfd17ac09 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_create.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_create.go @@ -9,12 +9,12 @@ import ( "errors" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesCreateService creates a new index. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-create-index.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-create-index.html // for details. type IndicesCreateService struct { client *Client @@ -91,7 +91,7 @@ func (b *IndicesCreateService) Do(ctx context.Context) (*IndicesCreateResult, er params := make(url.Values) if b.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if b.masterTimeout != "" { params.Set("master_timeout", b.masterTimeout) @@ -109,12 +109,7 @@ func (b *IndicesCreateService) Do(ctx context.Context) (*IndicesCreateResult, er } // Get response - res, err := b.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "PUT", - Path: path, - Params: params, - Body: body, - }) + res, err := b.client.PerformRequest(ctx, "PUT", path, params, body) if err != nil { return nil, err } @@ -130,7 +125,6 @@ func (b *IndicesCreateService) Do(ctx context.Context) (*IndicesCreateResult, er // IndicesCreateResult is the outcome of creating a new index. type IndicesCreateResult struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_create_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_create_test.go deleted file mode 100644 index f37df1c54..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_create_test.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestIndicesLifecycle(t *testing.T) { - client := setupTestClient(t) - - // Create index - createIndex, err := client.CreateIndex(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !createIndex.Acknowledged { - t.Errorf("expected IndicesCreateResult.Acknowledged %v; got %v", true, createIndex.Acknowledged) - } - - // Check if index exists - indexExists, err := client.IndexExists(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !indexExists { - t.Fatalf("index %s should exist, but doesn't\n", testIndexName) - } - - // Delete index - deleteIndex, err := client.DeleteIndex(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !deleteIndex.Acknowledged { - t.Errorf("expected DeleteIndexResult.Acknowledged %v; got %v", true, deleteIndex.Acknowledged) - } - - // Check if index exists - indexExists, err = client.IndexExists(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if indexExists { - t.Fatalf("index %s should not exist, but does\n", testIndexName) - } -} - -func TestIndicesCreateValidate(t *testing.T) { - client := setupTestClient(t) - - // No index name -> fail with error - res, err := NewIndicesCreateService(client).Body(testMapping).Do(context.TODO()) - if err == nil { - t.Fatalf("expected IndicesCreate to fail without index name") - } - if res != nil { - t.Fatalf("expected result to be == nil; got: %v", res) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_delete.go b/vendor/gopkg.in/olivere/elastic.v5/indices_delete.go index 2afeca978..997185237 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_delete.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_delete.go @@ -10,12 +10,12 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesDeleteService allows to delete existing indices. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-delete-index.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-delete-index.html // for details. type IndicesDeleteService struct { client *Client @@ -71,7 +71,7 @@ func (s *IndicesDeleteService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.timeout != "" { params.Set("timeout", s.timeout) @@ -108,11 +108,7 @@ func (s *IndicesDeleteService) Do(ctx context.Context) (*IndicesDeleteResponse, } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "DELETE", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "DELETE", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_delete_template.go b/vendor/gopkg.in/olivere/elastic.v5/indices_delete_template.go index 0ea34cf89..d1b88d4bb 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_delete_template.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_delete_template.go @@ -9,11 +9,11 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesDeleteTemplateService deletes index templates. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-templates.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-templates.html. type IndicesDeleteTemplateService struct { client *Client pretty bool @@ -66,7 +66,7 @@ func (s *IndicesDeleteTemplateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.timeout != "" { params.Set("timeout", s.timeout) @@ -103,11 +103,7 @@ func (s *IndicesDeleteTemplateService) Do(ctx context.Context) (*IndicesDeleteTe } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "DELETE", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "DELETE", path, params, nil) if err != nil { return nil, err } @@ -122,7 +118,5 @@ func (s *IndicesDeleteTemplateService) Do(ctx context.Context) (*IndicesDeleteTe // IndicesDeleteTemplateResponse is the response of IndicesDeleteTemplateService.Do. type IndicesDeleteTemplateResponse struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` + Acknowledged bool `json:"acknowledged,omitempty"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_delete_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_delete_test.go deleted file mode 100644 index db77c7a25..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_delete_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestIndicesDeleteValidate(t *testing.T) { - client := setupTestClient(t) - - // No index name -> fail with error - res, err := NewIndicesDeleteService(client).Do(context.TODO()) - if err == nil { - t.Fatalf("expected IndicesDelete to fail without index name") - } - if res != nil { - t.Fatalf("expected result to be == nil; got: %v", res) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_exists.go b/vendor/gopkg.in/olivere/elastic.v5/indices_exists.go index aa9391039..928006e09 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_exists.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_exists.go @@ -11,12 +11,12 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesExistsService checks if an index or indices exist or not. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-exists.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-exists.html // for details. type IndicesExistsService struct { client *Client @@ -90,7 +90,7 @@ func (s *IndicesExistsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.local != nil { params.Set("local", fmt.Sprintf("%v", *s.local)) @@ -133,12 +133,7 @@ func (s *IndicesExistsService) Do(ctx context.Context) (bool, error) { } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "HEAD", - Path: path, - Params: params, - IgnoreErrors: []int{404}, - }) + res, err := s.client.PerformRequest(ctx, "HEAD", path, params, nil, 404) if err != nil { return false, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_exists_template.go b/vendor/gopkg.in/olivere/elastic.v5/indices_exists_template.go index 40b06e895..873d8c00c 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_exists_template.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_exists_template.go @@ -10,7 +10,7 @@ import ( "net/http" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesExistsTemplateService checks if a given template exists. @@ -62,7 +62,7 @@ func (s *IndicesExistsTemplateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.local != nil { params.Set("local", fmt.Sprintf("%v", *s.local)) @@ -96,12 +96,7 @@ func (s *IndicesExistsTemplateService) Do(ctx context.Context) (bool, error) { } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "HEAD", - Path: path, - Params: params, - IgnoreErrors: []int{404}, - }) + res, err := s.client.PerformRequest(ctx, "HEAD", path, params, nil, 404) if err != nil { return false, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_exists_template_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_exists_template_test.go deleted file mode 100644 index a97442971..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_exists_template_test.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestIndexExistsTemplate(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tmpl := `{ - "index_patterns":["elastic-test*"], - "settings":{ - "number_of_shards":1, - "number_of_replicas":0 - }, - "mappings":{ - "doc":{ - "properties":{ - "tags":{ - "type":"keyword" - }, - "location":{ - "type":"geo_point" - }, - "suggest_field":{ - "type":"completion" - } - } - } - } -}` - putres, err := client.IndexPutTemplate("elastic-template").BodyString(tmpl).Do(context.TODO()) - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if putres == nil { - t.Fatalf("expected response; got: %v", putres) - } - if !putres.Acknowledged { - t.Fatalf("expected index template to be ack'd; got: %v", putres.Acknowledged) - } - - // Always delete template - defer client.IndexDeleteTemplate("elastic-template").Do(context.TODO()) - - // Check if template exists - exists, err := client.IndexTemplateExists("elastic-template").Do(context.TODO()) - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if !exists { - t.Fatalf("expected index template %q to exist; got: %v", "elastic-template", exists) - } - - // Get template - getres, err := client.IndexGetTemplate("elastic-template").Do(context.TODO()) - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if getres == nil { - t.Fatalf("expected to get index template %q; got: %v", "elastic-template", getres) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_exists_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_exists_test.go deleted file mode 100644 index 07e3eb518..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_exists_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestIndicesExistsWithoutIndex(t *testing.T) { - client := setupTestClient(t) - - // No index name -> fail with error - res, err := NewIndicesExistsService(client).Do(context.TODO()) - if err == nil { - t.Fatalf("expected IndicesExists to fail without index name") - } - if res != false { - t.Fatalf("expected result to be false; got: %v", res) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_exists_type.go b/vendor/gopkg.in/olivere/elastic.v5/indices_exists_type.go index a4d1ff610..95eb8f1d3 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_exists_type.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_exists_type.go @@ -11,12 +11,12 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesExistsTypeService checks if one or more types exist in one or more indices. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-types-exists.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-types-exists.html // for details. type IndicesExistsTypeService struct { client *Client @@ -97,7 +97,7 @@ func (s *IndicesExistsTypeService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) @@ -143,12 +143,7 @@ func (s *IndicesExistsTypeService) Do(ctx context.Context) (bool, error) { } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "HEAD", - Path: path, - Params: params, - IgnoreErrors: []int{404}, - }) + res, err := s.client.PerformRequest(ctx, "HEAD", path, params, nil, 404) if err != nil { return false, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_exists_type_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_exists_type_test.go deleted file mode 100644 index 3795bd042..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_exists_type_test.go +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestIndicesExistsTypeBuildURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Types []string - Expected string - ExpectValidateFailure bool - }{ - { - []string{}, - []string{}, - "", - true, - }, - { - []string{"index1"}, - []string{}, - "", - true, - }, - { - []string{}, - []string{"type1"}, - "", - true, - }, - { - []string{"index1"}, - []string{"type1"}, - "/index1/_mapping/type1", - false, - }, - { - []string{"index1", "index2"}, - []string{"type1"}, - "/index1%2Cindex2/_mapping/type1", - false, - }, - { - []string{"index1", "index2"}, - []string{"type1", "type2"}, - "/index1%2Cindex2/_mapping/type1%2Ctype2", - false, - }, - } - - for i, test := range tests { - err := client.TypeExists().Index(test.Indices...).Type(test.Types...).Validate() - if err == nil && test.ExpectValidateFailure { - t.Errorf("#%d: expected validate to fail", i+1) - continue - } - if err != nil && !test.ExpectValidateFailure { - t.Errorf("#%d: expected validate to succeed", i+1) - continue - } - if !test.ExpectValidateFailure { - path, _, err := client.TypeExists().Index(test.Indices...).Type(test.Types...).buildURL() - if err != nil { - t.Fatalf("#%d: %v", i+1, err) - } - if path != test.Expected { - t.Errorf("#%d: expected %q; got: %q", i+1, test.Expected, path) - } - } - } -} - -func TestIndicesExistsType(t *testing.T) { - client := setupTestClient(t) - - // Create index with tweet type - createIndex, err := client.CreateIndex(testIndexName).Body(testMapping).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if createIndex == nil { - t.Errorf("expected result to be != nil; got: %v", createIndex) - } - if !createIndex.Acknowledged { - t.Errorf("expected CreateIndexResult.Acknowledged %v; got %v", true, createIndex.Acknowledged) - } - - // Check if type exists - exists, err := client.TypeExists().Index(testIndexName).Type("doc").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !exists { - t.Fatalf("type %s should exist in index %s, but doesn't\n", "doc", testIndexName) - } - - // Delete index - deleteIndex, err := client.DeleteIndex(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !deleteIndex.Acknowledged { - t.Errorf("expected DeleteIndexResult.Acknowledged %v; got %v", true, deleteIndex.Acknowledged) - } - - // Check if type exists - exists, err = client.TypeExists().Index(testIndexName).Type("doc").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if exists { - t.Fatalf("type %s should not exist in index %s, but it does\n", "doc", testIndexName) - } -} - -func TestIndicesExistsTypeValidate(t *testing.T) { - client := setupTestClient(t) - - // No index name -> fail with error - res, err := NewIndicesExistsTypeService(client).Do(context.TODO()) - if err == nil { - t.Fatalf("expected IndicesExistsType to fail without index name") - } - if res != false { - t.Fatalf("expected result to be false; got: %v", res) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_flush.go b/vendor/gopkg.in/olivere/elastic.v5/indices_flush.go index 113e53803..602700af6 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_flush.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_flush.go @@ -10,14 +10,14 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // Flush allows to flush one or more indices. The flush process of an index // basically frees memory from the index by flushing data to the index // storage and clearing the internal transaction log. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-flush.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-flush.html // for details. type IndicesFlushService struct { client *Client @@ -110,7 +110,7 @@ func (s *IndicesFlushService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.force != nil { params.Set("force", fmt.Sprintf("%v", *s.force)) @@ -149,11 +149,7 @@ func (s *IndicesFlushService) Do(ctx context.Context) (*IndicesFlushResponse, er } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_flush_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_flush_test.go deleted file mode 100644 index afefd1251..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_flush_test.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestFlush(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - // Flush all indices - res, err := client.Flush().Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Errorf("expected res to be != nil; got: %v", res) - } -} - -func TestFlushBuildURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Expected string - ExpectValidateFailure bool - }{ - { - []string{}, - "/_flush", - false, - }, - { - []string{"index1"}, - "/index1/_flush", - false, - }, - { - []string{"index1", "index2"}, - "/index1%2Cindex2/_flush", - false, - }, - } - - for i, test := range tests { - err := NewIndicesFlushService(client).Index(test.Indices...).Validate() - if err == nil && test.ExpectValidateFailure { - t.Errorf("case #%d: expected validate to fail", i+1) - continue - } - if err != nil && !test.ExpectValidateFailure { - t.Errorf("case #%d: expected validate to succeed", i+1) - continue - } - if !test.ExpectValidateFailure { - path, _, err := NewIndicesFlushService(client).Index(test.Indices...).buildURL() - if err != nil { - t.Fatalf("case #%d: %v", i+1, err) - } - if path != test.Expected { - t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) - } - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_forcemerge.go b/vendor/gopkg.in/olivere/elastic.v5/indices_forcemerge.go index 0e999cf19..709be1bc4 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_forcemerge.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_forcemerge.go @@ -10,7 +10,7 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesForcemergeService allows to force merging of one or more indices. @@ -125,7 +125,7 @@ func (s *IndicesForcemergeService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) @@ -170,11 +170,7 @@ func (s *IndicesForcemergeService) Do(ctx context.Context) (*IndicesForcemergeRe } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_forcemerge_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_forcemerge_test.go deleted file mode 100644 index 6615d4dc6..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_forcemerge_test.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestIndicesForcemergeBuildURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Indices []string - Expected string - }{ - { - []string{}, - "/_forcemerge", - }, - { - []string{"index1"}, - "/index1/_forcemerge", - }, - { - []string{"index1", "index2"}, - "/index1%2Cindex2/_forcemerge", - }, - } - - for i, test := range tests { - path, _, err := client.Forcemerge().Index(test.Indices...).buildURL() - if err != nil { - t.Errorf("case #%d: %v", i+1, err) - continue - } - if path != test.Expected { - t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) - } - } -} - -func TestIndicesForcemerge(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - - _, err := client.Forcemerge(testIndexName).MaxNumSegments(1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - /* - if !ok { - t.Fatalf("expected forcemerge to succeed; got: %v", ok) - } - */ -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_get.go b/vendor/gopkg.in/olivere/elastic.v5/indices_get.go index cb4e449d5..3b80c246d 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_get.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_get.go @@ -10,12 +10,12 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesGetService retrieves information about one or more indices. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-get-index.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-get-index.html // for more details. type IndicesGetService struct { client *Client @@ -131,7 +131,7 @@ func (s *IndicesGetService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.expandWildcards != "" { params.Set("expand_wildcards", s.expandWildcards) @@ -180,11 +180,7 @@ func (s *IndicesGetService) Do(ctx context.Context) (map[string]*IndicesGetRespo } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_get_aliases.go b/vendor/gopkg.in/olivere/elastic.v5/indices_get_aliases.go index 68b186358..530d7bdcd 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_get_aliases.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_get_aliases.go @@ -10,7 +10,7 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // AliasesService returns the aliases associated with one or more indices. @@ -47,11 +47,11 @@ func (s *AliasesService) buildURL() (string, url.Values, error) { var path string if len(s.index) > 0 { - path, err = uritemplates.Expand("/{index}/_alias", map[string]string{ + path, err = uritemplates.Expand("/{index}/_aliases", map[string]string{ "index": strings.Join(s.index, ","), }) } else { - path = "/_alias" + path = "/_aliases" } if err != nil { return "", url.Values{}, err @@ -72,11 +72,7 @@ func (s *AliasesService) Do(ctx context.Context) (*AliasesResult, error) { } // Get response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_get_aliases_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_get_aliases_test.go deleted file mode 100644 index 2c8da9b7f..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_get_aliases_test.go +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestAliasesBuildURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Indices []string - Expected string - }{ - { - []string{}, - "/_alias", - }, - { - []string{"index1"}, - "/index1/_alias", - }, - { - []string{"index1", "index2"}, - "/index1%2Cindex2/_alias", - }, - } - - for i, test := range tests { - path, _, err := client.Aliases().Index(test.Indices...).buildURL() - if err != nil { - t.Errorf("case #%d: %v", i+1, err) - continue - } - if path != test.Expected { - t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) - } - } -} - -func TestAliases(t *testing.T) { - var err error - - //client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - // Some tweets - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "sandrae", Message: "Cycling is fun."} - tweet3 := tweet{User: "olivere", Message: "Another unrelated topic."} - - // Add tweets to first index - _, err = client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - // Add tweets to second index - _, err = client.Index().Index(testIndexName2).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Flush - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - _, err = client.Flush().Index(testIndexName2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Alias should not yet exist - aliasesResult1, err := client.Aliases(). - Index(testIndexName, testIndexName2). - Pretty(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if len(aliasesResult1.Indices) != 2 { - t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult1.Indices)) - } - for indexName, indexDetails := range aliasesResult1.Indices { - if len(indexDetails.Aliases) != 0 { - t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 0, len(indexDetails.Aliases)) - } - } - - // Add both indices to a new alias - aliasCreate, err := client.Alias(). - Add(testIndexName, testAliasName). - Add(testIndexName2, testAliasName). - //Pretty(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !aliasCreate.Acknowledged { - t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasCreate.Acknowledged) - } - - // Alias should now exist - aliasesResult2, err := client.Aliases(). - Index(testIndexName, testIndexName2). - //Pretty(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if len(aliasesResult2.Indices) != 2 { - t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult2.Indices)) - } - for indexName, indexDetails := range aliasesResult2.Indices { - if len(indexDetails.Aliases) != 1 { - t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 1, len(indexDetails.Aliases)) - } - } - - // Check the reverse function: - indexInfo1, found := aliasesResult2.Indices[testIndexName] - if !found { - t.Errorf("expected info about index %s = %v; got %v", testIndexName, true, found) - } - aliasFound := indexInfo1.HasAlias(testAliasName) - if !aliasFound { - t.Errorf("expected alias %s to include index %s; got %v", testAliasName, testIndexName, aliasFound) - } - - // Check the reverse function: - indexInfo2, found := aliasesResult2.Indices[testIndexName2] - if !found { - t.Errorf("expected info about index %s = %v; got %v", testIndexName, true, found) - } - aliasFound = indexInfo2.HasAlias(testAliasName) - if !aliasFound { - t.Errorf("expected alias %s to include index %s; got %v", testAliasName, testIndexName2, aliasFound) - } - - // Remove first index should remove two tweets, so should only yield 1 - aliasRemove1, err := client.Alias(). - Remove(testIndexName, testAliasName). - //Pretty(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !aliasRemove1.Acknowledged { - t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasRemove1.Acknowledged) - } - - // Alias should now exist only for index 2 - aliasesResult3, err := client.Aliases().Index(testIndexName, testIndexName2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if len(aliasesResult3.Indices) != 2 { - t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult3.Indices)) - } - for indexName, indexDetails := range aliasesResult3.Indices { - if indexName == testIndexName { - if len(indexDetails.Aliases) != 0 { - t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 0, len(indexDetails.Aliases)) - } - } else if indexName == testIndexName2 { - if len(indexDetails.Aliases) != 1 { - t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 1, len(indexDetails.Aliases)) - } - } else { - t.Errorf("got index %s", indexName) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_get_field_mapping.go b/vendor/gopkg.in/olivere/elastic.v5/indices_get_field_mapping.go index e3b7eac07..3cb43d54b 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_get_field_mapping.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_get_field_mapping.go @@ -10,13 +10,13 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesGetFieldMappingService retrieves the mapping definitions for the fields in an index // or index/type. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-get-field-mapping.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-get-field-mapping.html // for details. type IndicesGetFieldMappingService struct { client *Client @@ -131,7 +131,7 @@ func (s *IndicesGetFieldMappingService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) @@ -170,11 +170,7 @@ func (s *IndicesGetFieldMappingService) Do(ctx context.Context) (map[string]inte } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_get_field_mapping_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_get_field_mapping_test.go deleted file mode 100644 index 62770e030..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_get_field_mapping_test.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestIndicesGetFieldMappingURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Types []string - Fields []string - Expected string - }{ - { - []string{}, - []string{}, - []string{}, - "/_all/_mapping/_all/field/%2A", - }, - { - []string{}, - []string{"tweet"}, - []string{"message"}, - "/_all/_mapping/tweet/field/message", - }, - { - []string{"twitter"}, - []string{"tweet"}, - []string{"*.id"}, - "/twitter/_mapping/tweet/field/%2A.id", - }, - { - []string{"store-1", "store-2"}, - []string{"tweet", "user"}, - []string{"message", "*.id"}, - "/store-1%2Cstore-2/_mapping/tweet%2Cuser/field/message%2C%2A.id", - }, - } - - for _, test := range tests { - path, _, err := client.GetFieldMapping().Index(test.Indices...).Type(test.Types...).Field(test.Fields...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_get_mapping.go b/vendor/gopkg.in/olivere/elastic.v5/indices_get_mapping.go index 7f9c9cb22..3b2258915 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_get_mapping.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_get_mapping.go @@ -10,13 +10,13 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesGetMappingService retrieves the mapping definitions for an index or // index/type. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-get-mapping.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-get-mapping.html // for details. type IndicesGetMappingService struct { client *Client @@ -119,7 +119,7 @@ func (s *IndicesGetMappingService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) @@ -156,11 +156,7 @@ func (s *IndicesGetMappingService) Do(ctx context.Context) (map[string]interface } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_get_mapping_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_get_mapping_test.go deleted file mode 100644 index 5ec54e7fb..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_get_mapping_test.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestIndicesGetMappingURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Types []string - Expected string - }{ - { - []string{}, - []string{}, - "/_all/_mapping/_all", - }, - { - []string{}, - []string{"tweet"}, - "/_all/_mapping/tweet", - }, - { - []string{"twitter"}, - []string{"tweet"}, - "/twitter/_mapping/tweet", - }, - { - []string{"store-1", "store-2"}, - []string{"tweet", "user"}, - "/store-1%2Cstore-2/_mapping/tweet%2Cuser", - }, - } - - for _, test := range tests { - path, _, err := client.GetMapping().Index(test.Indices...).Type(test.Types...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_get_settings.go b/vendor/gopkg.in/olivere/elastic.v5/indices_get_settings.go index 06fce0dfa..0e8f28d70 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_get_settings.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_get_settings.go @@ -10,13 +10,13 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesGetSettingsService allows to retrieve settings of one // or more indices. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-get-settings.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-get-settings.html // for more details. type IndicesGetSettingsService struct { client *Client @@ -125,7 +125,7 @@ func (s *IndicesGetSettingsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) @@ -164,11 +164,7 @@ func (s *IndicesGetSettingsService) Do(ctx context.Context) (map[string]*Indices } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_get_settings_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_get_settings_test.go deleted file mode 100644 index 7c6995a28..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_get_settings_test.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestIndexGetSettingsURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Names []string - Expected string - }{ - { - []string{}, - []string{}, - "/_all/_settings", - }, - { - []string{}, - []string{"index.merge.*"}, - "/_all/_settings/index.merge.%2A", - }, - { - []string{"twitter-*"}, - []string{"index.merge.*", "_settings"}, - "/twitter-%2A/_settings/index.merge.%2A%2C_settings", - }, - { - []string{"store-1", "store-2"}, - []string{"index.merge.*", "_settings"}, - "/store-1%2Cstore-2/_settings/index.merge.%2A%2C_settings", - }, - } - - for _, test := range tests { - path, _, err := client.IndexGetSettings().Index(test.Indices...).Name(test.Names...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} - -func TestIndexGetSettingsService(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if esversion < "1.4.0" { - t.Skip("Index Get API is available since 1.4") - return - } - - res, err := client.IndexGetSettings().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatalf("expected result; got: %v", res) - } - info, found := res[testIndexName] - if !found { - t.Fatalf("expected index %q to be found; got: %v", testIndexName, found) - } - if info == nil { - t.Fatalf("expected index %q to be != nil; got: %v", testIndexName, info) - } - if info.Settings == nil { - t.Fatalf("expected index settings of %q to be != nil; got: %v", testIndexName, info.Settings) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_get_template.go b/vendor/gopkg.in/olivere/elastic.v5/indices_get_template.go index ad3a091a0..15590dc06 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_get_template.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_get_template.go @@ -10,11 +10,11 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesGetTemplateService returns an index template. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-templates.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-templates.html. type IndicesGetTemplateService struct { client *Client pretty bool @@ -75,7 +75,7 @@ func (s *IndicesGetTemplateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.flatSettings != nil { params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) @@ -105,11 +105,7 @@ func (s *IndicesGetTemplateService) Do(ctx context.Context) (map[string]*Indices } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_get_template_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_get_template_test.go deleted file mode 100644 index c884ec1cb..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_get_template_test.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestIndexGetTemplateURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Names []string - Expected string - }{ - { - []string{}, - "/_template", - }, - { - []string{"index1"}, - "/_template/index1", - }, - { - []string{"index1", "index2"}, - "/_template/index1%2Cindex2", - }, - } - - for _, test := range tests { - path, _, err := client.IndexGetTemplate().Name(test.Names...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_get_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_get_test.go deleted file mode 100644 index 6d37fca6e..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_get_test.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestIndicesGetValidate(t *testing.T) { - client := setupTestClient(t) - - // No index name -> fail with error - res, err := NewIndicesGetService(client).Index("").Do(context.TODO()) - if err == nil { - t.Fatalf("expected IndicesGet to fail without index name") - } - if res != nil { - t.Fatalf("expected result to be == nil; got: %v", res) - } -} - -func TestIndicesGetURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Features []string - Expected string - }{ - { - []string{}, - []string{}, - "/_all", - }, - { - []string{}, - []string{"_mappings"}, - "/_all/_mappings", - }, - { - []string{"twitter"}, - []string{"_mappings", "_settings"}, - "/twitter/_mappings%2C_settings", - }, - { - []string{"store-1", "store-2"}, - []string{"_mappings", "_settings"}, - "/store-1%2Cstore-2/_mappings%2C_settings", - }, - } - - for _, test := range tests { - path, _, err := NewIndicesGetService(client).Index(test.Indices...).Feature(test.Features...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} - -func TestIndicesGetService(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if esversion < "1.4.0" { - t.Skip("Index Get API is available since 1.4") - return - } - - res, err := client.IndexGet().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatalf("expected result; got: %v", res) - } - info, found := res[testIndexName] - if !found { - t.Fatalf("expected index %q to be found; got: %v", testIndexName, found) - } - if info == nil { - t.Fatalf("expected index %q to be != nil; got: %v", testIndexName, info) - } - if info.Mappings == nil { - t.Errorf("expected mappings to be != nil; got: %v", info.Mappings) - } - if info.Settings == nil { - t.Errorf("expected settings to be != nil; got: %v", info.Settings) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_open.go b/vendor/gopkg.in/olivere/elastic.v5/indices_open.go index 1b58c5721..38277c385 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_open.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_open.go @@ -9,12 +9,12 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesOpenService opens an index. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-open-close.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-open-close.html // for details. type IndicesOpenService struct { client *Client @@ -91,7 +91,7 @@ func (s *IndicesOpenService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.timeout != "" { params.Set("timeout", s.timeout) @@ -138,11 +138,7 @@ func (s *IndicesOpenService) Do(ctx context.Context) (*IndicesOpenResponse, erro } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, nil) if err != nil { return nil, err } @@ -157,7 +153,5 @@ func (s *IndicesOpenService) Do(ctx context.Context) (*IndicesOpenResponse, erro // IndicesOpenResponse is the response of IndicesOpenService.Do. type IndicesOpenResponse struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` + Acknowledged bool `json:"acknowledged"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_open_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_open_test.go deleted file mode 100644 index aab6c5c19..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_open_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestIndicesOpenValidate(t *testing.T) { - client := setupTestClient(t) - - // No index name -> fail with error - res, err := NewIndicesOpenService(client).Do(context.TODO()) - if err == nil { - t.Fatalf("expected IndicesOpen to fail without index name") - } - if res != nil { - t.Fatalf("expected result to be == nil; got: %v", res) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_put_alias.go b/vendor/gopkg.in/olivere/elastic.v5/indices_put_alias.go index 12f8e1bd5..5d965bd66 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_put_alias.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_put_alias.go @@ -192,7 +192,7 @@ func (a *AliasRemoveAction) Source() (interface{}, error) { // -- Service -- // AliasService enables users to add or remove an alias. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-aliases.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-aliases.html // for details. type AliasService struct { client *Client @@ -274,12 +274,7 @@ func (s *AliasService) Do(ctx context.Context) (*AliasResult, error) { body["actions"] = actions // Get response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, body) if err != nil { return nil, err } @@ -296,7 +291,5 @@ func (s *AliasService) Do(ctx context.Context) (*AliasResult, error) { // AliasResult is the outcome of calling Do on AliasService. type AliasResult struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` + Acknowledged bool `json:"acknowledged"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_put_alias_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_put_alias_test.go deleted file mode 100644 index ada1dfdef..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_put_alias_test.go +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "testing" -) - -const ( - testAliasName = "elastic-test-alias" -) - -func TestAliasLifecycle(t *testing.T) { - var err error - - client := setupTestClientAndCreateIndex(t) - - // Some tweets - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "sandrae", Message: "Cycling is fun."} - tweet3 := tweet{User: "olivere", Message: "Another unrelated topic."} - - // Add tweets to first index - _, err = client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Add tweets to second index - _, err = client.Index().Index(testIndexName2).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Flush - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - _, err = client.Flush().Index(testIndexName2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Add both indices to a new alias - aliasCreate, err := client.Alias(). - Add(testIndexName, testAliasName). - Action(NewAliasAddAction(testAliasName).Index(testIndexName2)). - //Pretty(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !aliasCreate.Acknowledged { - t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasCreate.Acknowledged) - } - - // Search should return all 3 tweets - matchAll := NewMatchAllQuery() - searchResult1, err := client.Search().Index(testAliasName).Query(matchAll).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult1.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult1.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult1.Hits.TotalHits) - } - - // Remove first index should remove two tweets, so should only yield 1 - aliasRemove1, err := client.Alias(). - Remove(testIndexName, testAliasName). - //Pretty(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if !aliasRemove1.Acknowledged { - t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasRemove1.Acknowledged) - } - - searchResult2, err := client.Search().Index(testAliasName).Query(matchAll).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult2.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult2.Hits.TotalHits != 1 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 1, searchResult2.Hits.TotalHits) - } -} - -func TestAliasAddAction(t *testing.T) { - var tests = []struct { - Action *AliasAddAction - Expected string - Invalid bool - }{ - { - Action: NewAliasAddAction("").Index(""), - Invalid: true, - }, - { - Action: NewAliasAddAction("alias1").Index(""), - Invalid: true, - }, - { - Action: NewAliasAddAction("").Index("index1"), - Invalid: true, - }, - { - Action: NewAliasAddAction("alias1").Index("index1"), - Expected: `{"add":{"alias":"alias1","index":"index1"}}`, - }, - { - Action: NewAliasAddAction("alias1").Index("index1", "index2"), - Expected: `{"add":{"alias":"alias1","indices":["index1","index2"]}}`, - }, - { - Action: NewAliasAddAction("alias1").Index("index1").Routing("routing1"), - Expected: `{"add":{"alias":"alias1","index":"index1","routing":"routing1"}}`, - }, - { - Action: NewAliasAddAction("alias1").Index("index1").Routing("routing1").IndexRouting("indexRouting1"), - Expected: `{"add":{"alias":"alias1","index":"index1","index_routing":"indexRouting1","routing":"routing1"}}`, - }, - { - Action: NewAliasAddAction("alias1").Index("index1").Routing("routing1").SearchRouting("searchRouting1"), - Expected: `{"add":{"alias":"alias1","index":"index1","routing":"routing1","search_routing":"searchRouting1"}}`, - }, - { - Action: NewAliasAddAction("alias1").Index("index1").Routing("routing1").SearchRouting("searchRouting1", "searchRouting2"), - Expected: `{"add":{"alias":"alias1","index":"index1","routing":"routing1","search_routing":"searchRouting1,searchRouting2"}}`, - }, - { - Action: NewAliasAddAction("alias1").Index("index1").Filter(NewTermQuery("user", "olivere")), - Expected: `{"add":{"alias":"alias1","filter":{"term":{"user":"olivere"}},"index":"index1"}}`, - }, - } - - for i, tt := range tests { - src, err := tt.Action.Source() - if err != nil { - if !tt.Invalid { - t.Errorf("#%d: expected to succeed", i) - } - } else { - if tt.Invalid { - t.Errorf("#%d: expected to fail", i) - } else { - dst, err := json.Marshal(src) - if err != nil { - t.Fatal(err) - } - if want, have := tt.Expected, string(dst); want != have { - t.Errorf("#%d: expected %s, got %s", i, want, have) - } - } - } - } -} - -func TestAliasRemoveAction(t *testing.T) { - var tests = []struct { - Action *AliasRemoveAction - Expected string - Invalid bool - }{ - { - Action: NewAliasRemoveAction(""), - Invalid: true, - }, - { - Action: NewAliasRemoveAction("alias1"), - Invalid: true, - }, - { - Action: NewAliasRemoveAction("").Index("index1"), - Invalid: true, - }, - { - Action: NewAliasRemoveAction("alias1").Index("index1"), - Expected: `{"remove":{"alias":"alias1","index":"index1"}}`, - }, - { - Action: NewAliasRemoveAction("alias1").Index("index1", "index2"), - Expected: `{"remove":{"alias":"alias1","indices":["index1","index2"]}}`, - }, - } - - for i, tt := range tests { - src, err := tt.Action.Source() - if err != nil { - if !tt.Invalid { - t.Errorf("#%d: expected to succeed", i) - } - } else { - if tt.Invalid { - t.Errorf("#%d: expected to fail", i) - } else { - dst, err := json.Marshal(src) - if err != nil { - t.Fatal(err) - } - if want, have := tt.Expected, string(dst); want != have { - t.Errorf("#%d: expected %s, got %s", i, want, have) - } - } - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_put_mapping.go b/vendor/gopkg.in/olivere/elastic.v5/indices_put_mapping.go index 2f8a35e4c..03f26ca91 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_put_mapping.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_put_mapping.go @@ -10,13 +10,13 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesPutMappingService allows to register specific mapping definition // for a specific type. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-put-mapping.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-put-mapping.html // for details. type IndicesPutMappingService struct { client *Client @@ -142,7 +142,7 @@ func (s *IndicesPutMappingService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) @@ -202,12 +202,7 @@ func (s *IndicesPutMappingService) Do(ctx context.Context) (*PutMappingResponse, } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "PUT", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "PUT", path, params, body) if err != nil { return nil, err } @@ -222,7 +217,5 @@ func (s *IndicesPutMappingService) Do(ctx context.Context) (*PutMappingResponse, // PutMappingResponse is the response of IndicesPutMappingService.Do. type PutMappingResponse struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` + Acknowledged bool `json:"acknowledged"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_put_mapping_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_put_mapping_test.go deleted file mode 100644 index 644e1187a..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_put_mapping_test.go +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestPutMappingURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Type string - Expected string - }{ - { - []string{}, - "doc", - "/_mapping/doc", - }, - { - []string{"*"}, - "doc", - "/%2A/_mapping/doc", - }, - { - []string{"store-1", "store-2"}, - "doc", - "/store-1%2Cstore-2/_mapping/doc", - }, - } - - for _, test := range tests { - path, _, err := client.PutMapping().Index(test.Indices...).Type(test.Type).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} - -func TestMappingLifecycle(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - //client := setupTestClientAndCreateIndexAndLog(t) - - // Create index - createIndex, err := client.CreateIndex(testIndexName3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if createIndex == nil { - t.Errorf("expected result to be != nil; got: %v", createIndex) - } - - mapping := `{ - "doc":{ - "properties":{ - "field":{ - "type":"keyword" - } - } - } - }` - - putresp, err := client.PutMapping().Index(testIndexName3).Type("doc").BodyString(mapping).Do(context.TODO()) - if err != nil { - t.Fatalf("expected put mapping to succeed; got: %v", err) - } - if putresp == nil { - t.Fatalf("expected put mapping response; got: %v", putresp) - } - if !putresp.Acknowledged { - t.Fatalf("expected put mapping ack; got: %v", putresp.Acknowledged) - } - - getresp, err := client.GetMapping().Index(testIndexName3).Type("doc").Do(context.TODO()) - if err != nil { - t.Fatalf("expected get mapping to succeed; got: %v", err) - } - if getresp == nil { - t.Fatalf("expected get mapping response; got: %v", getresp) - } - props, ok := getresp[testIndexName3] - if !ok { - t.Fatalf("expected JSON root to be of type map[string]interface{}; got: %#v", props) - } - - // NOTE There is no Delete Mapping API in Elasticsearch 2.0 -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_put_settings.go b/vendor/gopkg.in/olivere/elastic.v5/indices_put_settings.go index 1283eb669..20ae95207 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_put_settings.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_put_settings.go @@ -10,14 +10,14 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesPutSettingsService changes specific index level settings in // real time. // // See the documentation at -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-update-settings.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-update-settings.html. type IndicesPutSettingsService struct { client *Client pretty bool @@ -118,7 +118,7 @@ func (s *IndicesPutSettingsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) @@ -165,12 +165,7 @@ func (s *IndicesPutSettingsService) Do(ctx context.Context) (*IndicesPutSettings } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "PUT", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "PUT", path, params, body) if err != nil { return nil, err } @@ -185,7 +180,5 @@ func (s *IndicesPutSettingsService) Do(ctx context.Context) (*IndicesPutSettings // IndicesPutSettingsResponse is the response of IndicesPutSettingsService.Do. type IndicesPutSettingsResponse struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` + Acknowledged bool `json:"acknowledged"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_put_settings_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_put_settings_test.go deleted file mode 100644 index 0ceea3ef8..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_put_settings_test.go +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestIndicesPutSettingsBuildURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Expected string - }{ - { - []string{}, - "/_settings", - }, - { - []string{"*"}, - "/%2A/_settings", - }, - { - []string{"store-1", "store-2"}, - "/store-1%2Cstore-2/_settings", - }, - } - - for _, test := range tests { - path, _, err := client.IndexPutSettings().Index(test.Indices...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} - -func TestIndicesSettingsLifecycle(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - body := `{ - "index":{ - "refresh_interval":"-1" - } - }` - - // Put settings - putres, err := client.IndexPutSettings().Index(testIndexName).BodyString(body).Do(context.TODO()) - if err != nil { - t.Fatalf("expected put settings to succeed; got: %v", err) - } - if putres == nil { - t.Fatalf("expected put settings response; got: %v", putres) - } - if !putres.Acknowledged { - t.Fatalf("expected put settings ack; got: %v", putres.Acknowledged) - } - - // Read settings - getres, err := client.IndexGetSettings().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatalf("expected get mapping to succeed; got: %v", err) - } - if getres == nil { - t.Fatalf("expected get mapping response; got: %v", getres) - } - - // Check settings - index, found := getres[testIndexName] - if !found { - t.Fatalf("expected to return settings for index %q; got: %#v", testIndexName, getres) - } - // Retrieve "index" section of the settings for index testIndexName - sectionIntf, ok := index.Settings["index"] - if !ok { - t.Fatalf("expected settings to have %q field; got: %#v", "index", getres) - } - section, ok := sectionIntf.(map[string]interface{}) - if !ok { - t.Fatalf("expected settings to be of type map[string]interface{}; got: %#v", getres) - } - refintv, ok := section["refresh_interval"] - if !ok { - t.Fatalf(`expected JSON to include "refresh_interval" field; got: %#v`, getres) - } - if got, want := refintv, "-1"; got != want { - t.Fatalf("expected refresh_interval = %v; got: %v", want, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_put_template.go b/vendor/gopkg.in/olivere/elastic.v5/indices_put_template.go index c0b959647..49df95f54 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_put_template.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_put_template.go @@ -9,11 +9,11 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesPutTemplateService creates or updates index mappings. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-templates.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-templates.html. type IndicesPutTemplateService struct { client *Client pretty bool @@ -118,7 +118,7 @@ func (s *IndicesPutTemplateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.order != nil { params.Set("order", fmt.Sprintf("%v", s.order)) @@ -181,12 +181,7 @@ func (s *IndicesPutTemplateService) Do(ctx context.Context) (*IndicesPutTemplate } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "PUT", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "PUT", path, params, body) if err != nil { return nil, err } @@ -201,7 +196,5 @@ func (s *IndicesPutTemplateService) Do(ctx context.Context) (*IndicesPutTemplate // IndicesPutTemplateResponse is the response of IndicesPutTemplateService.Do. type IndicesPutTemplateResponse struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` + Acknowledged bool `json:"acknowledged,omitempty"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_refresh.go b/vendor/gopkg.in/olivere/elastic.v5/indices_refresh.go index f6c7f165e..dbc83ac2c 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_refresh.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_refresh.go @@ -10,11 +10,11 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // RefreshService explicitly refreshes one or more indices. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-refresh.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/indices-refresh.html. type RefreshService struct { client *Client index []string @@ -73,11 +73,7 @@ func (s *RefreshService) Do(ctx context.Context) (*RefreshResult, error) { } // Get response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_refresh_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_refresh_test.go deleted file mode 100644 index 8640fb602..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_refresh_test.go +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestRefreshBuildURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Indices []string - Expected string - }{ - { - []string{}, - "/_refresh", - }, - { - []string{"index1"}, - "/index1/_refresh", - }, - { - []string{"index1", "index2"}, - "/index1%2Cindex2/_refresh", - }, - } - - for i, test := range tests { - path, _, err := client.Refresh().Index(test.Indices...).buildURL() - if err != nil { - t.Errorf("case #%d: %v", i+1, err) - continue - } - if path != test.Expected { - t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) - } - } -} - -func TestRefresh(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add some documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Refresh indices - res, err := client.Refresh(testIndexName, testIndexName2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected result; got nil") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_rollover.go b/vendor/gopkg.in/olivere/elastic.v5/indices_rollover.go index 841b3836f..ef1cad033 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_rollover.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_rollover.go @@ -10,14 +10,14 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesRolloverService rolls an alias over to a new index when the // existing index is considered to be too large or too old. // // It is documented at -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-rollover-index.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-rollover-index.html. type IndicesRolloverService struct { client *Client pretty bool @@ -189,10 +189,10 @@ func (s *IndicesRolloverService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.dryRun { - params.Set("dry_run", "true") + params.Set("dry_run", "1") } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -242,12 +242,7 @@ func (s *IndicesRolloverService) Do(ctx context.Context) (*IndicesRolloverRespon } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, body) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_rollover_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_rollover_test.go deleted file mode 100644 index 81d7099e0..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_rollover_test.go +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestIndicesRolloverBuildURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Alias string - NewIndex string - Expected string - }{ - { - "logs_write", - "", - "/logs_write/_rollover", - }, - { - "logs_write", - "my_new_index_name", - "/logs_write/_rollover/my_new_index_name", - }, - } - - for i, test := range tests { - path, _, err := client.RolloverIndex(test.Alias).NewIndex(test.NewIndex).buildURL() - if err != nil { - t.Errorf("case #%d: %v", i+1, err) - continue - } - if path != test.Expected { - t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) - } - } -} - -func TestIndicesRolloverBodyConditions(t *testing.T) { - client := setupTestClient(t) - svc := NewIndicesRolloverService(client). - Conditions(map[string]interface{}{ - "max_age": "7d", - "max_docs": 1000, - }) - data, err := json.Marshal(svc.getBody()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"conditions":{"max_age":"7d","max_docs":1000}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestIndicesRolloverBodyAddCondition(t *testing.T) { - client := setupTestClient(t) - svc := NewIndicesRolloverService(client). - AddCondition("max_age", "7d"). - AddCondition("max_docs", 1000) - data, err := json.Marshal(svc.getBody()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"conditions":{"max_age":"7d","max_docs":1000}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestIndicesRolloverBodyAddPredefinedConditions(t *testing.T) { - client := setupTestClient(t) - svc := NewIndicesRolloverService(client). - AddMaxIndexAgeCondition("2d"). - AddMaxIndexDocsCondition(1000000) - data, err := json.Marshal(svc.getBody()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"conditions":{"max_age":"2d","max_docs":1000000}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestIndicesRolloverBodyComplex(t *testing.T) { - client := setupTestClient(t) - svc := NewIndicesRolloverService(client). - AddMaxIndexAgeCondition("2d"). - AddMaxIndexDocsCondition(1000000). - AddSetting("index.number_of_shards", 2). - AddMapping("doc", map[string]interface{}{ - "properties": map[string]interface{}{ - "user": map[string]interface{}{ - "type": "keyword", - }, - }, - }) - data, err := json.Marshal(svc.getBody()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"conditions":{"max_age":"2d","max_docs":1000000},"mappings":{"doc":{"properties":{"user":{"type":"keyword"}}}},"settings":{"index.number_of_shards":2}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_segments.go b/vendor/gopkg.in/olivere/elastic.v5/indices_segments.go index 133d1101e..80ac3ed0c 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_segments.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_segments.go @@ -11,7 +11,7 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesSegmentsService provides low level segments information that a @@ -20,7 +20,7 @@ import ( // optimization information, data "wasted" on deletes, and so on. // // Find further documentation at -// https://www.elastic.co/guide/en/elasticsearch/reference/6.1/indices-segments.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/5.6/indices-segments.html. type IndicesSegmentsService struct { client *Client pretty bool @@ -154,7 +154,7 @@ func (s *IndicesSegmentsService) Do(ctx context.Context) (*IndicesSegmentsRespon } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + res, err := s.client.PerformRequestWithOptions(ctx, PerformRequestOptions{ Method: "GET", Path: path, Params: params, @@ -217,16 +217,7 @@ type IndexSegmentsDetails struct { Version string `json:"version,omitempty"` Compound bool `json:"compound,omitempty"` MergeId string `json:"merge_id,omitempty"` - Sort []*IndexSegmentsSort `json:"sort,omitempty"` RAMTree []*IndexSegmentsRamTree `json:"ram_tree,omitempty"` - Attributes map[string]string `json:"attributes,omitempty"` -} - -type IndexSegmentsSort struct { - Field string `json:"field,omitempty"` - Mode string `json:"mode,omitempty"` - Missing interface{} `json:"missing,omitempty"` - Reverse bool `json:"reverse,omitempty"` } type IndexSegmentsRamTree struct { diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_segments_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_segments_test.go deleted file mode 100644 index 2ec181cc1..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_segments_test.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestIndicesSegments(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Expected string - }{ - { - []string{}, - "/_segments", - }, - { - []string{"index1"}, - "/index1/_segments", - }, - { - []string{"index1", "index2"}, - "/index1%2Cindex2/_segments", - }, - } - - for i, test := range tests { - path, _, err := client.IndexSegments().Index(test.Indices...).buildURL() - if err != nil { - t.Errorf("case #%d: %v", i+1, err) - } - if path != test.Expected { - t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) - } - } -} - -func TestIndexSegments(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", 0))) - - segments, err := client.IndexSegments(testIndexName).Pretty(true).Human(true).Do(context.TODO()) - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if segments == nil { - t.Fatalf("expected response; got: %v", segments) - } - indices, found := segments.Indices[testIndexName] - if !found { - t.Fatalf("expected index information about index %v; got: %v", testIndexName, found) - } - shards, found := indices.Shards["0"] - if !found { - t.Fatalf("expected shard information about index %v", testIndexName) - } - if shards == nil { - t.Fatalf("expected shard information to be != nil for index %v", testIndexName) - } - shard := shards[0] - if shard == nil { - t.Fatalf("expected shard information to be != nil for shard 0 in index %v", testIndexName) - } - if shard.Routing == nil { - t.Fatalf("expected shard routing information to be != nil for index %v", testIndexName) - } - segmentDetail, found := shard.Segments["_0"] - if !found { - t.Fatalf("expected segment detail to be != nil for index %v", testIndexName) - } - if segmentDetail == nil { - t.Fatalf("expected segment detail to be != nil for index %v", testIndexName) - } - if segmentDetail.NumDocs == 0 { - t.Fatal("expected segment to contain >= 1 docs") - } - if len(segmentDetail.Attributes) == 0 { - t.Fatalf("expected segment attributes map to contain at least one key, value pair for index %v", testIndexName) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_shrink.go b/vendor/gopkg.in/olivere/elastic.v5/indices_shrink.go index 6ea72b281..ea20804a6 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_shrink.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_shrink.go @@ -10,14 +10,14 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesShrinkService allows you to shrink an existing index into a // new index with fewer primary shards. // // For further details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-shrink-index.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-shrink-index.html. type IndicesShrinkService struct { client *Client pretty bool @@ -102,7 +102,7 @@ func (s *IndicesShrinkService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -153,12 +153,7 @@ func (s *IndicesShrinkService) Do(ctx context.Context) (*IndicesShrinkResponse, } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, body) if err != nil { return nil, err } @@ -173,7 +168,6 @@ func (s *IndicesShrinkService) Do(ctx context.Context) (*IndicesShrinkResponse, // IndicesShrinkResponse is the response of IndicesShrinkService.Do. type IndicesShrinkResponse struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_shrink_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_shrink_test.go deleted file mode 100644 index 06ab7d923..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_shrink_test.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestIndicesShrinkBuildURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Source string - Target string - Expected string - }{ - { - "my_source_index", - "my_target_index", - "/my_source_index/_shrink/my_target_index", - }, - } - - for i, test := range tests { - path, _, err := client.ShrinkIndex(test.Source, test.Target).buildURL() - if err != nil { - t.Errorf("case #%d: %v", i+1, err) - continue - } - if path != test.Expected { - t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_stats.go b/vendor/gopkg.in/olivere/elastic.v5/indices_stats.go index 20d35a6d4..90ae6837a 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_stats.go +++ b/vendor/gopkg.in/olivere/elastic.v5/indices_stats.go @@ -10,11 +10,11 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IndicesStatsService provides stats on various metrics of one or more -// indices. See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/indices-stats.html. +// indices. See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-stats.html. type IndicesStatsService struct { client *Client pretty bool @@ -135,7 +135,7 @@ func (s *IndicesStatsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if len(s.groups) > 0 { params.Set("groups", strings.Join(s.groups, ",")) @@ -180,11 +180,7 @@ func (s *IndicesStatsService) Do(ctx context.Context) (*IndicesStatsResponse, er } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } @@ -243,20 +239,25 @@ type IndexStatsDocs struct { } type IndexStatsStore struct { - Size string `json:"size,omitempty"` // human size, e.g. 119.3mb - SizeInBytes int64 `json:"size_in_bytes,omitempty"` + Size string `json:"size,omitempty"` // human size, e.g. 119.3mb + SizeInBytes int64 `json:"size_in_bytes,omitempty"` + ThrottleTime string `json:"throttle_time,omitempty"` // human time, e.g. 0s + ThrottleTimeInMillis int64 `json:"throttle_time_in_millis,omitempty"` } type IndexStatsIndexing struct { - IndexTotal int64 `json:"index_total,omitempty"` - IndexTime string `json:"index_time,omitempty"` - IndexTimeInMillis int64 `json:"index_time_in_millis,omitempty"` - IndexCurrent int64 `json:"index_current,omitempty"` - DeleteTotal int64 `json:"delete_total,omitempty"` - DeleteTime string `json:"delete_time,omitempty"` - DeleteTimeInMillis int64 `json:"delete_time_in_millis,omitempty"` - DeleteCurrent int64 `json:"delete_current,omitempty"` - NoopUpdateTotal int64 `json:"noop_update_total,omitempty"` + IndexTotal int64 `json:"index_total,omitempty"` + IndexTime string `json:"index_time,omitempty"` + IndexTimeInMillis int64 `json:"index_time_in_millis,omitempty"` + IndexCurrent int64 `json:"index_current,omitempty"` + DeleteTotal int64 `json:"delete_total,omitempty"` + DeleteTime string `json:"delete_time,omitempty"` + DeleteTimeInMillis int64 `json:"delete_time_in_millis,omitempty"` + DeleteCurrent int64 `json:"delete_current,omitempty"` + NoopUpdateTotal int64 `json:"noop_update_total,omitempty"` + IsThrottled bool `json:"is_throttled,omitempty"` + ThrottleTime string `json:"throttle_time,omitempty"` + ThrottleTimeInMillis int64 `json:"throttle_time_in_millis,omitempty"` } type IndexStatsGet struct { diff --git a/vendor/gopkg.in/olivere/elastic.v5/indices_stats_test.go b/vendor/gopkg.in/olivere/elastic.v5/indices_stats_test.go deleted file mode 100644 index a3392c97a..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/indices_stats_test.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestIndexStatsBuildURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Metrics []string - Expected string - }{ - { - []string{}, - []string{}, - "/_stats", - }, - { - []string{"index1"}, - []string{}, - "/index1/_stats", - }, - { - []string{}, - []string{"metric1"}, - "/_stats/metric1", - }, - { - []string{"index1"}, - []string{"metric1"}, - "/index1/_stats/metric1", - }, - { - []string{"index1", "index2"}, - []string{"metric1"}, - "/index1%2Cindex2/_stats/metric1", - }, - { - []string{"index1", "index2"}, - []string{"metric1", "metric2"}, - "/index1%2Cindex2/_stats/metric1%2Cmetric2", - }, - } - - for i, test := range tests { - path, _, err := client.IndexStats().Index(test.Indices...).Metric(test.Metrics...).buildURL() - if err != nil { - t.Fatalf("case #%d: %v", i+1, err) - } - if path != test.Expected { - t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) - } - } -} - -func TestIndexStats(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - - stats, err := client.IndexStats(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if stats == nil { - t.Fatalf("expected response; got: %v", stats) - } - stat, found := stats.Indices[testIndexName] - if !found { - t.Fatalf("expected stats about index %q; got: %v", testIndexName, found) - } - if stat.Total == nil { - t.Fatalf("expected total to be != nil; got: %v", stat.Total) - } - if stat.Total.Docs == nil { - t.Fatalf("expected total docs to be != nil; got: %v", stat.Total.Docs) - } - if stat.Total.Docs.Count == 0 { - t.Fatalf("expected total docs count to be > 0; got: %d", stat.Total.Docs.Count) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/ingest_delete_pipeline.go b/vendor/gopkg.in/olivere/elastic.v5/ingest_delete_pipeline.go index 78b6d04f2..1e33d9707 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/ingest_delete_pipeline.go +++ b/vendor/gopkg.in/olivere/elastic.v5/ingest_delete_pipeline.go @@ -10,11 +10,11 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IngestDeletePipelineService deletes pipelines by ID. -// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.0/delete-pipeline-api.html. +// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/5.2/delete-pipeline-api.html. type IngestDeletePipelineService struct { client *Client pretty bool @@ -67,7 +67,7 @@ func (s *IngestDeletePipelineService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -104,11 +104,7 @@ func (s *IngestDeletePipelineService) Do(ctx context.Context) (*IngestDeletePipe } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "DELETE", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "DELETE", path, params, nil) if err != nil { return nil, err } @@ -123,7 +119,5 @@ func (s *IngestDeletePipelineService) Do(ctx context.Context) (*IngestDeletePipe // IngestDeletePipelineResponse is the response of IngestDeletePipelineService.Do. type IngestDeletePipelineResponse struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` + Acknowledged bool `json:"acknowledged"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/ingest_delete_pipeline_test.go b/vendor/gopkg.in/olivere/elastic.v5/ingest_delete_pipeline_test.go deleted file mode 100644 index 1163e0f17..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/ingest_delete_pipeline_test.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestIngestDeletePipelineURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Id string - Expected string - }{ - { - "my-pipeline-id", - "/_ingest/pipeline/my-pipeline-id", - }, - } - - for _, test := range tests { - path, _, err := client.IngestDeletePipeline(test.Id).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/ingest_get_pipeline.go b/vendor/gopkg.in/olivere/elastic.v5/ingest_get_pipeline.go index 16a683261..9a3357d7f 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/ingest_get_pipeline.go +++ b/vendor/gopkg.in/olivere/elastic.v5/ingest_get_pipeline.go @@ -10,11 +10,11 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IngestGetPipelineService returns pipelines based on ID. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/get-pipeline-api.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/get-pipeline-api.html // for documentation. type IngestGetPipelineService struct { client *Client @@ -68,7 +68,7 @@ func (s *IngestGetPipelineService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -95,11 +95,7 @@ func (s *IngestGetPipelineService) Do(ctx context.Context) (IngestGetPipelineRes } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/ingest_get_pipeline_test.go b/vendor/gopkg.in/olivere/elastic.v5/ingest_get_pipeline_test.go deleted file mode 100644 index 009b717ca..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/ingest_get_pipeline_test.go +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestIngestGetPipelineURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Id []string - Expected string - }{ - { - nil, - "/_ingest/pipeline", - }, - { - []string{"my-pipeline-id"}, - "/_ingest/pipeline/my-pipeline-id", - }, - { - []string{"*"}, - "/_ingest/pipeline/%2A", - }, - { - []string{"pipeline-1", "pipeline-2"}, - "/_ingest/pipeline/pipeline-1%2Cpipeline-2", - }, - } - - for _, test := range tests { - path, _, err := client.IngestGetPipeline(test.Id...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} - -func TestIngestLifecycle(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) - - // With the new ES Docker images, XPack is already installed and returns a pipeline. So we cannot test for "no pipelines". Skipping for now. - /* - // Get all pipelines (returns 404 that indicates an error) - getres, err := client.IngestGetPipeline().Do(context.TODO()) - if err == nil { - t.Fatal(err) - } - if getres != nil { - t.Fatalf("expected no response, got %v", getres) - } - //*/ - - // Add a pipeline - pipelineDef := `{ - "description" : "reset retweets", - "processors" : [ - { - "set" : { - "field": "retweets", - "value": 0 - } - } - ] -}` - putres, err := client.IngestPutPipeline("my-pipeline").BodyString(pipelineDef).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if putres == nil { - t.Fatal("expected response, got nil") - } - if want, have := true, putres.Acknowledged; want != have { - t.Fatalf("expected ack = %v, got %v", want, have) - } - - // Get all pipelines again - getres, err := client.IngestGetPipeline().Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if have := len(getres); have == 0 { - t.Fatalf("expected at least 1 pipeline, got %d", have) - } - if _, found := getres["my-pipeline"]; !found { - t.Fatalf("expected to find pipline with id %q", "my-pipeline") - } - - // Get pipeline by ID - getres, err = client.IngestGetPipeline("my-pipeline").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if want, have := 1, len(getres); want != have { - t.Fatalf("expected %d pipelines, got %d", want, have) - } - if _, found := getres["my-pipeline"]; !found { - t.Fatalf("expected to find pipline with id %q", "my-pipeline") - } - - // Delete pipeline - delres, err := client.IngestDeletePipeline("my-pipeline").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if delres == nil { - t.Fatal("expected response, got nil") - } - if want, have := true, delres.Acknowledged; want != have { - t.Fatalf("expected ack = %v, got %v", want, have) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/ingest_put_pipeline.go b/vendor/gopkg.in/olivere/elastic.v5/ingest_put_pipeline.go index 5781e7072..315453e9d 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/ingest_put_pipeline.go +++ b/vendor/gopkg.in/olivere/elastic.v5/ingest_put_pipeline.go @@ -10,13 +10,13 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IngestPutPipelineService adds pipelines and updates existing pipelines in // the cluster. // -// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.0/put-pipeline-api.html. +// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/5.2/put-pipeline-api.html. type IngestPutPipelineService struct { client *Client pretty bool @@ -84,7 +84,7 @@ func (s *IngestPutPipelineService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -132,12 +132,7 @@ func (s *IngestPutPipelineService) Do(ctx context.Context) (*IngestPutPipelineRe } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "PUT", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "PUT", path, params, body) if err != nil { return nil, err } @@ -152,7 +147,5 @@ func (s *IngestPutPipelineService) Do(ctx context.Context) (*IngestPutPipelineRe // IngestPutPipelineResponse is the response of IngestPutPipelineService.Do. type IngestPutPipelineResponse struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` + Acknowledged bool `json:"acknowledged"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/ingest_put_pipeline_test.go b/vendor/gopkg.in/olivere/elastic.v5/ingest_put_pipeline_test.go deleted file mode 100644 index 9609f2f53..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/ingest_put_pipeline_test.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestIngestPutPipelineURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Id string - Expected string - }{ - { - "my-pipeline-id", - "/_ingest/pipeline/my-pipeline-id", - }, - } - - for _, test := range tests { - path, _, err := client.IngestPutPipeline(test.Id).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/ingest_simulate_pipeline.go b/vendor/gopkg.in/olivere/elastic.v5/ingest_simulate_pipeline.go index 213f97bbb..04015b459 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/ingest_simulate_pipeline.go +++ b/vendor/gopkg.in/olivere/elastic.v5/ingest_simulate_pipeline.go @@ -10,14 +10,14 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // IngestSimulatePipelineService executes a specific pipeline against the set of // documents provided in the body of the request. // // The API is documented at -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/simulate-pipeline-api.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/simulate-pipeline-api.html. type IngestSimulatePipelineService struct { client *Client pretty bool @@ -85,7 +85,7 @@ func (s *IngestSimulatePipelineService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.verbose != nil { params.Set("verbose", fmt.Sprintf("%v", *s.verbose)) @@ -127,12 +127,7 @@ func (s *IngestSimulatePipelineService) Do(ctx context.Context) (*IngestSimulate } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, body) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/ingest_simulate_pipeline_test.go b/vendor/gopkg.in/olivere/elastic.v5/ingest_simulate_pipeline_test.go deleted file mode 100644 index a254f85ff..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/ingest_simulate_pipeline_test.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestIngestSimulatePipelineURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Id string - Expected string - }{ - { - "", - "/_ingest/pipeline/_simulate", - }, - { - "my-pipeline-id", - "/_ingest/pipeline/my-pipeline-id/_simulate", - }, - } - - for _, test := range tests { - path, _, err := client.IngestSimulatePipeline().Id(test.Id).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/inner_hit_test.go b/vendor/gopkg.in/olivere/elastic.v5/inner_hit_test.go deleted file mode 100644 index fd9bd2e8a..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/inner_hit_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestInnerHitEmpty(t *testing.T) { - hit := NewInnerHit() - src, err := hit.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestInnerHitWithName(t *testing.T) { - hit := NewInnerHit().Name("comments") - src, err := hit.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"name":"comments"}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/mget.go b/vendor/gopkg.in/olivere/elastic.v5/mget.go index 5202a9603..0f2894854 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/mget.go +++ b/vendor/gopkg.in/olivere/elastic.v5/mget.go @@ -16,7 +16,7 @@ import ( // a docs array with all the fetched documents, each element similar // in structure to a document provided by the Get API. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-multi-get.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-multi-get.html // for details. type MgetService struct { client *Client @@ -124,12 +124,7 @@ func (s *MgetService) Do(ctx context.Context) (*MgetResponse, error) { } // Get response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, body) if err != nil { return nil, err } @@ -199,8 +194,8 @@ func (item *MultiGetItem) Version(version int64) *MultiGetItem { return item } -// VersionType can be "internal", "external", "external_gt", or "external_gte". -// See org.elasticsearch.index.VersionType in Elasticsearch source. +// VersionType can be "internal", "external", "external_gt", "external_gte", +// or "force". See org.elasticsearch.index.VersionType in Elasticsearch source. // It is "internal" by default. func (item *MultiGetItem) VersionType(versionType string) *MultiGetItem { item.versionType = versionType diff --git a/vendor/gopkg.in/olivere/elastic.v5/mget_test.go b/vendor/gopkg.in/olivere/elastic.v5/mget_test.go deleted file mode 100644 index 6b3ecd9f6..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/mget_test.go +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "testing" -) - -func TestMultiGet(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add some documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Count documents - count, err := client.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != 3 { - t.Errorf("expected Count = %d; got %d", 3, count) - } - - // Get documents 1 and 3 - res, err := client.MultiGet(). - Add(NewMultiGetItem().Index(testIndexName).Type("doc").Id("1")). - Add(NewMultiGetItem().Index(testIndexName).Type("doc").Id("3")). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected result to be != nil; got nil") - } - if res.Docs == nil { - t.Fatal("expected result docs to be != nil; got nil") - } - if len(res.Docs) != 2 { - t.Fatalf("expected to have 2 docs; got %d", len(res.Docs)) - } - - item := res.Docs[0] - if item.Error != nil { - t.Errorf("expected no error on item 0; got %v", item.Error) - } - if item.Source == nil { - t.Errorf("expected Source != nil; got %v", item.Source) - } - var doc tweet - if err := json.Unmarshal(*item.Source, &doc); err != nil { - t.Fatalf("expected to unmarshal item Source; got %v", err) - } - if doc.Message != tweet1.Message { - t.Errorf("expected Message of first tweet to be %q; got %q", tweet1.Message, doc.Message) - } - - item = res.Docs[1] - if item.Error != nil { - t.Errorf("expected no error on item 1; got %v", item.Error) - } - if item.Source == nil { - t.Errorf("expected Source != nil; got %v", item.Source) - } - if err := json.Unmarshal(*item.Source, &doc); err != nil { - t.Fatalf("expected to unmarshal item Source; got %v", err) - } - if doc.Message != tweet3.Message { - t.Errorf("expected Message of second tweet to be %q; got %q", tweet3.Message, doc.Message) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/msearch.go b/vendor/gopkg.in/olivere/elastic.v5/msearch.go index c1a589a97..bdedded4a 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/msearch.go +++ b/vendor/gopkg.in/olivere/elastic.v5/msearch.go @@ -14,17 +14,17 @@ import ( // MultiSearch executes one or more searches in one roundtrip. type MultiSearchService struct { - client *Client - requests []*SearchRequest - indices []string - pretty bool + client *Client + requests []*SearchRequest + indices []string + pretty bool maxConcurrentRequests *int preFilterShardSize *int } func NewMultiSearchService(client *Client) *MultiSearchService { builder := &MultiSearchService{ - client: client, + client: client, } return builder } @@ -92,12 +92,7 @@ func (s *MultiSearchService) Do(ctx context.Context) (*MultiSearchResult, error) body := strings.Join(lines, "\n") + "\n" // add trailing \n // Get response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, body) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/msearch_test.go b/vendor/gopkg.in/olivere/elastic.v5/msearch_test.go deleted file mode 100644 index d25e2cc28..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/msearch_test.go +++ /dev/null @@ -1,303 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - _ "net/http" - "testing" -) - -func TestMultiSearch(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - // client := setupTestClientAndCreateIndexAndLog(t) - - tweet1 := tweet{ - User: "olivere", - Message: "Welcome to Golang and Elasticsearch.", - Tags: []string{"golang", "elasticsearch"}, - } - tweet2 := tweet{ - User: "olivere", - Message: "Another unrelated topic.", - Tags: []string{"golang"}, - } - tweet3 := tweet{ - User: "sandrae", - Message: "Cycling is fun.", - Tags: []string{"sports", "cycling"}, - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Spawn two search queries with one roundtrip - q1 := NewMatchAllQuery() - q2 := NewTermQuery("tags", "golang") - - sreq1 := NewSearchRequest().Index(testIndexName, testIndexName2). - Source(NewSearchSource().Query(q1).Size(10)) - sreq2 := NewSearchRequest().Index(testIndexName).Type("doc"). - Source(NewSearchSource().Query(q2)) - - searchResult, err := client.MultiSearch(). - Add(sreq1, sreq2). - Pretty(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Responses == nil { - t.Fatal("expected responses != nil; got nil") - } - if len(searchResult.Responses) != 2 { - t.Fatalf("expected 2 responses; got %d", len(searchResult.Responses)) - } - - sres := searchResult.Responses[0] - if sres.Hits == nil { - t.Errorf("expected Hits != nil; got nil") - } - if sres.Hits.TotalHits != 3 { - t.Errorf("expected Hits.TotalHits = %d; got %d", 3, sres.Hits.TotalHits) - } - if len(sres.Hits.Hits) != 3 { - t.Errorf("expected len(Hits.Hits) = %d; got %d", 3, len(sres.Hits.Hits)) - } - for _, hit := range sres.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } - - sres = searchResult.Responses[1] - if sres.Hits == nil { - t.Errorf("expected Hits != nil; got nil") - } - if sres.Hits.TotalHits != 2 { - t.Errorf("expected Hits.TotalHits = %d; got %d", 2, sres.Hits.TotalHits) - } - if len(sres.Hits.Hits) != 2 { - t.Errorf("expected len(Hits.Hits) = %d; got %d", 2, len(sres.Hits.Hits)) - } - for _, hit := range sres.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} - -func TestMultiSearchWithStrings(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - // client := setupTestClientAndCreateIndexAndLog(t) - - tweet1 := tweet{ - User: "olivere", - Message: "Welcome to Golang and Elasticsearch.", - Tags: []string{"golang", "elasticsearch"}, - } - tweet2 := tweet{ - User: "olivere", - Message: "Another unrelated topic.", - Tags: []string{"golang"}, - } - tweet3 := tweet{ - User: "sandrae", - Message: "Cycling is fun.", - Tags: []string{"sports", "cycling"}, - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Spawn two search queries with one roundtrip - sreq1 := NewSearchRequest().Index(testIndexName, testIndexName2). - Source(`{"query":{"match_all":{}}}`) - sreq2 := NewSearchRequest().Index(testIndexName).Type("doc"). - Source(`{"query":{"term":{"tags":"golang"}}}`) - - searchResult, err := client.MultiSearch(). - Add(sreq1, sreq2). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Responses == nil { - t.Fatal("expected responses != nil; got nil") - } - if len(searchResult.Responses) != 2 { - t.Fatalf("expected 2 responses; got %d", len(searchResult.Responses)) - } - - sres := searchResult.Responses[0] - if sres.Hits == nil { - t.Errorf("expected Hits != nil; got nil") - } - if sres.Hits.TotalHits != 3 { - t.Errorf("expected Hits.TotalHits = %d; got %d", 3, sres.Hits.TotalHits) - } - if len(sres.Hits.Hits) != 3 { - t.Errorf("expected len(Hits.Hits) = %d; got %d", 3, len(sres.Hits.Hits)) - } - for _, hit := range sres.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } - - sres = searchResult.Responses[1] - if sres.Hits == nil { - t.Errorf("expected Hits != nil; got nil") - } - if sres.Hits.TotalHits != 2 { - t.Errorf("expected Hits.TotalHits = %d; got %d", 2, sres.Hits.TotalHits) - } - if len(sres.Hits.Hits) != 2 { - t.Errorf("expected len(Hits.Hits) = %d; got %d", 2, len(sres.Hits.Hits)) - } - for _, hit := range sres.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} - -func TestMultiSearchWithOneRequest(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", - Message: "Welcome to Golang and Elasticsearch.", - Tags: []string{"golang", "elasticsearch"}, - } - tweet2 := tweet{ - User: "olivere", - Message: "Another unrelated topic.", - Tags: []string{"golang"}, - } - tweet3 := tweet{ - User: "sandrae", - Message: "Cycling is fun.", - Tags: []string{"sports", "cycling"}, - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Spawn two search queries with one roundtrip - query := NewMatchAllQuery() - source := NewSearchSource().Query(query).Size(10) - sreq := NewSearchRequest().Source(source) - - searchResult, err := client.MultiSearch(). - Index(testIndexName). - Add(sreq). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Responses == nil { - t.Fatal("expected responses != nil; got nil") - } - if len(searchResult.Responses) != 1 { - t.Fatalf("expected 1 responses; got %d", len(searchResult.Responses)) - } - - sres := searchResult.Responses[0] - if sres.Hits == nil { - t.Errorf("expected Hits != nil; got nil") - } - if sres.Hits.TotalHits != 3 { - t.Errorf("expected Hits.TotalHits = %d; got %d", 3, sres.Hits.TotalHits) - } - if len(sres.Hits.Hits) != 3 { - t.Errorf("expected len(Hits.Hits) = %d; got %d", 3, len(sres.Hits.Hits)) - } - for _, hit := range sres.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/mtermvectors.go b/vendor/gopkg.in/olivere/elastic.v5/mtermvectors.go index 755718e67..da0ca70c5 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/mtermvectors.go +++ b/vendor/gopkg.in/olivere/elastic.v5/mtermvectors.go @@ -11,14 +11,14 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // MultiTermvectorService returns information and statistics on terms in the // fields of a particular document. The document could be stored in the // index or artificially provided by the user. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-multi-termvectors.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-multi-termvectors.html // for documentation. type MultiTermvectorService struct { client *Client @@ -198,7 +198,7 @@ func (s *MultiTermvectorService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.fieldStatistics != nil { params.Set("field_statistics", fmt.Sprintf("%v", *s.fieldStatistics)) @@ -278,12 +278,7 @@ func (s *MultiTermvectorService) Do(ctx context.Context) (*MultiTermvectorRespon } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, body) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/mtermvectors_test.go b/vendor/gopkg.in/olivere/elastic.v5/mtermvectors_test.go deleted file mode 100644 index 5f90cd5e2..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/mtermvectors_test.go +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestMultiTermVectorsValidateAndBuildURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Index string - Type string - Expected string - ExpectValidateFailure bool - }{ - // #0: No index, no type - { - "", - "", - "/_mtermvectors", - false, - }, - // #1: Index only - { - "twitter", - "", - "/twitter/_mtermvectors", - false, - }, - // #2: Type without index - { - "", - "doc", - "", - true, - }, - // #3: Both index and type - { - "twitter", - "doc", - "/twitter/doc/_mtermvectors", - false, - }, - } - - for i, test := range tests { - builder := client.MultiTermVectors().Index(test.Index).Type(test.Type) - // Validate - err := builder.Validate() - if err != nil { - if !test.ExpectValidateFailure { - t.Errorf("#%d: expected no error, got: %v", i, err) - continue - } - } else { - if test.ExpectValidateFailure { - t.Errorf("#%d: expected error, got: nil", i) - continue - } - // Build - path, _, err := builder.buildURL() - if err != nil { - t.Errorf("#%d: expected no error, got: %v", i, err) - continue - } - if path != test.Expected { - t.Errorf("#%d: expected %q; got: %q", i, test.Expected, path) - } - } - } -} - -func TestMultiTermVectorsWithIds(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Count documents - count, err := client.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if count != 3 { - t.Errorf("expected Count = %d; got %d", 3, count) - } - - // MultiTermVectors by specifying ID by 1 and 3 - field := "Message" - res, err := client.MultiTermVectors(). - Index(testIndexName). - Type("doc"). - Add(NewMultiTermvectorItem().Index(testIndexName).Type("doc").Id("1").Fields(field)). - Add(NewMultiTermvectorItem().Index(testIndexName).Type("doc").Id("3").Fields(field)). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected to return information and statistics") - } - if res.Docs == nil { - t.Fatal("expected result docs to be != nil; got nil") - } - if len(res.Docs) != 2 { - t.Fatalf("expected to have 2 docs; got %d", len(res.Docs)) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/nodes_info.go b/vendor/gopkg.in/olivere/elastic.v5/nodes_info.go index 9f1422a69..b3687d689 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/nodes_info.go +++ b/vendor/gopkg.in/olivere/elastic.v5/nodes_info.go @@ -11,12 +11,12 @@ import ( "strings" "time" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // NodesInfoService allows to retrieve one or more or all of the // cluster nodes information. -// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.0/cluster-nodes-info.html. +// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/5.2/cluster-nodes-info.html. type NodesInfoService struct { client *Client pretty bool @@ -89,7 +89,7 @@ func (s *NodesInfoService) buildURL() (string, url.Values, error) { params.Set("human", fmt.Sprintf("%v", *s.human)) } if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } return path, params, nil } @@ -113,11 +113,7 @@ func (s *NodesInfoService) Do(ctx context.Context) (*NodesInfoResponse, error) { } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/nodes_info_test.go b/vendor/gopkg.in/olivere/elastic.v5/nodes_info_test.go deleted file mode 100644 index 41d997584..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/nodes_info_test.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestNodesInfo(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - - info, err := client.NodesInfo().Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if info == nil { - t.Fatal("expected nodes info") - } - - if info.ClusterName == "" { - t.Errorf("expected cluster name; got: %q", info.ClusterName) - } - if len(info.Nodes) == 0 { - t.Errorf("expected some nodes; got: %d", len(info.Nodes)) - } - for id, node := range info.Nodes { - if id == "" { - t.Errorf("expected node id; got: %q", id) - } - if node == nil { - t.Fatalf("expected node info; got: %v", node) - } - if node.IP == "" { - t.Errorf("expected node IP; got: %q", node.IP) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/nodes_stats.go b/vendor/gopkg.in/olivere/elastic.v5/nodes_stats.go index 7c5f0c9d6..a955bb426 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/nodes_stats.go +++ b/vendor/gopkg.in/olivere/elastic.v5/nodes_stats.go @@ -11,7 +11,7 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // NodesStatsService returns node statistics. @@ -165,7 +165,7 @@ func (s *NodesStatsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if len(s.completionFields) > 0 { params.Set("completion_fields", strings.Join(s.completionFields, ",")) @@ -213,11 +213,7 @@ func (s *NodesStatsService) Do(ctx context.Context) (*NodesStatsResponse, error) } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } @@ -320,21 +316,26 @@ type NodesStatsDocsStats struct { } type NodesStatsStoreStats struct { - Size string `json:"size"` - SizeInBytes int64 `json:"size_in_bytes"` + Size string `json:"size"` + SizeInBytes int64 `json:"size_in_bytes"` + ThrottleTime string `json:"throttle_time"` + ThrottleTimeInMillis int64 `json:"throttle_time_in_millis"` } type NodesStatsIndexingStats struct { - IndexTotal int64 `json:"index_total"` - IndexTime string `json:"index_time"` - IndexTimeInMillis int64 `json:"index_time_in_millis"` - IndexCurrent int64 `json:"index_current"` - IndexFailed int64 `json:"index_failed"` - DeleteTotal int64 `json:"delete_total"` - DeleteTime string `json:"delete_time"` - DeleteTimeInMillis int64 `json:"delete_time_in_millis"` - DeleteCurrent int64 `json:"delete_current"` - NoopUpdateTotal int64 `json:"noop_update_total"` + IndexTotal int64 `json:"index_total"` + IndexTime string `json:"index_time"` + IndexTimeInMillis int64 `json:"index_time_in_millis"` + IndexCurrent int64 `json:"index_current"` + IndexFailed int64 `json:"index_failed"` + DeleteTotal int64 `json:"delete_total"` + DeleteTime string `json:"delete_time"` + DeleteTimeInMillis int64 `json:"delete_time_in_millis"` + DeleteCurrent int64 `json:"delete_current"` + NoopUpdateTotal int64 `json:"noop_update_total"` + IsThrottled bool `json:"is_throttled"` + ThrottleTime string `json:"throttle_time"` + ThrottleTimeInMillis int64 `json:"throttle_time_in_millis"` Types map[string]*NodesStatsIndexingStats `json:"types"` // stats for individual types } @@ -494,8 +495,10 @@ type NodesStatsRequestCacheStats struct { } type NodesStatsRecoveryStats struct { - CurrentAsSource int `json:"current_as_source"` - CurrentAsTarget int `json:"current_as_target"` + CurrentAsSource int `json:"current_as_source"` + CurrentAsTarget int `json:"current_as_target"` + ThrottleTime string `json:"throttle_time"` + ThrottleTimeInMillis int64 `json:"throttle_time_in_millis"` } type NodesStatsNodeOS struct { diff --git a/vendor/gopkg.in/olivere/elastic.v5/nodes_stats_test.go b/vendor/gopkg.in/olivere/elastic.v5/nodes_stats_test.go deleted file mode 100644 index 4b249a2f4..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/nodes_stats_test.go +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestNodesStats(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - - info, err := client.NodesStats().Human(true).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if info == nil { - t.Fatal("expected nodes stats") - } - - if info.ClusterName == "" { - t.Errorf("expected cluster name; got: %q", info.ClusterName) - } - if len(info.Nodes) == 0 { - t.Errorf("expected some nodes; got: %d", len(info.Nodes)) - } - for id, node := range info.Nodes { - if id == "" { - t.Errorf("expected node id; got: %q", id) - } - if node == nil { - t.Fatalf("expected node info; got: %v", node) - } - if len(node.Name) == 0 { - t.Errorf("expected node name; got: %q", node.Name) - } - if node.Timestamp == 0 { - t.Errorf("expected timestamp; got: %q", node.Timestamp) - } - } -} - -func TestNodesStatsBuildURL(t *testing.T) { - tests := []struct { - NodeIds []string - Metrics []string - IndexMetrics []string - Expected string - }{ - { - NodeIds: nil, - Metrics: nil, - IndexMetrics: nil, - Expected: "/_nodes/stats", - }, - { - NodeIds: []string{"node1"}, - Metrics: nil, - IndexMetrics: nil, - Expected: "/_nodes/node1/stats", - }, - { - NodeIds: []string{"node1", "node2"}, - Metrics: nil, - IndexMetrics: nil, - Expected: "/_nodes/node1%2Cnode2/stats", - }, - { - NodeIds: nil, - Metrics: []string{"indices"}, - IndexMetrics: nil, - Expected: "/_nodes/stats/indices", - }, - { - NodeIds: nil, - Metrics: []string{"indices", "jvm"}, - IndexMetrics: nil, - Expected: "/_nodes/stats/indices%2Cjvm", - }, - { - NodeIds: []string{"node1"}, - Metrics: []string{"indices", "jvm"}, - IndexMetrics: nil, - Expected: "/_nodes/node1/stats/indices%2Cjvm", - }, - { - NodeIds: nil, - Metrics: nil, - IndexMetrics: []string{"fielddata"}, - Expected: "/_nodes/stats/_all/fielddata", - }, - { - NodeIds: []string{"node1"}, - Metrics: nil, - IndexMetrics: []string{"fielddata"}, - Expected: "/_nodes/node1/stats/_all/fielddata", - }, - { - NodeIds: nil, - Metrics: []string{"indices"}, - IndexMetrics: []string{"fielddata"}, - Expected: "/_nodes/stats/indices/fielddata", - }, - { - NodeIds: []string{"node1"}, - Metrics: []string{"indices"}, - IndexMetrics: []string{"fielddata"}, - Expected: "/_nodes/node1/stats/indices/fielddata", - }, - { - NodeIds: []string{"node1", "node2"}, - Metrics: []string{"indices", "jvm"}, - IndexMetrics: []string{"fielddata", "docs"}, - Expected: "/_nodes/node1%2Cnode2/stats/indices%2Cjvm/fielddata%2Cdocs", - }, - } - - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - for i, tt := range tests { - svc := client.NodesStats().NodeId(tt.NodeIds...).Metric(tt.Metrics...).IndexMetric(tt.IndexMetrics...) - path, _, err := svc.buildURL() - if err != nil { - t.Errorf("#%d: expected no error, got %v", i, err) - } else { - if want, have := tt.Expected, path; want != have { - t.Errorf("#%d: expected %q, got %q", i, want, have) - } - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/percolate_test.go b/vendor/gopkg.in/olivere/elastic.v5/percolate_test.go deleted file mode 100644 index 3b3b2efb7..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/percolate_test.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestPercolate(t *testing.T) { - //client := setupTestClientAndCreateIndex(t, SetErrorLog(log.New(os.Stdout, "", 0))) - //client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - // Create query index - createQueryIndex, err := client.CreateIndex(testQueryIndex).Body(testQueryMapping).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if createQueryIndex == nil { - t.Errorf("expected result to be != nil; got: %v", createQueryIndex) - } - - // Add a document - _, err = client.Index(). - Index(testQueryIndex). - Type("doc"). - Id("1"). - BodyJson(`{"query":{"match":{"message":"bonsai tree"}}}`). - Refresh("wait_for"). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Percolate should return our registered query - pq := NewPercolatorQuery(). - Field("query"). - DocumentType("doc"). - Document(doctype{Message: "A new bonsai tree in the office"}) - res, err := client.Search(testQueryIndex).Type("doc").Query(pq).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected results != nil; got nil") - } - if res.Hits == nil { - t.Fatal("expected SearchResult.Hits != nil; got nil") - } - if got, want := res.Hits.TotalHits, int64(1); got != want { - t.Fatalf("expected SearchResult.Hits.TotalHits = %d; got %d", want, got) - } - if got, want := len(res.Hits.Hits), 1; got != want { - t.Fatalf("expected len(SearchResult.Hits.Hits) = %d; got %d", want, got) - } - hit := res.Hits.Hits[0] - if hit.Index != testQueryIndex { - t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testQueryIndex, hit.Index) - } - got := string(*hit.Source) - expected := `{"query":{"match":{"message":"bonsai tree"}}}` - if got != expected { - t.Fatalf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/ping.go b/vendor/gopkg.in/olivere/elastic.v5/ping.go index 5c2d34f00..a97ddeceb 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/ping.go +++ b/vendor/gopkg.in/olivere/elastic.v5/ping.go @@ -86,7 +86,7 @@ func (s *PingService) Do(ctx context.Context) (*PingResult, int, error) { params.Set("timeout", s.timeout) } if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if len(params) > 0 { url_ += "?" + params.Encode() diff --git a/vendor/gopkg.in/olivere/elastic.v5/ping_test.go b/vendor/gopkg.in/olivere/elastic.v5/ping_test.go deleted file mode 100644 index 273913803..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/ping_test.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "net/http" - "testing" -) - -func TestPingGet(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - res, code, err := client.Ping(DefaultURL).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if code != http.StatusOK { - t.Errorf("expected status code = %d; got %d", http.StatusOK, code) - } - if res == nil { - t.Fatalf("expected to return result, got: %v", res) - } - if res.Name == "" { - t.Errorf("expected Name != \"\"; got %q", res.Name) - } - if res.Version.Number == "" { - t.Errorf("expected Version.Number != \"\"; got %q", res.Version.Number) - } -} - -func TestPingHead(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - res, code, err := client.Ping(DefaultURL).HttpHeadOnly(true).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if code != http.StatusOK { - t.Errorf("expected status code = %d; got %d", http.StatusOK, code) - } - if res != nil { - t.Errorf("expected not to return result, got: %v", res) - } -} - -func TestPingHeadFailure(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - res, code, err := client. - Ping("http://127.0.0.1:9299"). - HttpHeadOnly(true). - Do(context.TODO()) - if err == nil { - t.Error("expected error, got nil") - } - if code == http.StatusOK { - t.Errorf("expected status code != %d; got %d", http.StatusOK, code) - } - if res != nil { - t.Errorf("expected not to return result, got: %v", res) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/plugins_test.go b/vendor/gopkg.in/olivere/elastic.v5/plugins_test.go deleted file mode 100644 index 969f0b0e5..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/plugins_test.go +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestClientPlugins(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - _, err = client.Plugins() - if err != nil { - t.Fatal(err) - } -} - -func TestClientHasPlugin(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - found, err := client.HasPlugin("no-such-plugin") - if err != nil { - t.Fatal(err) - } - if found { - t.Fatalf("expected to not find plugin %q", "no-such-plugin") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/put_template.go b/vendor/gopkg.in/olivere/elastic.v5/put_template.go new file mode 100644 index 000000000..5bd8423b5 --- /dev/null +++ b/vendor/gopkg.in/olivere/elastic.v5/put_template.go @@ -0,0 +1,145 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + + "gopkg.in/olivere/elastic.v5/uritemplates" +) + +// PutTemplateService creates or updates a search template. +// The documentation can be found at +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-template.html. +type PutTemplateService struct { + client *Client + pretty bool + id string + opType string + version *int + versionType string + bodyJson interface{} + bodyString string +} + +// NewPutTemplateService creates a new PutTemplateService. +func NewPutTemplateService(client *Client) *PutTemplateService { + return &PutTemplateService{ + client: client, + } +} + +// Id is the template ID. +func (s *PutTemplateService) Id(id string) *PutTemplateService { + s.id = id + return s +} + +// OpType is an explicit operation type. +func (s *PutTemplateService) OpType(opType string) *PutTemplateService { + s.opType = opType + return s +} + +// Version is an explicit version number for concurrency control. +func (s *PutTemplateService) Version(version int) *PutTemplateService { + s.version = &version + return s +} + +// VersionType is a specific version type. +func (s *PutTemplateService) VersionType(versionType string) *PutTemplateService { + s.versionType = versionType + return s +} + +// BodyJson is the document as a JSON serializable object. +func (s *PutTemplateService) BodyJson(body interface{}) *PutTemplateService { + s.bodyJson = body + return s +} + +// BodyString is the document as a string. +func (s *PutTemplateService) BodyString(body string) *PutTemplateService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *PutTemplateService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_search/template/{id}", map[string]string{ + "id": s.id, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.version != nil { + params.Set("version", fmt.Sprintf("%d", *s.version)) + } + if s.versionType != "" { + params.Set("version_type", s.versionType) + } + if s.opType != "" { + params.Set("op_type", s.opType) + } + + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *PutTemplateService) Validate() error { + var invalid []string + if s.id == "" { + invalid = append(invalid, "Id") + } + if s.bodyString == "" && s.bodyJson == nil { + invalid = append(invalid, "BodyJson") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *PutTemplateService) Do(ctx context.Context) (*AcknowledgedResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else { + body = s.bodyString + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, "PUT", path, params, body) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(AcknowledgedResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v5/recipes/bulk_insert/bulk_insert.go b/vendor/gopkg.in/olivere/elastic.v5/recipes/bulk_insert/bulk_insert.go deleted file mode 100644 index 5a8ab39d0..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/recipes/bulk_insert/bulk_insert.go +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -// BulkInsert illustrates how to bulk insert documents into Elasticsearch. -// -// It uses two goroutines to do so. The first creates a simple document -// and sends it to the second via a channel. The second goroutine collects -// those documents, creates a bulk request that is added to a Bulk service -// and committed to Elasticsearch after reaching a number of documents. -// The number of documents after which a commit happens can be specified -// via the "bulk-size" flag. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-bulk.html -// for details on the Bulk API in Elasticsearch. -// -// Example -// -// Bulk index 100.000 documents into the index "warehouse", type "product", -// committing every set of 1.000 documents. -// -// bulk_insert -index=warehouse -type=product -n=100000 -bulk-size=1000 -// -package main - -import ( - "context" - "encoding/base64" - "errors" - "flag" - "fmt" - "log" - "math/rand" - "sync/atomic" - "time" - - "golang.org/x/sync/errgroup" - "github.com/olivere/elastic" -) - -func main() { - var ( - url = flag.String("url", "http://localhost:9200", "Elasticsearch URL") - index = flag.String("index", "", "Elasticsearch index name") - typ = flag.String("type", "", "Elasticsearch type name") - sniff = flag.Bool("sniff", true, "Enable or disable sniffing") - n = flag.Int("n", 0, "Number of documents to bulk insert") - bulkSize = flag.Int("bulk-size", 0, "Number of documents to collect before committing") - ) - flag.Parse() - log.SetFlags(0) - rand.Seed(time.Now().UnixNano()) - - if *url == "" { - log.Fatal("missing url parameter") - } - if *index == "" { - log.Fatal("missing index parameter") - } - if *typ == "" { - log.Fatal("missing type parameter") - } - if *n <= 0 { - log.Fatal("n must be a positive number") - } - if *bulkSize <= 0 { - log.Fatal("bulk-size must be a positive number") - } - - // Create an Elasticsearch client - client, err := elastic.NewClient(elastic.SetURL(*url), elastic.SetSniff(*sniff)) - if err != nil { - log.Fatal(err) - } - - // Setup a group of goroutines from the excellent errgroup package - g, ctx := errgroup.WithContext(context.TODO()) - - // The first goroutine will emit documents and send it to the second goroutine - // via the docsc channel. - // The second Goroutine will simply bulk insert the documents. - type doc struct { - ID string `json:"id"` - Timestamp time.Time `json:"@timestamp"` - } - docsc := make(chan doc) - - begin := time.Now() - - // Goroutine to create documents - g.Go(func() error { - defer close(docsc) - - buf := make([]byte, 32) - for i := 0; i < *n; i++ { - // Generate a random ID - _, err := rand.Read(buf) - if err != nil { - return err - } - id := base64.URLEncoding.EncodeToString(buf) - - // Construct the document - d := doc{ - ID: id, - Timestamp: time.Now(), - } - - // Send over to 2nd goroutine, or cancel - select { - case docsc <- d: - case <-ctx.Done(): - return ctx.Err() - } - } - return nil - }) - - // Second goroutine will consume the documents sent from the first and bulk insert into ES - var total uint64 - g.Go(func() error { - bulk := client.Bulk().Index(*index).Type(*typ) - for d := range docsc { - // Simple progress - current := atomic.AddUint64(&total, 1) - dur := time.Since(begin).Seconds() - sec := int(dur) - pps := int64(float64(current) / dur) - fmt.Printf("%10d | %6d req/s | %02d:%02d\r", current, pps, sec/60, sec%60) - - // Enqueue the document - bulk.Add(elastic.NewBulkIndexRequest().Id(d.ID).Doc(d)) - if bulk.NumberOfActions() >= *bulkSize { - // Commit - res, err := bulk.Do(ctx) - if err != nil { - return err - } - if res.Errors { - // Look up the failed documents with res.Failed(), and e.g. recommit - return errors.New("bulk commit failed") - } - // "bulk" is reset after Do, so you can reuse it - } - - select { - default: - case <-ctx.Done(): - return ctx.Err() - } - } - - // Commit the final batch before exiting - if bulk.NumberOfActions() > 0 { - _, err = bulk.Do(ctx) - if err != nil { - return err - } - } - return nil - }) - - // Wait until all goroutines are finished - if err := g.Wait(); err != nil { - log.Fatal(err) - } - - // Final results - dur := time.Since(begin).Seconds() - sec := int(dur) - pps := int64(float64(total) / dur) - fmt.Printf("%10d | %6d req/s | %02d:%02d\n", total, pps, sec/60, sec%60) -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/recipes/bulk_processor/main.go b/vendor/gopkg.in/olivere/elastic.v5/recipes/bulk_processor/main.go deleted file mode 100644 index f13243297..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/recipes/bulk_processor/main.go +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -// BulkProcessor runs a bulk processing job that fills an index -// given certain criteria like flush interval etc. -// -// Example -// -// bulk_processor -url=http://127.0.0.1:9200/bulk-processor-test?sniff=false -n=100000 -flush-interval=1s -// -package main - -import ( - "context" - "flag" - "fmt" - "log" - "math/rand" - "os" - "os/signal" - "sync/atomic" - "syscall" - "time" - - "github.com/google/uuid" - - "github.com/olivere/elastic" - "github.com/olivere/elastic/config" -) - -func main() { - var ( - url = flag.String("url", "http://localhost:9200/bulk-processor-test", "Elasticsearch URL") - numWorkers = flag.Int("num-workers", 4, "Number of workers") - n = flag.Int64("n", -1, "Number of documents to process (-1 for unlimited)") - flushInterval = flag.Duration("flush-interval", 1*time.Second, "Flush interval") - bulkActions = flag.Int("bulk-actions", 0, "Number of bulk actions before committing") - bulkSize = flag.Int("bulk-size", 0, "Size of bulk requests before committing") - ) - flag.Parse() - log.SetFlags(0) - - rand.Seed(time.Now().UnixNano()) - - // Parse configuration from URL - cfg, err := config.Parse(*url) - if err != nil { - log.Fatal(err) - } - - // Create an Elasticsearch client from the parsed config - client, err := elastic.NewClientFromConfig(cfg) - if err != nil { - log.Fatal(err) - } - - // Drop old index - exists, err := client.IndexExists(cfg.Index).Do(context.Background()) - if err != nil { - log.Fatal(err) - } - if exists { - _, err = client.DeleteIndex(cfg.Index).Do(context.Background()) - if err != nil { - log.Fatal(err) - } - } - - // Create processor - bulkp := elastic.NewBulkProcessorService(client). - Name("bulk-test-processor"). - Stats(true). - Backoff(elastic.StopBackoff{}). - FlushInterval(*flushInterval). - Workers(*numWorkers) - if *bulkActions > 0 { - bulkp = bulkp.BulkActions(*bulkActions) - } - if *bulkSize > 0 { - bulkp = bulkp.BulkSize(*bulkSize) - } - p, err := bulkp.Do(context.Background()) - if err != nil { - log.Fatal(err) - } - - var created int64 - errc := make(chan error, 1) - go func() { - c := make(chan os.Signal, 1) - signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) - <-c - errc <- nil - }() - - go func() { - defer func() { - if err := p.Close(); err != nil { - errc <- err - } - }() - - type Doc struct { - Timestamp time.Time `json:"@timestamp"` - } - - for { - current := atomic.AddInt64(&created, 1) - if *n > 0 && current >= *n { - errc <- nil - return - } - r := elastic.NewBulkIndexRequest(). - Index(cfg.Index). - Type("doc"). - Id(uuid.New().String()). - Doc(Doc{Timestamp: time.Now()}) - p.Add(r) - - time.Sleep(time.Duration(rand.Intn(1000)) * time.Microsecond) - } - }() - - go func() { - t := time.NewTicker(1 * time.Second) - defer t.Stop() - for range t.C { - stats := p.Stats() - written := atomic.LoadInt64(&created) - var queued int64 - for _, w := range stats.Workers { - queued += w.Queued - } - fmt.Printf("Queued=%5d Written=%8d Succeeded=%8d Failed=%8d Comitted=%6d Flushed=%6d\n", - queued, - written, - stats.Succeeded, - stats.Failed, - stats.Committed, - stats.Flushed, - ) - } - }() - - if err := <-errc; err != nil { - log.Fatal(err) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/recipes/connect/connect.go b/vendor/gopkg.in/olivere/elastic.v5/recipes/connect/connect.go deleted file mode 100644 index baff6c114..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/recipes/connect/connect.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -// Connect simply connects to Elasticsearch. -// -// Example -// -// -// connect -url=http://127.0.0.1:9200 -sniff=false -// -package main - -import ( - "flag" - "fmt" - "log" - - "github.com/olivere/elastic" -) - -func main() { - var ( - url = flag.String("url", "http://localhost:9200", "Elasticsearch URL") - sniff = flag.Bool("sniff", true, "Enable or disable sniffing") - ) - flag.Parse() - log.SetFlags(0) - - if *url == "" { - *url = "http://127.0.0.1:9200" - } - - // Create an Elasticsearch client - client, err := elastic.NewClient(elastic.SetURL(*url), elastic.SetSniff(*sniff)) - if err != nil { - log.Fatal(err) - } - _ = client - - // Just a status message - fmt.Println("Connection succeeded") -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/recipes/sliced_scroll/sliced_scroll.go b/vendor/gopkg.in/olivere/elastic.v5/recipes/sliced_scroll/sliced_scroll.go deleted file mode 100644 index d753a61cb..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/recipes/sliced_scroll/sliced_scroll.go +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -// SlicedScroll illustrates scrolling through a set of documents -// in parallel. It uses the sliced scrolling feature introduced -// in Elasticsearch 5.0 to create a number of Goroutines, each -// scrolling through a slice of the total results. A second goroutine -// receives the hits from the set of goroutines scrolling through -// the slices and simply counts the total number and the number of -// documents received per slice. -// -// The speedup of sliced scrolling can be significant but is very -// dependent on the specific use case. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-scroll.html#sliced-scroll -// for details on sliced scrolling in Elasticsearch. -// -// Example -// -// Scroll with 4 parallel slices through an index called "products". -// Use "_uid" as the default field: -// -// sliced_scroll -index=products -n=4 -// -package main - -import ( - "context" - "flag" - "fmt" - "io" - "log" - "sync" - "sync/atomic" - "time" - - "golang.org/x/sync/errgroup" - "github.com/olivere/elastic" -) - -func main() { - var ( - url = flag.String("url", "http://localhost:9200", "Elasticsearch URL") - index = flag.String("index", "", "Elasticsearch index name") - typ = flag.String("type", "", "Elasticsearch type name") - field = flag.String("field", "", "Slice field (must be numeric)") - numSlices = flag.Int("n", 2, "Number of slices to use in parallel") - sniff = flag.Bool("sniff", true, "Enable or disable sniffing") - ) - flag.Parse() - log.SetFlags(0) - - if *url == "" { - log.Fatal("missing url parameter") - } - if *index == "" { - log.Fatal("missing index parameter") - } - if *numSlices <= 0 { - log.Fatal("n must be greater than zero") - } - - // Create an Elasticsearch client - client, err := elastic.NewClient(elastic.SetURL(*url), elastic.SetSniff(*sniff)) - if err != nil { - log.Fatal(err) - } - - // Setup a group of goroutines from the excellent errgroup package - g, ctx := errgroup.WithContext(context.TODO()) - - // Hits channel will be sent to from the first set of goroutines and consumed by the second - type hit struct { - Slice int - Hit elastic.SearchHit - } - hitsc := make(chan hit) - - begin := time.Now() - - // Start a number of goroutines to parallelize scrolling - var wg sync.WaitGroup - for i := 0; i < *numSlices; i++ { - wg.Add(1) - - slice := i - - // Prepare the query - var query elastic.Query - if *typ == "" { - query = elastic.NewMatchAllQuery() - } else { - query = elastic.NewTypeQuery(*typ) - } - - // Prepare the slice - sliceQuery := elastic.NewSliceQuery().Id(i).Max(*numSlices) - if *field != "" { - sliceQuery = sliceQuery.Field(*field) - } - - // Start goroutine for this sliced scroll - g.Go(func() error { - defer wg.Done() - svc := client.Scroll(*index).Query(query).Slice(sliceQuery) - for { - res, err := svc.Do(ctx) - if err == io.EOF { - break - } - if err != nil { - return err - } - for _, searchHit := range res.Hits.Hits { - // Pass the hit to the hits channel, which will be consumed below - select { - case hitsc <- hit{Slice: slice, Hit: *searchHit}: - case <-ctx.Done(): - return ctx.Err() - } - } - } - return nil - }) - } - go func() { - // Wait until all scrolling is done - wg.Wait() - close(hitsc) - }() - - // Second goroutine will consume the hits sent from the workers in first set of goroutines - var total uint64 - totals := make([]uint64, *numSlices) - g.Go(func() error { - for hit := range hitsc { - // We simply count the hits here. - atomic.AddUint64(&totals[hit.Slice], 1) - current := atomic.AddUint64(&total, 1) - sec := int(time.Since(begin).Seconds()) - fmt.Printf("%8d | %02d:%02d\r", current, sec/60, sec%60) - select { - default: - case <-ctx.Done(): - return ctx.Err() - } - } - return nil - }) - - // Wait until all goroutines are finished - if err := g.Wait(); err != nil { - log.Fatal(err) - } - - fmt.Printf("Scrolled through a total of %d documents in %v\n", total, time.Since(begin)) - for i := 0; i < *numSlices; i++ { - fmt.Printf("Slice %2d received %d documents\n", i, totals[i]) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/reindex.go b/vendor/gopkg.in/olivere/elastic.v5/reindex.go index 9cdd50a68..71e0807ee 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/reindex.go +++ b/vendor/gopkg.in/olivere/elastic.v5/reindex.go @@ -11,7 +11,7 @@ import ( ) // ReindexService is a method to copy documents from one index to another. -// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-reindex.html. +// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/5.0/docs-reindex.html. type ReindexService struct { client *Client pretty bool @@ -175,7 +175,7 @@ func (s *ReindexService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.refresh != "" { params.Set("refresh", s.refresh) @@ -277,12 +277,7 @@ func (s *ReindexService) Do(ctx context.Context) (*BulkIndexByScrollResponse, er } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, body) if err != nil { return nil, err } @@ -324,12 +319,7 @@ func (s *ReindexService) DoAsync(ctx context.Context) (*StartTaskResult, error) } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, body) if err != nil { return nil, err } @@ -346,7 +336,7 @@ func (s *ReindexService) DoAsync(ctx context.Context) (*StartTaskResult, error) // ReindexSource specifies the source of a Reindex process. type ReindexSource struct { - searchType string // default in ES is "query_then_fetch" + searchType string indices []string types []string routing *string @@ -588,7 +578,7 @@ func (ri *ReindexRemoteInfo) Source() (interface{}, error) { // ReindexDestination is the destination of a Reindex API call. // It is basically the meta data of a BulkIndexRequest. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-reindex.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-reindex.html // fsourcer details. type ReindexDestination struct { index string @@ -647,7 +637,7 @@ func (r *ReindexDestination) Parent(parent string) *ReindexDestination { // OpType specifies if this request should follow create-only or upsert // behavior. This follows the OpType of the standard document index API. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-index_.html#operation-type +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-index_.html#operation-type // for details. func (r *ReindexDestination) OpType(opType string) *ReindexDestination { r.opType = opType diff --git a/vendor/gopkg.in/olivere/elastic.v5/reindex_test.go b/vendor/gopkg.in/olivere/elastic.v5/reindex_test.go deleted file mode 100644 index fadf4bfc7..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/reindex_test.go +++ /dev/null @@ -1,401 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "testing" -) - -func TestReindexSourceWithBodyMap(t *testing.T) { - client := setupTestClient(t) - out, err := client.Reindex().Body(map[string]interface{}{ - "source": map[string]interface{}{ - "index": "twitter", - }, - "dest": map[string]interface{}{ - "index": "new_twitter", - }, - }).getBody() - if err != nil { - t.Fatal(err) - } - b, err := json.Marshal(out) - if err != nil { - t.Fatal(err) - } - got := string(b) - want := `{"dest":{"index":"new_twitter"},"source":{"index":"twitter"}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestReindexSourceWithBodyString(t *testing.T) { - client := setupTestClient(t) - got, err := client.Reindex().Body(`{"source":{"index":"twitter"},"dest":{"index":"new_twitter"}}`).getBody() - if err != nil { - t.Fatal(err) - } - want := `{"source":{"index":"twitter"},"dest":{"index":"new_twitter"}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestReindexSourceWithSourceIndexAndDestinationIndex(t *testing.T) { - client := setupTestClient(t) - out, err := client.Reindex().SourceIndex("twitter").DestinationIndex("new_twitter").getBody() - if err != nil { - t.Fatal(err) - } - b, err := json.Marshal(out) - if err != nil { - t.Fatal(err) - } - got := string(b) - want := `{"dest":{"index":"new_twitter"},"source":{"index":"twitter"}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestReindexSourceWithSourceAndDestinationAndVersionType(t *testing.T) { - client := setupTestClient(t) - src := NewReindexSource().Index("twitter") - dst := NewReindexDestination().Index("new_twitter").VersionType("external") - out, err := client.Reindex().Source(src).Destination(dst).getBody() - if err != nil { - t.Fatal(err) - } - b, err := json.Marshal(out) - if err != nil { - t.Fatal(err) - } - got := string(b) - want := `{"dest":{"index":"new_twitter","version_type":"external"},"source":{"index":"twitter"}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestReindexSourceWithSourceAndRemoteAndDestination(t *testing.T) { - client := setupTestClient(t) - src := NewReindexSource().Index("twitter").RemoteInfo( - NewReindexRemoteInfo().Host("http://otherhost:9200"). - Username("alice"). - Password("secret"). - ConnectTimeout("10s"). - SocketTimeout("1m"), - ) - dst := NewReindexDestination().Index("new_twitter") - out, err := client.Reindex().Source(src).Destination(dst).getBody() - if err != nil { - t.Fatal(err) - } - b, err := json.Marshal(out) - if err != nil { - t.Fatal(err) - } - got := string(b) - want := `{"dest":{"index":"new_twitter"},"source":{"index":"twitter","remote":{"connect_timeout":"10s","host":"http://otherhost:9200","password":"secret","socket_timeout":"1m","username":"alice"}}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestReindexSourceWithSourceAndDestinationAndOpType(t *testing.T) { - client := setupTestClient(t) - src := NewReindexSource().Index("twitter") - dst := NewReindexDestination().Index("new_twitter").OpType("create") - out, err := client.Reindex().Source(src).Destination(dst).getBody() - if err != nil { - t.Fatal(err) - } - b, err := json.Marshal(out) - if err != nil { - t.Fatal(err) - } - got := string(b) - want := `{"dest":{"index":"new_twitter","op_type":"create"},"source":{"index":"twitter"}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestReindexSourceWithConflictsProceed(t *testing.T) { - client := setupTestClient(t) - src := NewReindexSource().Index("twitter") - dst := NewReindexDestination().Index("new_twitter").OpType("create") - out, err := client.Reindex().Conflicts("proceed").Source(src).Destination(dst).getBody() - if err != nil { - t.Fatal(err) - } - b, err := json.Marshal(out) - if err != nil { - t.Fatal(err) - } - got := string(b) - want := `{"conflicts":"proceed","dest":{"index":"new_twitter","op_type":"create"},"source":{"index":"twitter"}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestReindexSourceWithProceedOnVersionConflict(t *testing.T) { - client := setupTestClient(t) - src := NewReindexSource().Index("twitter") - dst := NewReindexDestination().Index("new_twitter").OpType("create") - out, err := client.Reindex().ProceedOnVersionConflict().Source(src).Destination(dst).getBody() - if err != nil { - t.Fatal(err) - } - b, err := json.Marshal(out) - if err != nil { - t.Fatal(err) - } - got := string(b) - want := `{"conflicts":"proceed","dest":{"index":"new_twitter","op_type":"create"},"source":{"index":"twitter"}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestReindexSourceWithQuery(t *testing.T) { - client := setupTestClient(t) - src := NewReindexSource().Index("twitter").Type("doc").Query(NewTermQuery("user", "olivere")) - dst := NewReindexDestination().Index("new_twitter") - out, err := client.Reindex().Source(src).Destination(dst).getBody() - if err != nil { - t.Fatal(err) - } - b, err := json.Marshal(out) - if err != nil { - t.Fatal(err) - } - got := string(b) - want := `{"dest":{"index":"new_twitter"},"source":{"index":"twitter","query":{"term":{"user":"olivere"}},"type":"doc"}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestReindexSourceWithMultipleSourceIndicesAndTypes(t *testing.T) { - client := setupTestClient(t) - src := NewReindexSource().Index("twitter", "blog").Type("doc", "post") - dst := NewReindexDestination().Index("all_together") - out, err := client.Reindex().Source(src).Destination(dst).getBody() - if err != nil { - t.Fatal(err) - } - b, err := json.Marshal(out) - if err != nil { - t.Fatal(err) - } - got := string(b) - want := `{"dest":{"index":"all_together"},"source":{"index":["twitter","blog"],"type":["doc","post"]}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestReindexSourceWithSourceAndSize(t *testing.T) { - client := setupTestClient(t) - src := NewReindexSource().Index("twitter").Sort("date", false) - dst := NewReindexDestination().Index("new_twitter") - out, err := client.Reindex().Size(10000).Source(src).Destination(dst).getBody() - if err != nil { - t.Fatal(err) - } - b, err := json.Marshal(out) - if err != nil { - t.Fatal(err) - } - got := string(b) - want := `{"dest":{"index":"new_twitter"},"size":10000,"source":{"index":"twitter","sort":[{"date":{"order":"desc"}}]}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestReindexSourceWithScript(t *testing.T) { - client := setupTestClient(t) - src := NewReindexSource().Index("twitter") - dst := NewReindexDestination().Index("new_twitter").VersionType("external") - scr := NewScriptInline("if (ctx._source.foo == 'bar') {ctx._version++; ctx._source.remove('foo')}") - out, err := client.Reindex().Source(src).Destination(dst).Script(scr).getBody() - if err != nil { - t.Fatal(err) - } - b, err := json.Marshal(out) - if err != nil { - t.Fatal(err) - } - got := string(b) - want := `{"dest":{"index":"new_twitter","version_type":"external"},"script":{"source":"if (ctx._source.foo == 'bar') {ctx._version++; ctx._source.remove('foo')}"},"source":{"index":"twitter"}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestReindexSourceWithRouting(t *testing.T) { - client := setupTestClient(t) - src := NewReindexSource().Index("source").Query(NewMatchQuery("company", "cat")) - dst := NewReindexDestination().Index("dest").Routing("=cat") - out, err := client.Reindex().Source(src).Destination(dst).getBody() - if err != nil { - t.Fatal(err) - } - b, err := json.Marshal(out) - if err != nil { - t.Fatal(err) - } - got := string(b) - want := `{"dest":{"index":"dest","routing":"=cat"},"source":{"index":"source","query":{"match":{"company":{"query":"cat"}}}}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestReindex(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if esversion < "2.3.0" { - t.Skipf("Elasticsearch %v does not support Reindex API yet", esversion) - } - - sourceCount, err := client.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if sourceCount <= 0 { - t.Fatalf("expected more than %d documents; got: %d", 0, sourceCount) - } - - targetCount, err := client.Count(testIndexName2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if targetCount != 0 { - t.Fatalf("expected %d documents; got: %d", 0, targetCount) - } - - // Simple copying - src := NewReindexSource().Index(testIndexName) - dst := NewReindexDestination().Index(testIndexName2) - res, err := client.Reindex().Source(src).Destination(dst).Refresh("true").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected result != nil") - } - if res.Total != sourceCount { - t.Errorf("expected %d, got %d", sourceCount, res.Total) - } - if res.Updated != 0 { - t.Errorf("expected %d, got %d", 0, res.Updated) - } - if res.Created != sourceCount { - t.Errorf("expected %d, got %d", sourceCount, res.Created) - } - - targetCount, err = client.Count(testIndexName2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if targetCount != sourceCount { - t.Fatalf("expected %d documents; got: %d", sourceCount, targetCount) - } -} - -func TestReindexAsync(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if esversion < "2.3.0" { - t.Skipf("Elasticsearch %v does not support Reindex API yet", esversion) - } - - sourceCount, err := client.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if sourceCount <= 0 { - t.Fatalf("expected more than %d documents; got: %d", 0, sourceCount) - } - - targetCount, err := client.Count(testIndexName2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if targetCount != 0 { - t.Fatalf("expected %d documents; got: %d", 0, targetCount) - } - - // Simple copying - src := NewReindexSource().Index(testIndexName) - dst := NewReindexDestination().Index(testIndexName2) - res, err := client.Reindex().Source(src).Destination(dst).DoAsync(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected result != nil") - } - if res.TaskId == "" { - t.Errorf("expected a task id, got %+v", res) - } - - tasksGetTask := client.TasksGetTask() - taskStatus, err := tasksGetTask.TaskId(res.TaskId).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if taskStatus == nil { - t.Fatal("expected task status result != nil") - } -} - -func TestReindexWithWaitForCompletionTrueCannotBeStarted(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if esversion < "2.3.0" { - t.Skipf("Elasticsearch %v does not support Reindex API yet", esversion) - } - - sourceCount, err := client.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if sourceCount <= 0 { - t.Fatalf("expected more than %d documents; got: %d", 0, sourceCount) - } - - targetCount, err := client.Count(testIndexName2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if targetCount != 0 { - t.Fatalf("expected %d documents; got: %d", 0, targetCount) - } - - // DoAsync should fail when WaitForCompletion is true - src := NewReindexSource().Index(testIndexName) - dst := NewReindexDestination().Index(testIndexName2) - _, err = client.Reindex().Source(src).Destination(dst).WaitForCompletion(true).DoAsync(context.TODO()) - if err == nil { - t.Fatal("error should have been returned") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/request.go b/vendor/gopkg.in/olivere/elastic.v5/request.go index 87d191965..da5a7216e 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/request.go +++ b/vendor/gopkg.in/olivere/elastic.v5/request.go @@ -6,6 +6,7 @@ package elastic import ( "bytes" + "compress/gzip" "encoding/json" "io" "io/ioutil" @@ -34,13 +35,21 @@ func (r *Request) SetBasicAuth(username, password string) { ((*http.Request)(r)).SetBasicAuth(username, password) } -// SetBody encodes the body in the request. -func (r *Request) SetBody(body interface{}) error { +// SetBody encodes the body in the request. Optionally, it performs GZIP compression. +func (r *Request) SetBody(body interface{}, gzipCompress bool) error { switch b := body.(type) { case string: - return r.setBodyString(b) + if gzipCompress { + return r.setBodyGzip(b) + } else { + return r.setBodyString(b) + } default: - return r.setBodyJson(body) + if gzipCompress { + return r.setBodyGzip(body) + } else { + return r.setBodyJson(body) + } } } @@ -60,6 +69,42 @@ func (r *Request) setBodyString(body string) error { return r.setBodyReader(strings.NewReader(body)) } +// setBodyGzip gzip's the body. It accepts both strings and structs as body. +// The latter will be encoded via json.Marshal. +func (r *Request) setBodyGzip(body interface{}) error { + switch b := body.(type) { + case string: + buf := new(bytes.Buffer) + w := gzip.NewWriter(buf) + if _, err := w.Write([]byte(b)); err != nil { + return err + } + if err := w.Close(); err != nil { + return err + } + r.Header.Add("Content-Encoding", "gzip") + r.Header.Add("Vary", "Accept-Encoding") + return r.setBodyReader(bytes.NewReader(buf.Bytes())) + default: + data, err := json.Marshal(b) + if err != nil { + return err + } + buf := new(bytes.Buffer) + w := gzip.NewWriter(buf) + if _, err := w.Write(data); err != nil { + return err + } + if err := w.Close(); err != nil { + return err + } + r.Header.Add("Content-Encoding", "gzip") + r.Header.Add("Vary", "Accept-Encoding") + r.Header.Set("Content-Type", "application/json") + return r.setBodyReader(bytes.NewReader(buf.Bytes())) + } +} + // setBodyReader writes the body from an io.Reader. func (r *Request) setBodyReader(body io.Reader) error { rc, ok := body.(io.ReadCloser) diff --git a/vendor/gopkg.in/olivere/elastic.v5/request_test.go b/vendor/gopkg.in/olivere/elastic.v5/request_test.go deleted file mode 100644 index 04fbecbab..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/request_test.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -var testReq *Request // used as a temporary variable to avoid compiler optimizations in tests/benchmarks - -func TestRequestSetContentType(t *testing.T) { - req, err := NewRequest("GET", "/") - if err != nil { - t.Fatal(err) - } - if want, have := "application/json", req.Header.Get("Content-Type"); want != have { - t.Fatalf("want %q, have %q", want, have) - } - req.Header.Set("Content-Type", "application/x-ndjson") - if want, have := "application/x-ndjson", req.Header.Get("Content-Type"); want != have { - t.Fatalf("want %q, have %q", want, have) - } -} - -func BenchmarkRequestSetBodyString(b *testing.B) { - req, err := NewRequest("GET", "/") - if err != nil { - b.Fatal(err) - } - for i := 0; i < b.N; i++ { - body := `{"query":{"match_all":{}}}` - err = req.SetBody(body) - if err != nil { - b.Fatal(err) - } - } - testReq = req -} - -func BenchmarkRequestSetBodyBytes(b *testing.B) { - req, err := NewRequest("GET", "/") - if err != nil { - b.Fatal(err) - } - for i := 0; i < b.N; i++ { - body := []byte(`{"query":{"match_all":{}}}`) - err = req.SetBody(body) - if err != nil { - b.Fatal(err) - } - } - testReq = req -} - -func BenchmarkRequestSetBodyMap(b *testing.B) { - req, err := NewRequest("GET", "/") - if err != nil { - b.Fatal(err) - } - for i := 0; i < b.N; i++ { - body := map[string]interface{}{ - "query": map[string]interface{}{ - "match_all": map[string]interface{}{}, - }, - } - err = req.SetBody(body) - if err != nil { - b.Fatal(err) - } - } - testReq = req -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/response_test.go b/vendor/gopkg.in/olivere/elastic.v5/response_test.go deleted file mode 100644 index e62773403..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/response_test.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "bytes" - "fmt" - "io/ioutil" - "net/http" - "testing" -) - -func BenchmarkResponse(b *testing.B) { - c := &Client{ - decoder: &DefaultDecoder{}, - } - - var resp *Response - for n := 0; n < b.N; n++ { - iteration := fmt.Sprint(n) - body := fmt.Sprintf(`{"n":%d}`, n) - res := &http.Response{ - Header: http.Header{ - "X-Iteration": []string{iteration}, - }, - Body: ioutil.NopCloser(bytes.NewBufferString(body)), - StatusCode: http.StatusOK, - } - var err error - resp, err = c.newResponse(res) - if err != nil { - b.Fatal(err) - } - /* - if want, have := body, string(resp.Body); want != have { - b.Fatalf("want %q, have %q", want, have) - } - //*/ - /* - if want, have := iteration, resp.Header.Get("X-Iteration"); want != have { - b.Fatalf("want %q, have %q", want, have) - } - //*/ - } - _ = resp -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/retrier_test.go b/vendor/gopkg.in/olivere/elastic.v5/retrier_test.go deleted file mode 100644 index c1c5ff524..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/retrier_test.go +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "errors" - "net/http" - "sync/atomic" - "testing" - "time" -) - -type testRetrier struct { - Retrier - N int64 - Err error -} - -func (r *testRetrier) Retry(ctx context.Context, retry int, req *http.Request, resp *http.Response, err error) (time.Duration, bool, error) { - atomic.AddInt64(&r.N, 1) - if r.Err != nil { - return 0, false, r.Err - } - return r.Retrier.Retry(ctx, retry, req, resp, err) -} - -func TestStopRetrier(t *testing.T) { - r := NewStopRetrier() - wait, ok, err := r.Retry(context.TODO(), 1, nil, nil, nil) - if want, got := 0*time.Second, wait; want != got { - t.Fatalf("expected %v, got %v", want, got) - } - if want, got := false, ok; want != got { - t.Fatalf("expected %v, got %v", want, got) - } - if err != nil { - t.Fatalf("expected nil, got %v", err) - } -} - -func TestRetrier(t *testing.T) { - var numFailedReqs int - fail := func(r *http.Request) (*http.Response, error) { - numFailedReqs += 1 - //return &http.Response{Request: r, StatusCode: 400}, nil - return nil, errors.New("request failed") - } - - tr := &failingTransport{path: "/fail", fail: fail} - httpClient := &http.Client{Transport: tr} - - retrier := &testRetrier{ - Retrier: NewBackoffRetrier(NewSimpleBackoff(100, 100, 100, 100, 100)), - } - - client, err := NewClient( - SetHttpClient(httpClient), - SetMaxRetries(5), - SetHealthcheck(false), - SetRetrier(retrier)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ - Method: "GET", - Path: "/fail", - }) - if err == nil { - t.Fatal("expected error") - } - if res != nil { - t.Fatal("expected no response") - } - // Connection should be marked as dead after it failed - if numFailedReqs != 5 { - t.Errorf("expected %d failed requests; got: %d", 5, numFailedReqs) - } - if retrier.N != 5 { - t.Errorf("expected %d Retrier calls; got: %d", 5, retrier.N) - } -} - -func TestRetrierWithError(t *testing.T) { - var numFailedReqs int - fail := func(r *http.Request) (*http.Response, error) { - numFailedReqs += 1 - //return &http.Response{Request: r, StatusCode: 400}, nil - return nil, errors.New("request failed") - } - - tr := &failingTransport{path: "/fail", fail: fail} - httpClient := &http.Client{Transport: tr} - - kaboom := errors.New("kaboom") - retrier := &testRetrier{ - Err: kaboom, - Retrier: NewBackoffRetrier(NewSimpleBackoff(100, 100, 100, 100, 100)), - } - - client, err := NewClient( - SetHttpClient(httpClient), - SetMaxRetries(5), - SetHealthcheck(false), - SetRetrier(retrier)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ - Method: "GET", - Path: "/fail", - }) - if err != kaboom { - t.Fatalf("expected %v, got %v", kaboom, err) - } - if res != nil { - t.Fatal("expected no response") - } - if numFailedReqs != 1 { - t.Errorf("expected %d failed requests; got: %d", 1, numFailedReqs) - } - if retrier.N != 1 { - t.Errorf("expected %d Retrier calls; got: %d", 1, retrier.N) - } -} - -func TestRetrierOnPerformRequest(t *testing.T) { - var numFailedReqs int - fail := func(r *http.Request) (*http.Response, error) { - numFailedReqs += 1 - //return &http.Response{Request: r, StatusCode: 400}, nil - return nil, errors.New("request failed") - } - - tr := &failingTransport{path: "/fail", fail: fail} - httpClient := &http.Client{Transport: tr} - - defaultRetrier := &testRetrier{ - Retrier: NewStopRetrier(), - } - requestRetrier := &testRetrier{ - Retrier: NewStopRetrier(), - } - - client, err := NewClient( - SetHttpClient(httpClient), - SetHealthcheck(false), - SetRetrier(defaultRetrier)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ - Method: "GET", - Path: "/fail", - Retrier: requestRetrier, - }) - if err == nil { - t.Fatal("expected error") - } - if res != nil { - t.Fatal("expected no response") - } - if want, have := int64(0), defaultRetrier.N; want != have { - t.Errorf("defaultRetrier: expected %d calls; got: %d", want, have) - } - if want, have := int64(1), requestRetrier.N; want != have { - t.Errorf("requestRetrier: expected %d calls; got: %d", want, have) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/retry_test.go b/vendor/gopkg.in/olivere/elastic.v5/retry_test.go deleted file mode 100644 index 804313095..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/retry_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -// This file is based on code that is (c) 2014 Cenk Altı and governed -// by the MIT license. -// See https://github.com/cenkalti/backoff for original source. - -package elastic - -import ( - "errors" - "testing" - "time" -) - -func TestRetry(t *testing.T) { - const successOn = 3 - var i = 0 - - // This function is successfull on "successOn" calls. - f := func() error { - i++ - // t.Logf("function is called %d. time\n", i) - - if i == successOn { - // t.Log("OK") - return nil - } - - // t.Log("error") - return errors.New("error") - } - - min := time.Duration(8) * time.Millisecond - max := time.Duration(256) * time.Millisecond - err := Retry(f, NewExponentialBackoff(min, max)) - if err != nil { - t.Errorf("unexpected error: %s", err.Error()) - } - if i != successOn { - t.Errorf("invalid number of retries: %d", i) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/run-es.sh b/vendor/gopkg.in/olivere/elastic.v5/run-es.sh index 624a864ed..b22e87675 100755 --- a/vendor/gopkg.in/olivere/elastic.v5/run-es.sh +++ b/vendor/gopkg.in/olivere/elastic.v5/run-es.sh @@ -1,3 +1,3 @@ #!/bin/sh -VERSION=${VERSION:=6.2.1} -docker run --rm -p 9200:9200 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" -e "bootstrap.memory_lock=true" -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" docker.elastic.co/elasticsearch/elasticsearch-oss:$VERSION elasticsearch -Enetwork.host=_local_,_site_ -Enetwork.publish_host=_local_ +VERSION=${VERSION:=5.6.8} +docker run --rm --privileged=true -p 9200:9200 -p 9300:9300 -v "$PWD/etc:/usr/share/elasticsearch/config" -e "bootstrap.memory_lock=true" -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" docker.elastic.co/elasticsearch/elasticsearch:$VERSION elasticsearch -Expack.security.enabled=false -Expack.ml.enabled=false -Escript.inline=true -Escript.stored=true -Escript.file=true diff --git a/vendor/gopkg.in/olivere/elastic.v5/script.go b/vendor/gopkg.in/olivere/elastic.v5/script.go index 273473950..eb27f27f0 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/script.go +++ b/vendor/gopkg.in/olivere/elastic.v5/script.go @@ -9,7 +9,7 @@ import "errors" // Script holds all the paramaters necessary to compile or find in cache // and then execute a script. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/modules-scripting.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/modules-scripting.html // for details of scripting. type Script struct { script string @@ -22,21 +22,26 @@ type Script struct { func NewScript(script string) *Script { return &Script{ script: script, - typ: "inline", + typ: "", // default type is "inline" params: make(map[string]interface{}), } } -// NewScriptInline creates and initializes a new inline script, i.e. code. +// NewScriptInline creates and initializes a new Script of type "inline". func NewScriptInline(script string) *Script { return NewScript(script).Type("inline") } -// NewScriptStored creates and initializes a new stored script. -func NewScriptStored(script string) *Script { +// NewScriptId creates and initializes a new Script of type "id". +func NewScriptId(script string) *Script { return NewScript(script).Type("id") } +// NewScriptFile creates and initializes a new Script of type "file". +func NewScriptFile(script string) *Script { + return NewScript(script).Type("file") +} + // Script is either the cache key of the script to be compiled/executed // or the actual script source code for inline scripts. For indexed // scripts this is the id used in the request. For file scripts this is @@ -46,7 +51,7 @@ func (s *Script) Script(script string) *Script { return s } -// Type sets the type of script: "inline" or "id". +// Type sets the type of script: "inline", "id", or "file". func (s *Script) Type(typ string) *Script { s.typ = typ return s @@ -55,7 +60,7 @@ func (s *Script) Type(typ string) *Script { // Lang sets the language of the script. Permitted values are "groovy", // "expression", "mustache", "mvel" (default), "javascript", "python". // To use certain languages, you need to configure your server and/or -// add plugins. See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/modules-scripting.html +// add plugins. See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/modules-scripting.html // for details. func (s *Script) Lang(lang string) *Script { s.lang = lang @@ -79,22 +84,26 @@ func (s *Script) Params(params map[string]interface{}) *Script { // Source returns the JSON serializable data for this Script. func (s *Script) Source() (interface{}, error) { - if s.typ == "" && s.lang == "" && len(s.params) == 0 { - return s.script, nil - } source := make(map[string]interface{}) - // Beginning with 6.0, the type can only be "source" or "id" + + // In 5.5 and earlier, the type can "inline", "id", or "file". + // In 5.6+, the type can be "source", "id", or "file". + // So we use "inline" here to keep compatibility with 5.5 and earlier. + // Notice that this will trigger a deprecation warning in 5.6. if s.typ == "" || s.typ == "inline" { - source["source"] = s.script + source["inline"] = s.script } else { - source["id"] = s.script + // "id" or "file" + source[s.typ] = s.script } + if s.lang != "" { source["lang"] = s.lang } if len(s.params) > 0 { source["params"] = s.params } + return source, nil } diff --git a/vendor/gopkg.in/olivere/elastic.v5/script_test.go b/vendor/gopkg.in/olivere/elastic.v5/script_test.go deleted file mode 100644 index aa475d7eb..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/script_test.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestScriptingDefault(t *testing.T) { - builder := NewScript("doc['field'].value * 2") - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"source":"doc['field'].value * 2"}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestScriptingInline(t *testing.T) { - builder := NewScriptInline("doc['field'].value * factor").Param("factor", 2.0) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"params":{"factor":2},"source":"doc['field'].value * factor"}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestScriptingStored(t *testing.T) { - builder := NewScriptStored("script-with-id").Param("factor", 2.0) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"id":"script-with-id","params":{"factor":2}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/scroll.go b/vendor/gopkg.in/olivere/elastic.v5/scroll.go index ac51a8c00..a34bbe6cb 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/scroll.go +++ b/vendor/gopkg.in/olivere/elastic.v5/scroll.go @@ -12,7 +12,7 @@ import ( "strings" "sync" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) const ( @@ -100,7 +100,7 @@ func (s *ScrollService) Size(size int) *ScrollService { // Body sets the raw body to send to Elasticsearch. This can be e.g. a string, // a map[string]interface{} or anything that can be serialized into JSON. // Notice that setting the body disables the use of SearchSource and many -// other properties of the ScanService. +// other properties of the SearchService. func (s *ScrollService) Body(body interface{}) *ScrollService { s.body = body return s @@ -125,7 +125,7 @@ func (s *ScrollService) Query(query Query) *ScrollService { // PostFilter is executed as the last filter. It only affects the // search hits but not facets. See -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-post-filter.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-request-post-filter.html // for details. func (s *ScrollService) PostFilter(postFilter Query) *ScrollService { s.ss = s.ss.PostFilter(postFilter) @@ -134,7 +134,7 @@ func (s *ScrollService) PostFilter(postFilter Query) *ScrollService { // Slice allows slicing the scroll request into several batches. // This is supported in Elasticsearch 5.0 or later. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-scroll.html#sliced-scroll +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-request-scroll.html#sliced-scroll // for details. func (s *ScrollService) Slice(sliceQuery Query) *ScrollService { s.ss = s.ss.Slice(sliceQuery) @@ -155,7 +155,7 @@ func (s *ScrollService) FetchSourceContext(fetchSourceContext *FetchSourceContex } // Version can be set to true to return a version for each search hit. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-version.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-request-version.html. func (s *ScrollService) Version(version bool) *ScrollService { s.ss = s.ss.Version(version) return s @@ -266,7 +266,7 @@ func (s *ScrollService) Clear(ctx context.Context) error { ScrollId: []string{scrollId}, } - _, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + _, err := s.client.PerformRequestWithOptions(ctx, PerformRequestOptions{ Method: "DELETE", Path: path, Params: params, @@ -297,7 +297,7 @@ func (s *ScrollService) first(ctx context.Context) (*SearchResult, error) { } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + res, err := s.client.PerformRequestWithOptions(ctx, PerformRequestOptions{ Method: "POST", Path: path, Params: params, @@ -350,7 +350,7 @@ func (s *ScrollService) buildFirstURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.size != nil && *s.size > 0 { params.Set("size", fmt.Sprintf("%d", *s.size)) @@ -417,7 +417,7 @@ func (s *ScrollService) next(ctx context.Context) (*SearchResult, error) { } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + res, err := s.client.PerformRequestWithOptions(ctx, PerformRequestOptions{ Method: "POST", Path: path, Params: params, @@ -449,7 +449,7 @@ func (s *ScrollService) buildNextURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } return path, params, nil diff --git a/vendor/gopkg.in/olivere/elastic.v5/scroll_test.go b/vendor/gopkg.in/olivere/elastic.v5/scroll_test.go deleted file mode 100644 index c94e5f92f..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/scroll_test.go +++ /dev/null @@ -1,387 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "io" - _ "net/http" - "testing" -) - -func TestScroll(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Should return all documents. Just don't call Do yet! - svc := client.Scroll(testIndexName).Size(1) - - pages := 0 - docs := 0 - - for { - res, err := svc.Do(context.TODO()) - if err == io.EOF { - break - } - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected results != nil; got nil") - } - if res.Hits == nil { - t.Fatal("expected results.Hits != nil; got nil") - } - if want, have := int64(3), res.Hits.TotalHits; want != have { - t.Fatalf("expected results.Hits.TotalHits = %d; got %d", want, have) - } - if want, have := 1, len(res.Hits.Hits); want != have { - t.Fatalf("expected len(results.Hits.Hits) = %d; got %d", want, have) - } - - pages++ - - for _, hit := range res.Hits.Hits { - if hit.Index != testIndexName { - t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - docs++ - } - - if len(res.ScrollId) == 0 { - t.Fatalf("expected scrollId in results; got %q", res.ScrollId) - } - } - - if want, have := 3, pages; want != have { - t.Fatalf("expected to retrieve %d pages; got %d", want, have) - } - if want, have := 3, docs; want != have { - t.Fatalf("expected to retrieve %d hits; got %d", want, have) - } - - err = svc.Clear(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = svc.Do(context.TODO()) - if err == nil { - t.Fatal("expected to fail") - } -} - -func TestScrollWithQueryAndSort(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - // client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Create a scroll service that returns tweets from user olivere - // and returns them sorted by "message", in reverse order. - // - // Just don't call Do yet! - svc := client.Scroll(testIndexName). - Query(NewTermQuery("user", "olivere")). - Sort("message", false). - Size(1) - - docs := 0 - pages := 0 - for { - res, err := svc.Do(context.TODO()) - if err == io.EOF { - break - } - if err != nil { - t.Fatal(err) - } - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected results != nil; got nil") - } - if res.Hits == nil { - t.Fatal("expected results.Hits != nil; got nil") - } - if want, have := int64(2), res.Hits.TotalHits; want != have { - t.Fatalf("expected results.Hits.TotalHits = %d; got %d", want, have) - } - if want, have := 1, len(res.Hits.Hits); want != have { - t.Fatalf("expected len(results.Hits.Hits) = %d; got %d", want, have) - } - - pages++ - - for _, hit := range res.Hits.Hits { - if hit.Index != testIndexName { - t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - docs++ - } - } - - if want, have := 2, pages; want != have { - t.Fatalf("expected to retrieve %d pages; got %d", want, have) - } - if want, have := 2, docs; want != have { - t.Fatalf("expected to retrieve %d hits; got %d", want, have) - } -} - -func TestScrollWithBody(t *testing.T) { - // client := setupTestClientAndCreateIndexAndLog(t) - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch.", Retweets: 4} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic.", Retweets: 10} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun.", Retweets: 3} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Test with simple strings and a map - var tests = []struct { - Body interface{} - ExpectedTotalHits int64 - ExpectedDocs int - ExpectedPages int - }{ - { - Body: `{"query":{"match_all":{}}}`, - ExpectedTotalHits: 3, - ExpectedDocs: 3, - ExpectedPages: 3, - }, - { - Body: `{"query":{"term":{"user":"olivere"}},"sort":["_doc"]}`, - ExpectedTotalHits: 2, - ExpectedDocs: 2, - ExpectedPages: 2, - }, - { - Body: `{"query":{"term":{"user":"olivere"}},"sort":[{"retweets":"desc"}]}`, - ExpectedTotalHits: 2, - ExpectedDocs: 2, - ExpectedPages: 2, - }, - { - Body: map[string]interface{}{ - "query": map[string]interface{}{ - "term": map[string]interface{}{ - "user": "olivere", - }, - }, - "sort": []interface{}{"_doc"}, - }, - ExpectedTotalHits: 2, - ExpectedDocs: 2, - ExpectedPages: 2, - }, - } - - for i, tt := range tests { - // Should return all documents. Just don't call Do yet! - svc := client.Scroll(testIndexName).Size(1).Body(tt.Body) - - pages := 0 - docs := 0 - - for { - res, err := svc.Do(context.TODO()) - if err == io.EOF { - break - } - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatalf("#%d: expected results != nil; got nil", i) - } - if res.Hits == nil { - t.Fatalf("#%d: expected results.Hits != nil; got nil", i) - } - if want, have := tt.ExpectedTotalHits, res.Hits.TotalHits; want != have { - t.Fatalf("#%d: expected results.Hits.TotalHits = %d; got %d", i, want, have) - } - if want, have := 1, len(res.Hits.Hits); want != have { - t.Fatalf("#%d: expected len(results.Hits.Hits) = %d; got %d", i, want, have) - } - - pages++ - - for _, hit := range res.Hits.Hits { - if hit.Index != testIndexName { - t.Fatalf("#%d: expected SearchResult.Hits.Hit.Index = %q; got %q", i, testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatalf("#%d: %v", i, err) - } - docs++ - } - - if len(res.ScrollId) == 0 { - t.Fatalf("#%d: expected scrollId in results; got %q", i, res.ScrollId) - } - } - - if want, have := tt.ExpectedPages, pages; want != have { - t.Fatalf("#%d: expected to retrieve %d pages; got %d", i, want, have) - } - if want, have := tt.ExpectedDocs, docs; want != have { - t.Fatalf("#%d: expected to retrieve %d hits; got %d", i, want, have) - } - - err = svc.Clear(context.TODO()) - if err != nil { - t.Fatalf("#%d: failed to clear scroll context: %v", i, err) - } - - _, err = svc.Do(context.TODO()) - if err == nil { - t.Fatalf("#%d: expected to fail", i) - } - } -} - -func TestScrollWithSlice(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) - - // Should return all documents. Just don't call Do yet! - sliceQuery := NewSliceQuery().Id(0).Max(2) - svc := client.Scroll(testIndexName).Slice(sliceQuery).Size(1) - - pages := 0 - docs := 0 - - for { - res, err := svc.Do(context.TODO()) - if err == io.EOF { - break - } - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected results != nil; got nil") - } - if res.Hits == nil { - t.Fatal("expected results.Hits != nil; got nil") - } - - pages++ - - for _, hit := range res.Hits.Hits { - if hit.Index != testIndexName { - t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - docs++ - } - - if len(res.ScrollId) == 0 { - t.Fatalf("expected scrollId in results; got %q", res.ScrollId) - } - } - - if pages == 0 { - t.Fatal("expected to retrieve some pages") - } - if docs == 0 { - t.Fatal("expected to retrieve some hits") - } - - if err := svc.Clear(context.TODO()); err != nil { - t.Fatal(err) - } - - if _, err := svc.Do(context.TODO()); err == nil { - t.Fatal("expected to fail") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search.go b/vendor/gopkg.in/olivere/elastic.v5/search.go index 12d51bf1f..a9eb212f4 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search.go @@ -12,7 +12,7 @@ import ( "reflect" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // Search for documents in Elasticsearch. @@ -60,7 +60,7 @@ func (s *SearchService) Source(source interface{}) *SearchService { // FilterPath allows reducing the response, a mechanism known as // response filtering and described here: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/common-options.html#common-options-response-filtering. +// https://www.elastic.co/guide/en/elasticsearch/reference/5.6/common-options.html#common-options-response-filtering. func (s *SearchService) FilterPath(filterPath ...string) *SearchService { s.filterPath = append(s.filterPath, filterPath...) return s @@ -110,10 +110,16 @@ func (s *SearchService) TimeoutInMillis(timeoutInMillis int) *SearchService { return s } +// TerminateAfter specifies the maximum number of documents to collect for +// each shard, upon reaching which the query execution will terminate early. +func (s *SearchService) TerminateAfter(terminateAfter int) *SearchService { + s.searchSource = s.searchSource.TerminateAfter(terminateAfter) + return s +} + // SearchType sets the search operation type. Valid values are: -// "query_then_fetch", "query_and_fetch", "dfs_query_then_fetch", -// "dfs_query_and_fetch", "count", "scan". -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-search-type.html +// "dfs_query_then_fetch" and "query_then_fetch". +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-search-type.html // for details. func (s *SearchService) SearchType(searchType string) *SearchService { s.searchType = searchType @@ -278,7 +284,7 @@ func (s *SearchService) TrackScores(trackScores bool) *SearchService { // SearchAfter allows a different form of pagination by using a live cursor, // using the results of the previous page to help the retrieval of the next. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-search-after.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-search-after.html func (s *SearchService) SearchAfter(sortValues ...interface{}) *SearchService { s.searchSource = s.searchSource.SearchAfter(sortValues...) return s @@ -392,12 +398,7 @@ func (s *SearchService) Do(ctx context.Context) (*SearchResult, error) { } body = src } - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, body) if err != nil { return nil, err } @@ -413,7 +414,7 @@ func (s *SearchService) Do(ctx context.Context) (*SearchResult, error) { // SearchResult is the result of a search in Elasticsearch. type SearchResult struct { TookInMillis int64 `json:"took"` // search time in milliseconds - ScrollId string `json:"_scroll_id"` // only used with Scroll and Scan operations + ScrollId string `json:"_scroll_id"` // only used with Scroll operations Hits *SearchHits `json:"hits"` // the actual search hits Suggest SearchSuggest `json:"suggest"` // results from suggesters Aggregations Aggregations `json:"aggregations"` // results from aggregations @@ -434,8 +435,7 @@ func (r *SearchResult) TotalHits() int64 { // Each is a utility function to iterate over all hits. It saves you from // checking for nil values. Notice that Each will ignore errors in -// serializing JSON and hits with empty/nil _source will get an empty -// value +// serializing JSON. func (r *SearchResult) Each(typ reflect.Type) []interface{} { if r.Hits == nil || r.Hits.Hits == nil || len(r.Hits.Hits) == 0 { return nil @@ -490,7 +490,7 @@ type SearchHitInnerHits struct { } // SearchExplanation explains how the score for a hit was computed. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-explain.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-explain.html. type SearchExplanation struct { Value float64 `json:"value"` // e.g. 1.0 Description string `json:"description"` // e.g. "boost" or "ConstantScore(*:*), product of:" @@ -500,11 +500,11 @@ type SearchExplanation struct { // Suggest // SearchSuggest is a map of suggestions. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-suggesters.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-suggesters.html. type SearchSuggest map[string][]SearchSuggestion // SearchSuggestion is a single search suggestion. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-suggesters.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-suggesters.html. type SearchSuggestion struct { Text string `json:"text"` Offset int `json:"offset"` @@ -513,7 +513,7 @@ type SearchSuggestion struct { } // SearchSuggestionOption is an option of a SearchSuggestion. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-suggesters.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-suggesters.html. type SearchSuggestionOption struct { Text string `json:"text"` Index string `json:"_index"` @@ -576,6 +576,6 @@ type ProfileResult struct { // Highlighting // SearchHitHighlight is the highlight information of a search hit. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-highlighting.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-highlighting.html // for a general discussion of highlighting. type SearchHitHighlight map[string][]string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs.go index 6359611b1..999a57d60 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs.go @@ -13,7 +13,7 @@ import ( // analytic information over a set of documents. It is // (in many senses) the follow-up of facets in Elasticsearch. // For more details about aggregations, visit: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations.html type Aggregation interface { // Source returns a JSON-serializable aggregation that is a fragment // of the request sent to Elasticsearch. @@ -24,7 +24,7 @@ type Aggregation interface { type Aggregations map[string]*json.RawMessage // Min returns min aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-min-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-min-aggregation.html func (a Aggregations) Min(name string) (*AggregationValueMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationValueMetric) @@ -39,7 +39,7 @@ func (a Aggregations) Min(name string) (*AggregationValueMetric, bool) { } // Max returns max aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-max-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-max-aggregation.html func (a Aggregations) Max(name string) (*AggregationValueMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationValueMetric) @@ -54,7 +54,7 @@ func (a Aggregations) Max(name string) (*AggregationValueMetric, bool) { } // Sum returns sum aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-sum-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-sum-aggregation.html func (a Aggregations) Sum(name string) (*AggregationValueMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationValueMetric) @@ -69,7 +69,7 @@ func (a Aggregations) Sum(name string) (*AggregationValueMetric, bool) { } // Avg returns average aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-avg-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-avg-aggregation.html func (a Aggregations) Avg(name string) (*AggregationValueMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationValueMetric) @@ -84,7 +84,7 @@ func (a Aggregations) Avg(name string) (*AggregationValueMetric, bool) { } // ValueCount returns value-count aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-valuecount-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-valuecount-aggregation.html func (a Aggregations) ValueCount(name string) (*AggregationValueMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationValueMetric) @@ -99,7 +99,7 @@ func (a Aggregations) ValueCount(name string) (*AggregationValueMetric, bool) { } // Cardinality returns cardinality aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-cardinality-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-cardinality-aggregation.html func (a Aggregations) Cardinality(name string) (*AggregationValueMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationValueMetric) @@ -114,7 +114,7 @@ func (a Aggregations) Cardinality(name string) (*AggregationValueMetric, bool) { } // Stats returns stats aggregation results. -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-stats-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-stats-aggregation.html func (a Aggregations) Stats(name string) (*AggregationStatsMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationStatsMetric) @@ -129,7 +129,7 @@ func (a Aggregations) Stats(name string) (*AggregationStatsMetric, bool) { } // ExtendedStats returns extended stats aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-extendedstats-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-extendedstats-aggregation.html func (a Aggregations) ExtendedStats(name string) (*AggregationExtendedStatsMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationExtendedStatsMetric) @@ -144,7 +144,7 @@ func (a Aggregations) ExtendedStats(name string) (*AggregationExtendedStatsMetri } // MatrixStats returns matrix stats aggregation results. -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-matrix-stats-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-matrix-stats-aggregation.html func (a Aggregations) MatrixStats(name string) (*AggregationMatrixStats, bool) { if raw, found := a[name]; found { agg := new(AggregationMatrixStats) @@ -159,7 +159,7 @@ func (a Aggregations) MatrixStats(name string) (*AggregationMatrixStats, bool) { } // Percentiles returns percentiles results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-percentile-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-percentile-aggregation.html func (a Aggregations) Percentiles(name string) (*AggregationPercentilesMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationPercentilesMetric) @@ -174,7 +174,7 @@ func (a Aggregations) Percentiles(name string) (*AggregationPercentilesMetric, b } // PercentileRanks returns percentile ranks results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-percentile-rank-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-percentile-rank-aggregation.html func (a Aggregations) PercentileRanks(name string) (*AggregationPercentilesMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationPercentilesMetric) @@ -189,7 +189,7 @@ func (a Aggregations) PercentileRanks(name string) (*AggregationPercentilesMetri } // TopHits returns top-hits aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-top-hits-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-top-hits-aggregation.html func (a Aggregations) TopHits(name string) (*AggregationTopHitsMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationTopHitsMetric) @@ -204,7 +204,7 @@ func (a Aggregations) TopHits(name string) (*AggregationTopHitsMetric, bool) { } // Global returns global results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-global-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-global-aggregation.html func (a Aggregations) Global(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) @@ -219,7 +219,7 @@ func (a Aggregations) Global(name string) (*AggregationSingleBucket, bool) { } // Filter returns filter results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-filter-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-filter-aggregation.html func (a Aggregations) Filter(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) @@ -234,7 +234,7 @@ func (a Aggregations) Filter(name string) (*AggregationSingleBucket, bool) { } // Filters returns filters results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-filters-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-filters-aggregation.html func (a Aggregations) Filters(name string) (*AggregationBucketFilters, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketFilters) @@ -248,8 +248,23 @@ func (a Aggregations) Filters(name string) (*AggregationBucketFilters, bool) { return nil, false } +// AdjacencyMatrix returning a form of adjacency matrix. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-aggregations-bucket-adjacency-matrix-aggregation.html +func (a Aggregations) AdjacencyMatrix(name string) (*AggregationBucketAdjacencyMatrix, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketAdjacencyMatrix) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + // Missing returns missing results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-missing-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-missing-aggregation.html func (a Aggregations) Missing(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) @@ -264,7 +279,7 @@ func (a Aggregations) Missing(name string) (*AggregationSingleBucket, bool) { } // Nested returns nested results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-nested-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-nested-aggregation.html func (a Aggregations) Nested(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) @@ -279,7 +294,7 @@ func (a Aggregations) Nested(name string) (*AggregationSingleBucket, bool) { } // ReverseNested returns reverse-nested results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-reverse-nested-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-reverse-nested-aggregation.html func (a Aggregations) ReverseNested(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) @@ -294,7 +309,7 @@ func (a Aggregations) ReverseNested(name string) (*AggregationSingleBucket, bool } // Children returns children results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-children-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-children-aggregation.html func (a Aggregations) Children(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) @@ -309,7 +324,7 @@ func (a Aggregations) Children(name string) (*AggregationSingleBucket, bool) { } // Terms returns terms aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-terms-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-terms-aggregation.html func (a Aggregations) Terms(name string) (*AggregationBucketKeyItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketKeyItems) @@ -324,7 +339,7 @@ func (a Aggregations) Terms(name string) (*AggregationBucketKeyItems, bool) { } // SignificantTerms returns significant terms aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-significantterms-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-significantterms-aggregation.html func (a Aggregations) SignificantTerms(name string) (*AggregationBucketSignificantTerms, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketSignificantTerms) @@ -339,7 +354,7 @@ func (a Aggregations) SignificantTerms(name string) (*AggregationBucketSignifica } // Sampler returns sampler aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-sampler-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-sampler-aggregation.html func (a Aggregations) Sampler(name string) (*AggregationSingleBucket, bool) { if raw, found := a[name]; found { agg := new(AggregationSingleBucket) @@ -353,8 +368,23 @@ func (a Aggregations) Sampler(name string) (*AggregationSingleBucket, bool) { return nil, false } +// DiversifiedSampler returns diversified_sampler aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-aggregations-bucket-diversified-sampler-aggregation.html +func (a Aggregations) DiversifiedSampler(name string) (*AggregationSingleBucket, bool) { + if raw, found := a[name]; found { + agg := new(AggregationSingleBucket) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + // Range returns range aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-range-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-range-aggregation.html func (a Aggregations) Range(name string) (*AggregationBucketRangeItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketRangeItems) @@ -369,7 +399,7 @@ func (a Aggregations) Range(name string) (*AggregationBucketRangeItems, bool) { } // KeyedRange returns keyed range aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-range-aggregation.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-range-aggregation.html. func (a Aggregations) KeyedRange(name string) (*AggregationBucketKeyedRangeItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketKeyedRangeItems) @@ -384,7 +414,7 @@ func (a Aggregations) KeyedRange(name string) (*AggregationBucketKeyedRangeItems } // DateRange returns date range aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-daterange-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-daterange-aggregation.html func (a Aggregations) DateRange(name string) (*AggregationBucketRangeItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketRangeItems) @@ -399,7 +429,7 @@ func (a Aggregations) DateRange(name string) (*AggregationBucketRangeItems, bool } // IPRange returns IP range aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-iprange-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-aggregations-bucket-iprange-aggregation.html func (a Aggregations) IPRange(name string) (*AggregationBucketRangeItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketRangeItems) @@ -414,7 +444,7 @@ func (a Aggregations) IPRange(name string) (*AggregationBucketRangeItems, bool) } // Histogram returns histogram aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-histogram-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-histogram-aggregation.html func (a Aggregations) Histogram(name string) (*AggregationBucketHistogramItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketHistogramItems) @@ -429,7 +459,7 @@ func (a Aggregations) Histogram(name string) (*AggregationBucketHistogramItems, } // DateHistogram returns date histogram aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-datehistogram-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-datehistogram-aggregation.html func (a Aggregations) DateHistogram(name string) (*AggregationBucketHistogramItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketHistogramItems) @@ -444,7 +474,7 @@ func (a Aggregations) DateHistogram(name string) (*AggregationBucketHistogramIte } // GeoBounds returns geo-bounds aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-geobounds-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-geobounds-aggregation.html func (a Aggregations) GeoBounds(name string) (*AggregationGeoBoundsMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationGeoBoundsMetric) @@ -459,7 +489,7 @@ func (a Aggregations) GeoBounds(name string) (*AggregationGeoBoundsMetric, bool) } // GeoHash returns geo-hash aggregation results. -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-geohashgrid-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-geohashgrid-aggregation.html func (a Aggregations) GeoHash(name string) (*AggregationBucketKeyItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketKeyItems) @@ -473,8 +503,23 @@ func (a Aggregations) GeoHash(name string) (*AggregationBucketKeyItems, bool) { return nil, false } +// GeoCentroid returns geo-centroid aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-aggregations-metrics-geocentroid-aggregation.html +func (a Aggregations) GeoCentroid(name string) (*AggregationGeoCentroidMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationGeoCentroidMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + // GeoDistance returns geo distance aggregation results. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-geodistance-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-geodistance-aggregation.html func (a Aggregations) GeoDistance(name string) (*AggregationBucketRangeItems, bool) { if raw, found := a[name]; found { agg := new(AggregationBucketRangeItems) @@ -489,7 +534,7 @@ func (a Aggregations) GeoDistance(name string) (*AggregationBucketRangeItems, bo } // AvgBucket returns average bucket pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-avg-bucket-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-avg-bucket-aggregation.html func (a Aggregations) AvgBucket(name string) (*AggregationPipelineSimpleValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineSimpleValue) @@ -504,7 +549,7 @@ func (a Aggregations) AvgBucket(name string) (*AggregationPipelineSimpleValue, b } // SumBucket returns sum bucket pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-sum-bucket-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-sum-bucket-aggregation.html func (a Aggregations) SumBucket(name string) (*AggregationPipelineSimpleValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineSimpleValue) @@ -519,7 +564,7 @@ func (a Aggregations) SumBucket(name string) (*AggregationPipelineSimpleValue, b } // StatsBucket returns stats bucket pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-stats-bucket-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-stats-bucket-aggregation.html func (a Aggregations) StatsBucket(name string) (*AggregationPipelineStatsMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineStatsMetric) @@ -534,7 +579,7 @@ func (a Aggregations) StatsBucket(name string) (*AggregationPipelineStatsMetric, } // PercentilesBucket returns stats bucket pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-percentiles-bucket-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-percentiles-bucket-aggregation.html func (a Aggregations) PercentilesBucket(name string) (*AggregationPipelinePercentilesMetric, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelinePercentilesMetric) @@ -549,7 +594,7 @@ func (a Aggregations) PercentilesBucket(name string) (*AggregationPipelinePercen } // MaxBucket returns maximum bucket pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-max-bucket-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-max-bucket-aggregation.html func (a Aggregations) MaxBucket(name string) (*AggregationPipelineBucketMetricValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineBucketMetricValue) @@ -564,7 +609,7 @@ func (a Aggregations) MaxBucket(name string) (*AggregationPipelineBucketMetricVa } // MinBucket returns minimum bucket pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-min-bucket-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-min-bucket-aggregation.html func (a Aggregations) MinBucket(name string) (*AggregationPipelineBucketMetricValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineBucketMetricValue) @@ -579,7 +624,7 @@ func (a Aggregations) MinBucket(name string) (*AggregationPipelineBucketMetricVa } // MovAvg returns moving average pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-movavg-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-movavg-aggregation.html func (a Aggregations) MovAvg(name string) (*AggregationPipelineSimpleValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineSimpleValue) @@ -594,7 +639,7 @@ func (a Aggregations) MovAvg(name string) (*AggregationPipelineSimpleValue, bool } // Derivative returns derivative pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-derivative-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-derivative-aggregation.html func (a Aggregations) Derivative(name string) (*AggregationPipelineDerivative, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineDerivative) @@ -609,7 +654,7 @@ func (a Aggregations) Derivative(name string) (*AggregationPipelineDerivative, b } // CumulativeSum returns a cumulative sum pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-cumulative-sum-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-cumulative-sum-aggregation.html func (a Aggregations) CumulativeSum(name string) (*AggregationPipelineSimpleValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineSimpleValue) @@ -624,7 +669,7 @@ func (a Aggregations) CumulativeSum(name string) (*AggregationPipelineSimpleValu } // BucketScript returns bucket script pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-bucket-script-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-bucket-script-aggregation.html func (a Aggregations) BucketScript(name string) (*AggregationPipelineSimpleValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineSimpleValue) @@ -639,7 +684,7 @@ func (a Aggregations) BucketScript(name string) (*AggregationPipelineSimpleValue } // SerialDiff returns serial differencing pipeline aggregation results. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-serialdiff-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-serialdiff-aggregation.html func (a Aggregations) SerialDiff(name string) (*AggregationPipelineSimpleValue, bool) { if raw, found := a[name]; found { agg := new(AggregationPipelineSimpleValue) @@ -653,23 +698,6 @@ func (a Aggregations) SerialDiff(name string) (*AggregationPipelineSimpleValue, return nil, false } -// Composite returns composite bucket aggregation results. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.1/search-aggregations-bucket-composite-aggregation.html -// for details. -func (a Aggregations) Composite(name string) (*AggregationBucketCompositeItems, bool) { - if raw, found := a[name]; found { - agg := new(AggregationBucketCompositeItems) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - // -- Single value metric -- // AggregationValueMetric is a single-value metric, returned e.g. by a @@ -922,6 +950,41 @@ func (a *AggregationGeoBoundsMetric) UnmarshalJSON(data []byte) error { return nil } +// -- Geo Centroid -- + +// AggregationGeocentroidMetric is a metric as returned by a GeoCentroid aggregation. +type AggregationGeoCentroidMetric struct { + Aggregations + + Location struct { + Latitude float64 `json:"lat"` + Longitude float64 `json:"lon"` + } `json:"location"` + + Count int // `json:"count,omitempty"` + + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationGeoCentroidMetric structure. +func (a *AggregationGeoCentroidMetric) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["location"]; ok && v != nil { + json.Unmarshal(*v, &a.Location) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + if v, ok := aggs["count"]; ok && v != nil { + json.Unmarshal(*v, &a.Count) + } + a.Aggregations = aggs + return nil +} + // -- Single bucket -- // AggregationSingleBucket is a single bucket, returned e.g. via an aggregation of type Global. @@ -1215,6 +1278,33 @@ func (a *AggregationBucketFilters) UnmarshalJSON(data []byte) error { return nil } +// -- Bucket AdjacencyMatrix -- + +// AggregationBucketAdjacencyMatrix is a multi-bucket aggregation that is returned +// with a AdjacencyMatrix aggregation. +type AggregationBucketAdjacencyMatrix struct { + Aggregations + + Buckets []*AggregationBucketKeyItem //`json:"buckets"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketAdjacencyMatrix structure. +func (a *AggregationBucketAdjacencyMatrix) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["buckets"]; ok && v != nil { + json.Unmarshal(*v, &a.Buckets) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + // -- Bucket histogram items -- // AggregationBucketHistogramItems is a bucket aggregation that is returned @@ -1465,56 +1555,3 @@ func (a *AggregationPipelinePercentilesMetric) UnmarshalJSON(data []byte) error a.Aggregations = aggs return nil } - -// -- Composite key items -- - -// AggregationBucketCompositeItems implements the response structure -// for a bucket aggregation of type composite. -type AggregationBucketCompositeItems struct { - Aggregations - - Buckets []*AggregationBucketCompositeItem //`json:"buckets"` - Meta map[string]interface{} // `json:"meta,omitempty"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationBucketCompositeItems structure. -func (a *AggregationBucketCompositeItems) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) - } - if v, ok := aggs["meta"]; ok && v != nil { - json.Unmarshal(*v, &a.Meta) - } - a.Aggregations = aggs - return nil -} - -// AggregationBucketCompositeItem is a single bucket of an AggregationBucketCompositeItems structure. -type AggregationBucketCompositeItem struct { - Aggregations - - Key map[string]interface{} //`json:"key"` - DocCount int64 //`json:"doc_count"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationBucketCompositeItem structure. -func (a *AggregationBucketCompositeItem) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - dec := json.NewDecoder(bytes.NewReader(data)) - dec.UseNumber() - if err := dec.Decode(&aggs); err != nil { - return err - } - if v, ok := aggs["key"]; ok && v != nil { - json.Unmarshal(*v, &a.Key) - } - if v, ok := aggs["doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCount) - } - a.Aggregations = aggs - return nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_adjacency_matrix.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_adjacency_matrix.go new file mode 100644 index 000000000..fa6e81464 --- /dev/null +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_adjacency_matrix.go @@ -0,0 +1,96 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// AdjacencyMatrixAggregation returning a form of adjacency matrix. +// The request provides a collection of named filter expressions, +// similar to the filters aggregation request. Each bucket in the +// response represents a non-empty cell in the matrix of intersecting filters. +// +// For details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-aggregations-bucket-adjacency-matrix-aggregation.html +type AdjacencyMatrixAggregation struct { + filters map[string]Query + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +// NewAdjacencyMatrixAggregation initializes a new AdjacencyMatrixAggregation. +func NewAdjacencyMatrixAggregation() *AdjacencyMatrixAggregation { + return &AdjacencyMatrixAggregation{ + filters: make(map[string]Query), + subAggregations: make(map[string]Aggregation), + } +} + +// Filters adds the filter +func (a *AdjacencyMatrixAggregation) Filters(name string, filter Query) *AdjacencyMatrixAggregation { + a.filters[name] = filter + return a +} + +// SubAggregation adds a sub-aggregation to this aggregation. +func (a *AdjacencyMatrixAggregation) SubAggregation(name string, subAggregation Aggregation) *AdjacencyMatrixAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *AdjacencyMatrixAggregation) Meta(metaData map[string]interface{}) *AdjacencyMatrixAggregation { + a.meta = metaData + return a +} + +// Source returns the a JSON-serializable interface. +func (a *AdjacencyMatrixAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "interactions" : { + // "adjacency_matrix" : { + // "filters" : { + // "grpA" : { "terms" : { "accounts" : ["hillary", "sidney"] }}, + // "grpB" : { "terms" : { "accounts" : ["donald", "mitt"] }}, + // "grpC" : { "terms" : { "accounts" : ["vladimir", "nigel"] }} + // } + // } + // } + // } + // This method returns only the (outer) { "adjacency_matrix" : {} } part. + + source := make(map[string]interface{}) + adjacencyMatrix := make(map[string]interface{}) + source["adjacency_matrix"] = adjacencyMatrix + + dict := make(map[string]interface{}) + for key, filter := range a.filters { + src, err := filter.Source() + if err != nil { + return nil, err + } + dict[key] = src + } + adjacencyMatrix["filters"] = dict + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_children.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_children.go index 08623a58e..14d0d1ca9 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_children.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_children.go @@ -7,7 +7,7 @@ package elastic // ChildrenAggregation is a special single bucket aggregation that enables // aggregating from buckets on parent document types to buckets on child documents. // It is available from 1.4.0.Beta1 upwards. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-children-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-children-aggregation.html type ChildrenAggregation struct { typ string subAggregations map[string]Aggregation diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_children_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_children_test.go deleted file mode 100644 index 0486079a9..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_children_test.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestChildrenAggregation(t *testing.T) { - agg := NewChildrenAggregation().Type("answer") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"children":{"type":"answer"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestChildrenAggregationWithSubAggregation(t *testing.T) { - subAgg := NewTermsAggregation().Field("owner.display_name").Size(10) - agg := NewChildrenAggregation().Type("answer") - agg = agg.SubAggregation("top-names", subAgg) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"top-names":{"terms":{"field":"owner.display_name","size":10}}},"children":{"type":"answer"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_composite.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_composite.go deleted file mode 100644 index 1d9132d2d..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_composite.go +++ /dev/null @@ -1,498 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// CompositeAggregation is a multi-bucket values source based aggregation -// that can be used to calculate unique composite values from source documents. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.1/search-aggregations-bucket-composite-aggregation.html -// for details. -type CompositeAggregation struct { - after map[string]interface{} - size *int - sources []CompositeAggregationValuesSource - subAggregations map[string]Aggregation - meta map[string]interface{} -} - -// NewCompositeAggregation creates a new CompositeAggregation. -func NewCompositeAggregation() *CompositeAggregation { - return &CompositeAggregation{ - sources: make([]CompositeAggregationValuesSource, 0), - subAggregations: make(map[string]Aggregation), - } -} - -// Size represents the number of composite buckets to return. -// Defaults to 10 as of Elasticsearch 6.1. -func (a *CompositeAggregation) Size(size int) *CompositeAggregation { - a.size = &size - return a -} - -// AggregateAfter sets the values that indicate which composite bucket this -// request should "aggregate after". -func (a *CompositeAggregation) AggregateAfter(after map[string]interface{}) *CompositeAggregation { - a.after = after - return a -} - -// Sources specifies the list of CompositeAggregationValuesSource instances to -// use in the aggregation. -func (a *CompositeAggregation) Sources(sources ...CompositeAggregationValuesSource) *CompositeAggregation { - a.sources = append(a.sources, sources...) - return a -} - -// SubAggregations of this aggregation. -func (a *CompositeAggregation) SubAggregation(name string, subAggregation Aggregation) *CompositeAggregation { - a.subAggregations[name] = subAggregation - return a -} - -// Meta sets the meta data to be included in the aggregation response. -func (a *CompositeAggregation) Meta(metaData map[string]interface{}) *CompositeAggregation { - a.meta = metaData - return a -} - -// Source returns the serializable JSON for this aggregation. -func (a *CompositeAggregation) Source() (interface{}, error) { - // Example: - // { - // "aggs" : { - // "my_composite_agg" : { - // "composite" : { - // "sources": [ - // {"my_term": { "terms": { "field": "product" }}}, - // {"my_histo": { "histogram": { "field": "price", "interval": 5 }}}, - // {"my_date": { "date_histogram": { "field": "timestamp", "interval": "1d" }}}, - // ], - // "size" : 10, - // "after" : ["a", 2, "c"] - // } - // } - // } - // } - // - // This method returns only the { "histogram" : { ... } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["composite"] = opts - - sources := make([]interface{}, len(a.sources)) - for i, s := range a.sources { - src, err := s.Source() - if err != nil { - return nil, err - } - sources[i] = src - } - opts["sources"] = sources - - if a.size != nil { - opts["size"] = *a.size - } - - if a.after != nil { - opts["after"] = a.after - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - src, err := aggregate.Source() - if err != nil { - return nil, err - } - aggsMap[name] = src - } - } - - // Add Meta data if available - if len(a.meta) > 0 { - source["meta"] = a.meta - } - - return source, nil -} - -// -- Generic interface for CompositeAggregationValues -- - -// CompositeAggregationValuesSource specifies the interface that -// all implementations for CompositeAggregation's Sources method -// need to implement. -// -// The different implementations are described in -// https://www.elastic.co/guide/en/elasticsearch/reference/6.1/search-aggregations-bucket-composite-aggregation.html#_values_source_2. -type CompositeAggregationValuesSource interface { - Source() (interface{}, error) -} - -// -- CompositeAggregationTermsValuesSource -- - -// CompositeAggregationTermsValuesSource is a source for the CompositeAggregation that handles terms -// it works very similar to a terms aggregation with slightly different syntax -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.1/search-aggregations-bucket-composite-aggregation.html#_terms -// for details. -type CompositeAggregationTermsValuesSource struct { - name string - field string - script *Script - valueType string - missing interface{} - order string -} - -// NewCompositeAggregationTermsValuesSource creates and initializes -// a new CompositeAggregationTermsValuesSource. -func NewCompositeAggregationTermsValuesSource(name string) *CompositeAggregationTermsValuesSource { - return &CompositeAggregationTermsValuesSource{ - name: name, - } -} - -// Field to use for this source. -func (a *CompositeAggregationTermsValuesSource) Field(field string) *CompositeAggregationTermsValuesSource { - a.field = field - return a -} - -// Script to use for this source. -func (a *CompositeAggregationTermsValuesSource) Script(script *Script) *CompositeAggregationTermsValuesSource { - a.script = script - return a -} - -// ValueType specifies the type of values produced by this source, -// e.g. "string" or "date". -func (a *CompositeAggregationTermsValuesSource) ValueType(valueType string) *CompositeAggregationTermsValuesSource { - a.valueType = valueType - return a -} - -// Order specifies the order in the values produced by this source. -// It can be either "asc" or "desc". -func (a *CompositeAggregationTermsValuesSource) Order(order string) *CompositeAggregationTermsValuesSource { - a.order = order - return a -} - -// Asc ensures the order of the values produced is ascending. -func (a *CompositeAggregationTermsValuesSource) Asc() *CompositeAggregationTermsValuesSource { - a.order = "asc" - return a -} - -// Desc ensures the order of the values produced is descending. -func (a *CompositeAggregationTermsValuesSource) Desc() *CompositeAggregationTermsValuesSource { - a.order = "desc" - return a -} - -// Missing specifies the value to use when the source finds a missing -// value in a document. -func (a *CompositeAggregationTermsValuesSource) Missing(missing interface{}) *CompositeAggregationTermsValuesSource { - a.missing = missing - return a -} - -// Source returns the serializable JSON for this values source. -func (a *CompositeAggregationTermsValuesSource) Source() (interface{}, error) { - source := make(map[string]interface{}) - name := make(map[string]interface{}) - source[a.name] = name - values := make(map[string]interface{}) - name["terms"] = values - - // field - if a.field != "" { - values["field"] = a.field - } - - // script - if a.script != nil { - src, err := a.script.Source() - if err != nil { - return nil, err - } - values["script"] = src - } - - // missing - if a.missing != nil { - values["missing"] = a.missing - } - - // value_type - if a.valueType != "" { - values["value_type"] = a.valueType - } - - // order - if a.order != "" { - values["order"] = a.order - } - - return source, nil - -} - -// -- CompositeAggregationHistogramValuesSource -- - -// CompositeAggregationHistogramValuesSource is a source for the CompositeAggregation that handles histograms -// it works very similar to a terms histogram with slightly different syntax -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.1/search-aggregations-bucket-composite-aggregation.html#_histogram -// for details. -type CompositeAggregationHistogramValuesSource struct { - name string - field string - script *Script - valueType string - missing interface{} - order string - interval float64 -} - -// NewCompositeAggregationHistogramValuesSource creates and initializes -// a new CompositeAggregationHistogramValuesSource. -func NewCompositeAggregationHistogramValuesSource(name string, interval float64) *CompositeAggregationHistogramValuesSource { - return &CompositeAggregationHistogramValuesSource{ - name: name, - interval: interval, - } -} - -// Field to use for this source. -func (a *CompositeAggregationHistogramValuesSource) Field(field string) *CompositeAggregationHistogramValuesSource { - a.field = field - return a -} - -// Script to use for this source. -func (a *CompositeAggregationHistogramValuesSource) Script(script *Script) *CompositeAggregationHistogramValuesSource { - a.script = script - return a -} - -// ValueType specifies the type of values produced by this source, -// e.g. "string" or "date". -func (a *CompositeAggregationHistogramValuesSource) ValueType(valueType string) *CompositeAggregationHistogramValuesSource { - a.valueType = valueType - return a -} - -// Missing specifies the value to use when the source finds a missing -// value in a document. -func (a *CompositeAggregationHistogramValuesSource) Missing(missing interface{}) *CompositeAggregationHistogramValuesSource { - a.missing = missing - return a -} - -// Order specifies the order in the values produced by this source. -// It can be either "asc" or "desc". -func (a *CompositeAggregationHistogramValuesSource) Order(order string) *CompositeAggregationHistogramValuesSource { - a.order = order - return a -} - -// Asc ensures the order of the values produced is ascending. -func (a *CompositeAggregationHistogramValuesSource) Asc() *CompositeAggregationHistogramValuesSource { - a.order = "asc" - return a -} - -// Desc ensures the order of the values produced is descending. -func (a *CompositeAggregationHistogramValuesSource) Desc() *CompositeAggregationHistogramValuesSource { - a.order = "desc" - return a -} - -// Interval specifies the interval to use. -func (a *CompositeAggregationHistogramValuesSource) Interval(interval float64) *CompositeAggregationHistogramValuesSource { - a.interval = interval - return a -} - -// Source returns the serializable JSON for this values source. -func (a *CompositeAggregationHistogramValuesSource) Source() (interface{}, error) { - source := make(map[string]interface{}) - name := make(map[string]interface{}) - source[a.name] = name - values := make(map[string]interface{}) - name["histogram"] = values - - // field - if a.field != "" { - values["field"] = a.field - } - - // script - if a.script != nil { - src, err := a.script.Source() - if err != nil { - return nil, err - } - values["script"] = src - } - - // missing - if a.missing != nil { - values["missing"] = a.missing - } - - // value_type - if a.valueType != "" { - values["value_type"] = a.valueType - } - - // order - if a.order != "" { - values["order"] = a.order - } - - // Histogram-related properties - values["interval"] = a.interval - - return source, nil - -} - -// -- CompositeAggregationDateHistogramValuesSource -- - -// CompositeAggregationDateHistogramValuesSource is a source for the CompositeAggregation that handles date histograms -// it works very similar to a date histogram aggregation with slightly different syntax -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.1/search-aggregations-bucket-composite-aggregation.html#_date_histogram -// for details. -type CompositeAggregationDateHistogramValuesSource struct { - name string - field string - script *Script - valueType string - missing interface{} - order string - interval interface{} - timeZone string -} - -// NewCompositeAggregationDateHistogramValuesSource creates and initializes -// a new CompositeAggregationDateHistogramValuesSource. -func NewCompositeAggregationDateHistogramValuesSource(name string, interval interface{}) *CompositeAggregationDateHistogramValuesSource { - return &CompositeAggregationDateHistogramValuesSource{ - name: name, - interval: interval, - } -} - -// Field to use for this source. -func (a *CompositeAggregationDateHistogramValuesSource) Field(field string) *CompositeAggregationDateHistogramValuesSource { - a.field = field - return a -} - -// Script to use for this source. -func (a *CompositeAggregationDateHistogramValuesSource) Script(script *Script) *CompositeAggregationDateHistogramValuesSource { - a.script = script - return a -} - -// ValueType specifies the type of values produced by this source, -// e.g. "string" or "date". -func (a *CompositeAggregationDateHistogramValuesSource) ValueType(valueType string) *CompositeAggregationDateHistogramValuesSource { - a.valueType = valueType - return a -} - -// Missing specifies the value to use when the source finds a missing -// value in a document. -func (a *CompositeAggregationDateHistogramValuesSource) Missing(missing interface{}) *CompositeAggregationDateHistogramValuesSource { - a.missing = missing - return a -} - -// Order specifies the order in the values produced by this source. -// It can be either "asc" or "desc". -func (a *CompositeAggregationDateHistogramValuesSource) Order(order string) *CompositeAggregationDateHistogramValuesSource { - a.order = order - return a -} - -// Asc ensures the order of the values produced is ascending. -func (a *CompositeAggregationDateHistogramValuesSource) Asc() *CompositeAggregationDateHistogramValuesSource { - a.order = "asc" - return a -} - -// Desc ensures the order of the values produced is descending. -func (a *CompositeAggregationDateHistogramValuesSource) Desc() *CompositeAggregationDateHistogramValuesSource { - a.order = "desc" - return a -} - -// Interval to use for the date histogram, e.g. "1d" or a numeric value like "60". -func (a *CompositeAggregationDateHistogramValuesSource) Interval(interval interface{}) *CompositeAggregationDateHistogramValuesSource { - a.interval = interval - return a -} - -// TimeZone to use for the dates. -func (a *CompositeAggregationDateHistogramValuesSource) TimeZone(timeZone string) *CompositeAggregationDateHistogramValuesSource { - a.timeZone = timeZone - return a -} - -// Source returns the serializable JSON for this values source. -func (a *CompositeAggregationDateHistogramValuesSource) Source() (interface{}, error) { - source := make(map[string]interface{}) - name := make(map[string]interface{}) - source[a.name] = name - values := make(map[string]interface{}) - name["date_histogram"] = values - - // field - if a.field != "" { - values["field"] = a.field - } - - // script - if a.script != nil { - src, err := a.script.Source() - if err != nil { - return nil, err - } - values["script"] = src - } - - // missing - if a.missing != nil { - values["missing"] = a.missing - } - - // value_type - if a.valueType != "" { - values["value_type"] = a.valueType - } - - // order - if a.order != "" { - values["order"] = a.order - } - - // DateHistogram-related properties - values["interval"] = a.interval - - // timeZone - if a.timeZone != "" { - values["time_zone"] = a.timeZone - } - - return source, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_composite_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_composite_test.go deleted file mode 100644 index 91d84dbdb..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_composite_test.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestCompositeAggregation(t *testing.T) { - agg := NewCompositeAggregation(). - Sources( - NewCompositeAggregationTermsValuesSource("my_terms").Field("a_term").Missing("N/A").Order("asc"), - NewCompositeAggregationHistogramValuesSource("my_histogram", 5).Field("price").Asc(), - NewCompositeAggregationDateHistogramValuesSource("my_date_histogram", "1d").Field("purchase_date").Desc(), - ). - Size(10). - AggregateAfter(map[string]interface{}{ - "my_terms": "1", - "my_histogram": 2, - "my_date_histogram": "3", - }) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"composite":{"after":{"my_date_histogram":"3","my_histogram":2,"my_terms":"1"},"size":10,"sources":[{"my_terms":{"terms":{"field":"a_term","missing":"N/A","order":"asc"}}},{"my_histogram":{"histogram":{"field":"price","interval":5,"order":"asc"}}},{"my_date_histogram":{"date_histogram":{"field":"purchase_date","interval":"1d","order":"desc"}}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestCompositeAggregationTermsValuesSource(t *testing.T) { - in := NewCompositeAggregationTermsValuesSource("products"). - Script(NewScript("doc['product'].value").Lang("painless")) - src, err := in.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"products":{"terms":{"script":{"lang":"painless","source":"doc['product'].value"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestCompositeAggregationHistogramValuesSource(t *testing.T) { - in := NewCompositeAggregationHistogramValuesSource("histo", 5). - Field("price") - src, err := in.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"histo":{"histogram":{"field":"price","interval":5}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestCompositeAggregationDateHistogramValuesSource(t *testing.T) { - in := NewCompositeAggregationDateHistogramValuesSource("date", "1d"). - Field("timestamp") - src, err := in.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date":{"date_histogram":{"field":"timestamp","interval":"1d"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_count_thresholds.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_count_thresholds.go deleted file mode 100644 index 53efdaf5f..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_count_thresholds.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// BucketCountThresholds is used in e.g. terms and significant text aggregations. -type BucketCountThresholds struct { - MinDocCount *int64 - ShardMinDocCount *int64 - RequiredSize *int - ShardSize *int -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_date_histogram.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_date_histogram.go index 1e7a1246c..17916b490 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_date_histogram.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_date_histogram.go @@ -6,7 +6,7 @@ package elastic // DateHistogramAggregation is a multi-bucket aggregation similar to the // histogram except it can only be applied on date values. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-datehistogram-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-datehistogram-aggregation.html type DateHistogramAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_date_histogram_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_date_histogram_test.go deleted file mode 100644 index ddf790834..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_date_histogram_test.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestDateHistogramAggregation(t *testing.T) { - agg := NewDateHistogramAggregation(). - Field("date"). - Interval("month"). - Format("YYYY-MM"). - TimeZone("UTC"). - Offset("+6h") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_histogram":{"field":"date","format":"YYYY-MM","interval":"month","offset":"+6h","time_zone":"UTC"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestDateHistogramAggregationWithMissing(t *testing.T) { - agg := NewDateHistogramAggregation().Field("date").Interval("year").Missing("1900") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_histogram":{"field":"date","interval":"year","missing":"1900"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_date_range.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_date_range.go index 714fd3e11..a4c10aa88 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_date_range.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_date_range.go @@ -15,7 +15,7 @@ import ( // date format by which the from and to response fields will be returned. // Note that this aggregration includes the from value and excludes the to // value for each range. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-daterange-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-daterange-aggregation.html type DateRangeAggregation struct { field string script *Script @@ -23,7 +23,6 @@ type DateRangeAggregation struct { meta map[string]interface{} keyed *bool unmapped *bool - timeZone string format string entries []DateRangeAggregationEntry } @@ -72,11 +71,6 @@ func (a *DateRangeAggregation) Unmapped(unmapped bool) *DateRangeAggregation { return a } -func (a *DateRangeAggregation) TimeZone(timeZone string) *DateRangeAggregation { - a.timeZone = timeZone - return a -} - func (a *DateRangeAggregation) Format(format string) *DateRangeAggregation { a.format = format return a @@ -184,9 +178,6 @@ func (a *DateRangeAggregation) Source() (interface{}, error) { if a.unmapped != nil { opts["unmapped"] = *a.unmapped } - if a.timeZone != "" { - opts["time_zone"] = a.timeZone - } if a.format != "" { opts["format"] = a.format } diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_date_range_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_date_range_test.go deleted file mode 100644 index 89ed495f3..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_date_range_test.go +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestDateRangeAggregation(t *testing.T) { - agg := NewDateRangeAggregation().Field("created_at").TimeZone("UTC") - agg = agg.AddRange(nil, "2012-12-31") - agg = agg.AddRange("2013-01-01", "2013-12-31") - agg = agg.AddRange("2014-01-01", nil) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}],"time_zone":"UTC"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestDateRangeAggregationWithPointers(t *testing.T) { - d1 := "2012-12-31" - d2 := "2013-01-01" - d3 := "2013-12-31" - d4 := "2014-01-01" - - agg := NewDateRangeAggregation().Field("created_at") - agg = agg.AddRange(nil, &d1) - agg = agg.AddRange(d2, &d3) - agg = agg.AddRange(d4, nil) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestDateRangeAggregationWithUnbounded(t *testing.T) { - agg := NewDateRangeAggregation().Field("created_at"). - AddUnboundedFrom("2012-12-31"). - AddRange("2013-01-01", "2013-12-31"). - AddUnboundedTo("2014-01-01") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestDateRangeAggregationWithLtAndCo(t *testing.T) { - agg := NewDateRangeAggregation().Field("created_at"). - Lt("2012-12-31"). - Between("2013-01-01", "2013-12-31"). - Gt("2014-01-01") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestDateRangeAggregationWithKeyedFlag(t *testing.T) { - agg := NewDateRangeAggregation().Field("created_at"). - Keyed(true). - Lt("2012-12-31"). - Between("2013-01-01", "2013-12-31"). - Gt("2014-01-01") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_range":{"field":"created_at","keyed":true,"ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestDateRangeAggregationWithKeys(t *testing.T) { - agg := NewDateRangeAggregation().Field("created_at"). - Keyed(true). - LtWithKey("pre-2012", "2012-12-31"). - BetweenWithKey("2013", "2013-01-01", "2013-12-31"). - GtWithKey("post-2013", "2014-01-01") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_range":{"field":"created_at","keyed":true,"ranges":[{"key":"pre-2012","to":"2012-12-31"},{"from":"2013-01-01","key":"2013","to":"2013-12-31"},{"from":"2014-01-01","key":"post-2013"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestDateRangeAggregationWithSpecialNames(t *testing.T) { - agg := NewDateRangeAggregation().Field("created_at"). - AddRange("now-10M/M", "now+10M/M") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_range":{"field":"created_at","ranges":[{"from":"now-10M/M","to":"now+10M/M"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_diversified_sampler.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_diversified_sampler.go new file mode 100644 index 000000000..a70b83a2d --- /dev/null +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_diversified_sampler.go @@ -0,0 +1,126 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// DiversifiedSamplerAggregation Like the ‘sampler` aggregation this is a filtering aggregation used to limit any +// sub aggregations’ processing to a sample of the top-scoring documents. The diversified_sampler aggregation adds +// the ability to limit the number of matches that share a common value such as an "author". +// +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-aggregations-bucket-diversified-sampler-aggregation.html +type DiversifiedSamplerAggregation struct { + subAggregations map[string]Aggregation + meta map[string]interface{} + field string + script *Script + shardSize int + maxDocsPerValue int + executionHint string +} + +func NewDiversifiedSamplerAggregation() *DiversifiedSamplerAggregation { + return &DiversifiedSamplerAggregation{ + shardSize: -1, + maxDocsPerValue: -1, + subAggregations: make(map[string]Aggregation), + } +} + +func (a *DiversifiedSamplerAggregation) SubAggregation(name string, subAggregation Aggregation) *DiversifiedSamplerAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *DiversifiedSamplerAggregation) Meta(metaData map[string]interface{}) *DiversifiedSamplerAggregation { + a.meta = metaData + return a +} + +// Field on which the aggregation is processed. +func (a *DiversifiedSamplerAggregation) Field(field string) *DiversifiedSamplerAggregation { + a.field = field + return a +} + +func (a *DiversifiedSamplerAggregation) Script(script *Script) *DiversifiedSamplerAggregation { + a.script = script + return a +} + +// ShardSize sets the maximum number of docs returned from each shard. +func (a *DiversifiedSamplerAggregation) ShardSize(shardSize int) *DiversifiedSamplerAggregation { + a.shardSize = shardSize + return a +} + +func (a *DiversifiedSamplerAggregation) MaxDocsPerValue(maxDocsPerValue int) *DiversifiedSamplerAggregation { + a.maxDocsPerValue = maxDocsPerValue + return a +} + +func (a *DiversifiedSamplerAggregation) ExecutionHint(hint string) *DiversifiedSamplerAggregation { + a.executionHint = hint + return a +} + +func (a *DiversifiedSamplerAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs": { + // "my_unbiased_sample": { + // "diversified_sampler": { + // "shard_size": 200, + // "field" : "author" + // } + // } + // } + // } + // + // This method returns only the { "diversified_sampler" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["diversified_sampler"] = opts + + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.shardSize >= 0 { + opts["shard_size"] = a.shardSize + } + if a.maxDocsPerValue >= 0 { + opts["max_docs_per_value"] = a.maxDocsPerValue + } + if a.executionHint != "" { + opts["execution_hint"] = a.executionHint + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_filter.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_filter.go index e4fbc67da..2085f0d36 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_filter.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_filter.go @@ -8,7 +8,7 @@ package elastic // in the current document set context that match a specified filter. // Often this will be used to narrow down the current aggregation context // to a specific set of documents. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-filter-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-filter-aggregation.html type FilterAggregation struct { filter Query subAggregations map[string]Aggregation diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_filter_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_filter_test.go deleted file mode 100644 index 6aa4fbb7c..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_filter_test.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestFilterAggregation(t *testing.T) { - filter := NewRangeQuery("stock").Gt(0) - agg := NewFilterAggregation().Filter(filter) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"filter":{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFilterAggregationWithSubAggregation(t *testing.T) { - avgPriceAgg := NewAvgAggregation().Field("price") - filter := NewRangeQuery("stock").Gt(0) - agg := NewFilterAggregation().Filter(filter). - SubAggregation("avg_price", avgPriceAgg) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"avg_price":{"avg":{"field":"price"}}},"filter":{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFilterAggregationWithMeta(t *testing.T) { - filter := NewRangeQuery("stock").Gt(0) - agg := NewFilterAggregation().Filter(filter).Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"filter":{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}},"meta":{"name":"Oliver"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_filters.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_filters.go index 0d128ca17..80999eed9 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_filters.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_filters.go @@ -15,7 +15,7 @@ import "errors" // use both named and unnamed filters. // // For details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-filters-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-filters-aggregation.html type FiltersAggregation struct { unnamedFilters []Query namedFilters map[string]Query diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_filters_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_filters_test.go deleted file mode 100644 index 95cc8d7c3..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_filters_test.go +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestFiltersAggregationFilters(t *testing.T) { - f1 := NewRangeQuery("stock").Gt(0) - f2 := NewTermQuery("symbol", "GOOG") - agg := NewFiltersAggregation().Filters(f1, f2) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"filters":{"filters":[{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}},{"term":{"symbol":"GOOG"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFiltersAggregationFilterWithName(t *testing.T) { - f1 := NewRangeQuery("stock").Gt(0) - f2 := NewTermQuery("symbol", "GOOG") - agg := NewFiltersAggregation(). - FilterWithName("f1", f1). - FilterWithName("f2", f2) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"filters":{"filters":{"f1":{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}},"f2":{"term":{"symbol":"GOOG"}}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFiltersAggregationWithKeyedAndNonKeyedFilters(t *testing.T) { - agg := NewFiltersAggregation(). - Filter(NewTermQuery("symbol", "MSFT")). // unnamed - FilterWithName("one", NewTermQuery("symbol", "GOOG")) // named filter - _, err := agg.Source() - if err == nil { - t.Fatal("expected error, got nil") - } -} - -func TestFiltersAggregationWithSubAggregation(t *testing.T) { - avgPriceAgg := NewAvgAggregation().Field("price") - f1 := NewRangeQuery("stock").Gt(0) - f2 := NewTermQuery("symbol", "GOOG") - agg := NewFiltersAggregation().Filters(f1, f2).SubAggregation("avg_price", avgPriceAgg) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"avg_price":{"avg":{"field":"price"}}},"filters":{"filters":[{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}},{"term":{"symbol":"GOOG"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFiltersAggregationWithMetaData(t *testing.T) { - f1 := NewRangeQuery("stock").Gt(0) - f2 := NewTermQuery("symbol", "GOOG") - agg := NewFiltersAggregation().Filters(f1, f2).Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"filters":{"filters":[{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}},{"term":{"symbol":"GOOG"}}]},"meta":{"name":"Oliver"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_geo_distance.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_geo_distance.go index c082fb3f2..2ae7b63dc 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_geo_distance.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_geo_distance.go @@ -11,7 +11,7 @@ package elastic // the origin point and determines the buckets it belongs to based on // the ranges (a document belongs to a bucket if the distance between the // document and the origin falls within the distance range of the bucket). -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-geodistance-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-geodistance-aggregation.html type GeoDistanceAggregation struct { field string unit string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_geo_distance_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_geo_distance_test.go deleted file mode 100644 index 3918b9dd2..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_geo_distance_test.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGeoDistanceAggregation(t *testing.T) { - agg := NewGeoDistanceAggregation().Field("location").Point("52.3760, 4.894") - agg = agg.AddRange(nil, 100) - agg = agg.AddRange(100, 300) - agg = agg.AddRange(300, nil) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_distance":{"field":"location","origin":"52.3760, 4.894","ranges":[{"to":100},{"from":100,"to":300},{"from":300}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoDistanceAggregationWithPointers(t *testing.T) { - hundred := 100 - threeHundred := 300 - agg := NewGeoDistanceAggregation().Field("location").Point("52.3760, 4.894") - agg = agg.AddRange(nil, &hundred) - agg = agg.AddRange(hundred, &threeHundred) - agg = agg.AddRange(threeHundred, nil) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_distance":{"field":"location","origin":"52.3760, 4.894","ranges":[{"to":100},{"from":100,"to":300},{"from":300}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoDistanceAggregationWithUnbounded(t *testing.T) { - agg := NewGeoDistanceAggregation().Field("location").Point("52.3760, 4.894") - agg = agg.AddUnboundedFrom(100) - agg = agg.AddRange(100, 300) - agg = agg.AddUnboundedTo(300) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_distance":{"field":"location","origin":"52.3760, 4.894","ranges":[{"to":100},{"from":100,"to":300},{"from":300}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoDistanceAggregationWithMetaData(t *testing.T) { - agg := NewGeoDistanceAggregation().Field("location").Point("52.3760, 4.894") - agg = agg.AddRange(nil, 100) - agg = agg.AddRange(100, 300) - agg = agg.AddRange(300, nil) - agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_distance":{"field":"location","origin":"52.3760, 4.894","ranges":[{"to":100},{"from":100,"to":300},{"from":300}]},"meta":{"name":"Oliver"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_geohash_grid_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_geohash_grid_test.go deleted file mode 100644 index 044e211eb..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_geohash_grid_test.go +++ /dev/null @@ -1,84 +0,0 @@ -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGeoHashGridAggregation(t *testing.T) { - agg := NewGeoHashGridAggregation().Field("location").Precision(5) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("Marshalling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geohash_grid":{"field":"location","precision":5}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoHashGridAggregationWithMetaData(t *testing.T) { - agg := NewGeoHashGridAggregation().Field("location").Precision(5) - agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("Marshalling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geohash_grid":{"field":"location","precision":5},"meta":{"name":"Oliver"}}` - - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoHashGridAggregationWithSize(t *testing.T) { - agg := NewGeoHashGridAggregation().Field("location").Precision(5).Size(5) - agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("Marshalling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geohash_grid":{"field":"location","precision":5,"size":5},"meta":{"name":"Oliver"}}` - - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoHashGridAggregationWithShardSize(t *testing.T) { - agg := NewGeoHashGridAggregation().Field("location").Precision(5).ShardSize(5) - agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("Marshalling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geohash_grid":{"field":"location","precision":5,"shard_size":5},"meta":{"name":"Oliver"}}` - - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_global.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_global.go index 4bf2a63f8..fbd14a45f 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_global.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_global.go @@ -8,7 +8,7 @@ package elastic // the search execution context. This context is defined by the indices // and the document types you’re searching on, but is not influenced // by the search query itself. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-global-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-global-aggregation.html type GlobalAggregation struct { subAggregations map[string]Aggregation meta map[string]interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_global_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_global_test.go deleted file mode 100644 index 5f1e5e6cb..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_global_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGlobalAggregation(t *testing.T) { - agg := NewGlobalAggregation() - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"global":{}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGlobalAggregationWithMetaData(t *testing.T) { - agg := NewGlobalAggregation().Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"global":{},"meta":{"name":"Oliver"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_histogram.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_histogram.go index 8b698cff5..30528c164 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_histogram.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_histogram.go @@ -8,7 +8,7 @@ package elastic // that can be applied on numeric values extracted from the documents. // It dynamically builds fixed size (a.k.a. interval) buckets over the // values. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-histogram-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-histogram-aggregation.html type HistogramAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_histogram_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_histogram_test.go deleted file mode 100644 index aeb7eec54..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_histogram_test.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestHistogramAggregation(t *testing.T) { - agg := NewHistogramAggregation().Field("price").Interval(50) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"histogram":{"field":"price","interval":50}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHistogramAggregationWithMetaData(t *testing.T) { - agg := NewHistogramAggregation().Field("price").Offset(10).Interval(50).Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"histogram":{"field":"price","interval":50,"offset":10},"meta":{"name":"Oliver"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHistogramAggregationWithMissing(t *testing.T) { - agg := NewHistogramAggregation().Field("price").Interval(50).Missing("n/a") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"histogram":{"field":"price","interval":50,"missing":"n/a"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_ip_range.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_ip_range.go index 3615e29c3..c32f334f3 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_ip_range.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_ip_range.go @@ -7,7 +7,7 @@ package elastic // IPRangeAggregation is a range aggregation that is dedicated for // IP addresses. // -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-iprange-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-aggregations-bucket-iprange-aggregation.html type IPRangeAggregation struct { field string subAggregations map[string]Aggregation diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_ip_range_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_ip_range_test.go deleted file mode 100644 index 7a2b49f4c..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_ip_range_test.go +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestIPRangeAggregation(t *testing.T) { - agg := NewIPRangeAggregation().Field("remote_ip") - agg = agg.AddRange("", "10.0.0.0") - agg = agg.AddRange("10.1.0.0", "10.1.255.255") - agg = agg.AddRange("10.2.0.0", "") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"ip_range":{"field":"remote_ip","ranges":[{"to":"10.0.0.0"},{"from":"10.1.0.0","to":"10.1.255.255"},{"from":"10.2.0.0"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestIPRangeAggregationMask(t *testing.T) { - agg := NewIPRangeAggregation().Field("remote_ip") - agg = agg.AddMaskRange("10.0.0.0/25") - agg = agg.AddMaskRange("10.0.0.127/25") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"ip_range":{"field":"remote_ip","ranges":[{"mask":"10.0.0.0/25"},{"mask":"10.0.0.127/25"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestIPRangeAggregationWithKeyedFlag(t *testing.T) { - agg := NewIPRangeAggregation().Field("remote_ip") - agg = agg.Keyed(true) - agg = agg.AddRange("", "10.0.0.0") - agg = agg.AddRange("10.1.0.0", "10.1.255.255") - agg = agg.AddRange("10.2.0.0", "") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"ip_range":{"field":"remote_ip","keyed":true,"ranges":[{"to":"10.0.0.0"},{"from":"10.1.0.0","to":"10.1.255.255"},{"from":"10.2.0.0"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestIPRangeAggregationWithKeys(t *testing.T) { - agg := NewIPRangeAggregation().Field("remote_ip") - agg = agg.Keyed(true) - agg = agg.LtWithKey("infinity", "10.0.0.5") - agg = agg.GtWithKey("and-beyond", "10.0.0.5") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"ip_range":{"field":"remote_ip","keyed":true,"ranges":[{"key":"infinity","to":"10.0.0.5"},{"from":"10.0.0.5","key":"and-beyond"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_missing.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_missing.go index 7ba3cb636..3ca3fd693 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_missing.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_missing.go @@ -11,7 +11,7 @@ package elastic // conjunction with other field data bucket aggregators (such as ranges) // to return information for all the documents that could not be placed // in any of the other buckets due to missing field data values. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-missing-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-missing-aggregation.html type MissingAggregation struct { field string subAggregations map[string]Aggregation diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_missing_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_missing_test.go deleted file mode 100644 index 179c3084f..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_missing_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMissingAggregation(t *testing.T) { - agg := NewMissingAggregation().Field("price") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"missing":{"field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMissingAggregationWithMetaData(t *testing.T) { - agg := NewMissingAggregation().Field("price").Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"meta":{"name":"Oliver"},"missing":{"field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_nested.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_nested.go index 926d493a1..62e592eb8 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_nested.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_nested.go @@ -6,7 +6,7 @@ package elastic // NestedAggregation is a special single bucket aggregation that enables // aggregating nested documents. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-nested-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-nested-aggregation.html type NestedAggregation struct { path string subAggregations map[string]Aggregation diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_nested_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_nested_test.go deleted file mode 100644 index 219943e3d..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_nested_test.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestNestedAggregation(t *testing.T) { - agg := NewNestedAggregation().Path("resellers") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"nested":{"path":"resellers"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestNestedAggregationWithSubAggregation(t *testing.T) { - minPriceAgg := NewMinAggregation().Field("resellers.price") - agg := NewNestedAggregation().Path("resellers").SubAggregation("min_price", minPriceAgg) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"min_price":{"min":{"field":"resellers.price"}}},"nested":{"path":"resellers"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestNestedAggregationWithMetaData(t *testing.T) { - agg := NewNestedAggregation().Path("resellers").Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"meta":{"name":"Oliver"},"nested":{"path":"resellers"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_range.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_range.go index 28c3df78e..1c5204a0b 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_range.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_range.go @@ -14,7 +14,7 @@ import ( // will be checked against each bucket range and "bucket" the // relevant/matching document. Note that this aggregration includes the // from value and excludes the to value for each range. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-range-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-range-aggregation.html type RangeAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_range_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_range_test.go deleted file mode 100644 index 17fbcecf3..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_range_test.go +++ /dev/null @@ -1,178 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestRangeAggregation(t *testing.T) { - agg := NewRangeAggregation().Field("price") - agg = agg.AddRange(nil, 50) - agg = agg.AddRange(50, 100) - agg = agg.AddRange(100, nil) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"field":"price","ranges":[{"to":50},{"from":50,"to":100},{"from":100}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeAggregationWithPointers(t *testing.T) { - fifty := 50 - hundred := 100 - agg := NewRangeAggregation().Field("price") - agg = agg.AddRange(nil, &fifty) - agg = agg.AddRange(fifty, &hundred) - agg = agg.AddRange(hundred, nil) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"field":"price","ranges":[{"to":50},{"from":50,"to":100},{"from":100}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeAggregationWithUnbounded(t *testing.T) { - agg := NewRangeAggregation().Field("field_name"). - AddUnboundedFrom(50). - AddRange(20, 70). - AddRange(70, 120). - AddUnboundedTo(150) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"field":"field_name","ranges":[{"to":50},{"from":20,"to":70},{"from":70,"to":120},{"from":150}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeAggregationWithLtAndCo(t *testing.T) { - agg := NewRangeAggregation().Field("field_name"). - Lt(50). - Between(20, 70). - Between(70, 120). - Gt(150) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"field":"field_name","ranges":[{"to":50},{"from":20,"to":70},{"from":70,"to":120},{"from":150}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeAggregationWithKeyedFlag(t *testing.T) { - agg := NewRangeAggregation().Field("field_name"). - Keyed(true). - Lt(50). - Between(20, 70). - Between(70, 120). - Gt(150) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"field":"field_name","keyed":true,"ranges":[{"to":50},{"from":20,"to":70},{"from":70,"to":120},{"from":150}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeAggregationWithKeys(t *testing.T) { - agg := NewRangeAggregation().Field("field_name"). - Keyed(true). - LtWithKey("cheap", 50). - BetweenWithKey("affordable", 20, 70). - BetweenWithKey("average", 70, 120). - GtWithKey("expensive", 150) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"field":"field_name","keyed":true,"ranges":[{"key":"cheap","to":50},{"from":20,"key":"affordable","to":70},{"from":70,"key":"average","to":120},{"from":150,"key":"expensive"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeAggregationWithMetaData(t *testing.T) { - agg := NewRangeAggregation().Field("price").Meta(map[string]interface{}{"name": "Oliver"}) - agg = agg.AddRange(nil, 50) - agg = agg.AddRange(50, 100) - agg = agg.AddRange(100, nil) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"meta":{"name":"Oliver"},"range":{"field":"price","ranges":[{"to":50},{"from":50,"to":100},{"from":100}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeAggregationWithMissing(t *testing.T) { - agg := NewRangeAggregation().Field("price").Missing(0) - agg = agg.AddRange(nil, 50) - agg = agg.AddRange(50, 100) - agg = agg.AddRange(100, nil) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"field":"price","missing":0,"ranges":[{"to":50},{"from":50,"to":100},{"from":100}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_reverse_nested.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_reverse_nested.go index 9e4680195..f307f256f 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_reverse_nested.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_reverse_nested.go @@ -11,7 +11,7 @@ package elastic // which allows nesting other aggregations that aren’t part of // the nested object in a nested aggregation. // -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-reverse-nested-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-reverse-nested-aggregation.html type ReverseNestedAggregation struct { path string subAggregations map[string]Aggregation diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_reverse_nested_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_reverse_nested_test.go deleted file mode 100644 index dc50bbc28..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_reverse_nested_test.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestReverseNestedAggregation(t *testing.T) { - agg := NewReverseNestedAggregation() - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"reverse_nested":{}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestReverseNestedAggregationWithPath(t *testing.T) { - agg := NewReverseNestedAggregation().Path("comments") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"reverse_nested":{"path":"comments"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestReverseNestedAggregationWithSubAggregation(t *testing.T) { - avgPriceAgg := NewAvgAggregation().Field("price") - agg := NewReverseNestedAggregation(). - Path("a_path"). - SubAggregation("avg_price", avgPriceAgg) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"avg_price":{"avg":{"field":"price"}}},"reverse_nested":{"path":"a_path"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestReverseNestedAggregationWithMeta(t *testing.T) { - agg := NewReverseNestedAggregation(). - Path("a_path"). - Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"meta":{"name":"Oliver"},"reverse_nested":{"path":"a_path"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_sampler.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_sampler.go index 0fd729dfd..c1a1ab4f7 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_sampler.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_sampler.go @@ -9,7 +9,7 @@ package elastic // Optionally, diversity settings can be used to limit the number of matches // that share a common value such as an "author". // -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-sampler-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-sampler-aggregation.html type SamplerAggregation struct { subAggregations map[string]Aggregation meta map[string]interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_sampler_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_sampler_test.go deleted file mode 100644 index c4dc1c7cc..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_sampler_test.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSamplerAggregation(t *testing.T) { - keywordsAgg := NewSignificantTermsAggregation().Field("text") - agg := NewSamplerAggregation(). - ShardSize(200). - SubAggregation("keywords", keywordsAgg) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"keywords":{"significant_terms":{"field":"text"}}},"sampler":{"shard_size":200}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_significant_terms.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_significant_terms.go index 571a91217..e03801f1e 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_significant_terms.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_significant_terms.go @@ -4,9 +4,9 @@ package elastic -// SignificantTermsAggregation is an aggregation that returns interesting +// SignificantSignificantTermsAggregation is an aggregation that returns interesting // or unusual occurrences of terms in a set. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-significantterms-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-significantterms-aggregation.html type SignificantTermsAggregation struct { field string subAggregations map[string]Aggregation @@ -166,7 +166,7 @@ type SignificanceHeuristic interface { // ChiSquareSignificanceHeuristic implements Chi square as described // in "Information Retrieval", Manning et al., Chapter 13.5.2. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-significantterms-aggregation.html#_chi_square +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-significantterms-aggregation.html#_chi_square // for details. type ChiSquareSignificanceHeuristic struct { backgroundIsSuperset *bool @@ -216,7 +216,7 @@ func (sh *ChiSquareSignificanceHeuristic) Source() (interface{}, error) { // as described in "The Google Similarity Distance", Cilibrasi and Vitanyi, // 2007. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-significantterms-aggregation.html#_google_normalized_distance +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-significantterms-aggregation.html#_google_normalized_distance // for details. type GNDSignificanceHeuristic struct { backgroundIsSuperset *bool @@ -252,7 +252,7 @@ func (sh *GNDSignificanceHeuristic) Source() (interface{}, error) { // -- JLH Score -- // JLHScoreSignificanceHeuristic implements the JLH score as described in -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-significantterms-aggregation.html#_jlh_score. +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-significantterms-aggregation.html#_jlh_score. type JLHScoreSignificanceHeuristic struct{} // NewJLHScoreSignificanceHeuristic initializes a new JLHScoreSignificanceHeuristic. @@ -276,7 +276,7 @@ func (sh *JLHScoreSignificanceHeuristic) Source() (interface{}, error) { // MutualInformationSignificanceHeuristic implements Mutual information // as described in "Information Retrieval", Manning et al., Chapter 13.5.1. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-significantterms-aggregation.html#_mutual_information +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-significantterms-aggregation.html#_mutual_information // for details. type MutualInformationSignificanceHeuristic struct { backgroundIsSuperset *bool @@ -324,7 +324,7 @@ func (sh *MutualInformationSignificanceHeuristic) Source() (interface{}, error) // -- Percentage Score -- // PercentageScoreSignificanceHeuristic implements the algorithm described -// in https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-significantterms-aggregation.html#_percentage. +// in https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-significantterms-aggregation.html#_percentage. type PercentageScoreSignificanceHeuristic struct{} // NewPercentageScoreSignificanceHeuristic initializes a new instance of @@ -347,7 +347,7 @@ func (sh *PercentageScoreSignificanceHeuristic) Source() (interface{}, error) { // -- Script -- // ScriptSignificanceHeuristic implements a scripted significance heuristic. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-significantterms-aggregation.html#_scripted +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-significantterms-aggregation.html#_scripted // for details. type ScriptSignificanceHeuristic struct { script *Script @@ -368,7 +368,7 @@ func (sh *ScriptSignificanceHeuristic) Name() string { // parameters are available in the script: `_subset_freq`, `_superset_freq`, // `_subset_size`, and `_superset_size`. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-significantterms-aggregation.html#_scripted +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-significantterms-aggregation.html#_scripted // for details. func (sh *ScriptSignificanceHeuristic) Script(script *Script) *ScriptSignificanceHeuristic { sh.script = script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_significant_terms_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_significant_terms_test.go deleted file mode 100644 index a5b269671..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_significant_terms_test.go +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSignificantTermsAggregation(t *testing.T) { - agg := NewSignificantTermsAggregation().Field("crime_type") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"significant_terms":{"field":"crime_type"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSignificantTermsAggregationWithArgs(t *testing.T) { - agg := NewSignificantTermsAggregation(). - Field("crime_type"). - ExecutionHint("map"). - ShardSize(5). - MinDocCount(10). - BackgroundFilter(NewTermQuery("city", "London")) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"significant_terms":{"background_filter":{"term":{"city":"London"}},"execution_hint":"map","field":"crime_type","min_doc_count":10,"shard_size":5}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSignificantTermsAggregationSubAggregation(t *testing.T) { - crimeTypesAgg := NewSignificantTermsAggregation().Field("crime_type") - agg := NewTermsAggregation().Field("force") - agg = agg.SubAggregation("significantCrimeTypes", crimeTypesAgg) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"significantCrimeTypes":{"significant_terms":{"field":"crime_type"}}},"terms":{"field":"force"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSignificantTermsAggregationWithMetaData(t *testing.T) { - agg := NewSignificantTermsAggregation().Field("crime_type") - agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"meta":{"name":"Oliver"},"significant_terms":{"field":"crime_type"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSignificantTermsAggregationWithChiSquare(t *testing.T) { - agg := NewSignificantTermsAggregation().Field("crime_type") - agg = agg.SignificanceHeuristic( - NewChiSquareSignificanceHeuristic(). - BackgroundIsSuperset(true). - IncludeNegatives(false), - ) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"significant_terms":{"chi_square":{"background_is_superset":true,"include_negatives":false},"field":"crime_type"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSignificantTermsAggregationWithGND(t *testing.T) { - agg := NewSignificantTermsAggregation().Field("crime_type") - agg = agg.SignificanceHeuristic( - NewGNDSignificanceHeuristic(), - ) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"significant_terms":{"field":"crime_type","gnd":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSignificantTermsAggregationWithJLH(t *testing.T) { - agg := NewSignificantTermsAggregation().Field("crime_type") - agg = agg.SignificanceHeuristic( - NewJLHScoreSignificanceHeuristic(), - ) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"significant_terms":{"field":"crime_type","jlh":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSignificantTermsAggregationWithMutualInformation(t *testing.T) { - agg := NewSignificantTermsAggregation().Field("crime_type") - agg = agg.SignificanceHeuristic( - NewMutualInformationSignificanceHeuristic(). - BackgroundIsSuperset(false). - IncludeNegatives(true), - ) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"significant_terms":{"field":"crime_type","mutual_information":{"background_is_superset":false,"include_negatives":true}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSignificantTermsAggregationWithPercentageScore(t *testing.T) { - agg := NewSignificantTermsAggregation().Field("crime_type") - agg = agg.SignificanceHeuristic( - NewPercentageScoreSignificanceHeuristic(), - ) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"significant_terms":{"field":"crime_type","percentage":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSignificantTermsAggregationWithScript(t *testing.T) { - agg := NewSignificantTermsAggregation().Field("crime_type") - agg = agg.SignificanceHeuristic( - NewScriptSignificanceHeuristic(). - Script(NewScript("_subset_freq/(_superset_freq - _subset_freq + 1)")), - ) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"significant_terms":{"field":"crime_type","script_heuristic":{"script":{"source":"_subset_freq/(_superset_freq - _subset_freq + 1)"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_significant_text.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_significant_text.go deleted file mode 100644 index de761613c..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_significant_text.go +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// SignificantTextAggregation returns interesting or unusual occurrences -// of free-text terms in a set. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-bucket-significanttext-aggregation.html -type SignificantTextAggregation struct { - field string - subAggregations map[string]Aggregation - meta map[string]interface{} - - sourceFieldNames []string - filterDuplicateText *bool - includeExclude *TermsAggregationIncludeExclude - filter Query - bucketCountThresholds *BucketCountThresholds - significanceHeuristic SignificanceHeuristic -} - -func NewSignificantTextAggregation() *SignificantTextAggregation { - return &SignificantTextAggregation{ - subAggregations: make(map[string]Aggregation, 0), - } -} - -func (a *SignificantTextAggregation) Field(field string) *SignificantTextAggregation { - a.field = field - return a -} - -func (a *SignificantTextAggregation) SubAggregation(name string, subAggregation Aggregation) *SignificantTextAggregation { - a.subAggregations[name] = subAggregation - return a -} - -// Meta sets the meta data to be included in the aggregation response. -func (a *SignificantTextAggregation) Meta(metaData map[string]interface{}) *SignificantTextAggregation { - a.meta = metaData - return a -} - -func (a *SignificantTextAggregation) SourceFieldNames(names ...string) *SignificantTextAggregation { - a.sourceFieldNames = names - return a -} - -func (a *SignificantTextAggregation) FilterDuplicateText(filter bool) *SignificantTextAggregation { - a.filterDuplicateText = &filter - return a -} - -func (a *SignificantTextAggregation) MinDocCount(minDocCount int64) *SignificantTextAggregation { - if a.bucketCountThresholds == nil { - a.bucketCountThresholds = &BucketCountThresholds{} - } - a.bucketCountThresholds.MinDocCount = &minDocCount - return a -} - -func (a *SignificantTextAggregation) ShardMinDocCount(shardMinDocCount int64) *SignificantTextAggregation { - if a.bucketCountThresholds == nil { - a.bucketCountThresholds = &BucketCountThresholds{} - } - a.bucketCountThresholds.ShardMinDocCount = &shardMinDocCount - return a -} - -func (a *SignificantTextAggregation) Size(size int) *SignificantTextAggregation { - if a.bucketCountThresholds == nil { - a.bucketCountThresholds = &BucketCountThresholds{} - } - a.bucketCountThresholds.RequiredSize = &size - return a -} - -func (a *SignificantTextAggregation) ShardSize(shardSize int) *SignificantTextAggregation { - if a.bucketCountThresholds == nil { - a.bucketCountThresholds = &BucketCountThresholds{} - } - a.bucketCountThresholds.ShardSize = &shardSize - return a -} - -func (a *SignificantTextAggregation) BackgroundFilter(filter Query) *SignificantTextAggregation { - a.filter = filter - return a -} - -func (a *SignificantTextAggregation) SignificanceHeuristic(heuristic SignificanceHeuristic) *SignificantTextAggregation { - a.significanceHeuristic = heuristic - return a -} - -func (a *SignificantTextAggregation) Include(regexp string) *SignificantTextAggregation { - if a.includeExclude == nil { - a.includeExclude = &TermsAggregationIncludeExclude{} - } - a.includeExclude.Include = regexp - return a -} - -func (a *SignificantTextAggregation) IncludeValues(values ...interface{}) *SignificantTextAggregation { - if a.includeExclude == nil { - a.includeExclude = &TermsAggregationIncludeExclude{} - } - a.includeExclude.IncludeValues = append(a.includeExclude.IncludeValues, values...) - return a -} - -func (a *SignificantTextAggregation) Exclude(regexp string) *SignificantTextAggregation { - if a.includeExclude == nil { - a.includeExclude = &TermsAggregationIncludeExclude{} - } - a.includeExclude.Exclude = regexp - return a -} - -func (a *SignificantTextAggregation) ExcludeValues(values ...interface{}) *SignificantTextAggregation { - if a.includeExclude == nil { - a.includeExclude = &TermsAggregationIncludeExclude{} - } - a.includeExclude.ExcludeValues = append(a.includeExclude.ExcludeValues, values...) - return a -} - -func (a *SignificantTextAggregation) Partition(p int) *SignificantTextAggregation { - if a.includeExclude == nil { - a.includeExclude = &TermsAggregationIncludeExclude{} - } - a.includeExclude.Partition = p - return a -} - -func (a *SignificantTextAggregation) NumPartitions(n int) *SignificantTextAggregation { - if a.includeExclude == nil { - a.includeExclude = &TermsAggregationIncludeExclude{} - } - a.includeExclude.NumPartitions = n - return a -} - -func (a *SignificantTextAggregation) Source() (interface{}, error) { - // Example: - // { - // "query" : { - // "match" : {"content" : "Bird flu"} - // }, - // "aggregations" : { - // "my_sample" : { - // "sampler": { - // "shard_size" : 100 - // }, - // "aggregations": { - // "keywords" : { - // "significant_text" : { "field" : "content" } - // } - // } - // } - // } - // } - // - // This method returns only the - // { "significant_text" : { "field" : "content" } - // part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["significant_text"] = opts - - if a.field != "" { - opts["field"] = a.field - } - if a.bucketCountThresholds != nil { - if a.bucketCountThresholds.RequiredSize != nil { - opts["size"] = (*a.bucketCountThresholds).RequiredSize - } - if a.bucketCountThresholds.ShardSize != nil { - opts["shard_size"] = (*a.bucketCountThresholds).ShardSize - } - if a.bucketCountThresholds.MinDocCount != nil { - opts["min_doc_count"] = (*a.bucketCountThresholds).MinDocCount - } - if a.bucketCountThresholds.ShardMinDocCount != nil { - opts["shard_min_doc_count"] = (*a.bucketCountThresholds).ShardMinDocCount - } - } - if a.filter != nil { - src, err := a.filter.Source() - if err != nil { - return nil, err - } - opts["background_filter"] = src - } - if a.significanceHeuristic != nil { - name := a.significanceHeuristic.Name() - src, err := a.significanceHeuristic.Source() - if err != nil { - return nil, err - } - opts[name] = src - } - // Include/Exclude - if ie := a.includeExclude; ie != nil { - // Include - if ie.Include != "" { - opts["include"] = ie.Include - } else if len(ie.IncludeValues) > 0 { - opts["include"] = ie.IncludeValues - } else if ie.NumPartitions > 0 { - inc := make(map[string]interface{}) - inc["partition"] = ie.Partition - inc["num_partitions"] = ie.NumPartitions - opts["include"] = inc - } - // Exclude - if ie.Exclude != "" { - opts["exclude"] = ie.Exclude - } else if len(ie.ExcludeValues) > 0 { - opts["exclude"] = ie.ExcludeValues - } - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - src, err := aggregate.Source() - if err != nil { - return nil, err - } - aggsMap[name] = src - } - } - - // Add Meta data if available - if len(a.meta) > 0 { - source["meta"] = a.meta - } - - return source, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_significant_text_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_significant_text_test.go deleted file mode 100644 index 53ac4461d..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_significant_text_test.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSignificantTextAggregation(t *testing.T) { - agg := NewSignificantTextAggregation().Field("content") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"significant_text":{"field":"content"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSignificantTextAggregationWithArgs(t *testing.T) { - agg := NewSignificantTextAggregation(). - Field("content"). - ShardSize(5). - MinDocCount(10). - BackgroundFilter(NewTermQuery("city", "London")) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"significant_text":{"background_filter":{"term":{"city":"London"}},"field":"content","min_doc_count":10,"shard_size":5}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSignificantTextAggregationWithMetaData(t *testing.T) { - agg := NewSignificantTextAggregation().Field("content") - agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"meta":{"name":"Oliver"},"significant_text":{"field":"content"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_terms_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_terms_test.go deleted file mode 100644 index 351cbf63b..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_bucket_terms_test.go +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTermsAggregation(t *testing.T) { - agg := NewTermsAggregation().Field("gender").Size(10).OrderByTermDesc() - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms":{"field":"gender","order":[{"_term":"desc"}],"size":10}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermsAggregationWithSubAggregation(t *testing.T) { - subAgg := NewAvgAggregation().Field("height") - agg := NewTermsAggregation().Field("gender").Size(10). - OrderByAggregation("avg_height", false) - agg = agg.SubAggregation("avg_height", subAgg) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"avg_height":{"avg":{"field":"height"}}},"terms":{"field":"gender","order":[{"avg_height":"desc"}],"size":10}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermsAggregationWithMultipleSubAggregation(t *testing.T) { - subAgg1 := NewAvgAggregation().Field("height") - subAgg2 := NewAvgAggregation().Field("width") - agg := NewTermsAggregation().Field("gender").Size(10). - OrderByAggregation("avg_height", false) - agg = agg.SubAggregation("avg_height", subAgg1) - agg = agg.SubAggregation("avg_width", subAgg2) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"avg_height":{"avg":{"field":"height"}},"avg_width":{"avg":{"field":"width"}}},"terms":{"field":"gender","order":[{"avg_height":"desc"}],"size":10}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermsAggregationWithMetaData(t *testing.T) { - agg := NewTermsAggregation().Field("gender").Size(10).OrderByTermDesc() - agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"meta":{"name":"Oliver"},"terms":{"field":"gender","order":[{"_term":"desc"}],"size":10}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermsAggregationWithMissing(t *testing.T) { - agg := NewTermsAggregation().Field("gender").Size(10).Missing("n/a") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms":{"field":"gender","missing":"n/a","size":10}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermsAggregationWithIncludeExclude(t *testing.T) { - agg := NewTermsAggregation().Field("tags").Include(".*sport.*").Exclude("water_.*") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms":{"exclude":"water_.*","field":"tags","include":".*sport.*"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermsAggregationWithIncludeExcludeValues(t *testing.T) { - agg := NewTermsAggregation().Field("make").IncludeValues("mazda", "honda").ExcludeValues("rover", "jensen") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms":{"exclude":["rover","jensen"],"field":"make","include":["mazda","honda"]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermsAggregationWithPartitions(t *testing.T) { - agg := NewTermsAggregation().Field("account_id").Partition(0).NumPartitions(20) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms":{"field":"account_id","include":{"num_partitions":20,"partition":0}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_matrix_stats.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_matrix_stats.go index 785f392b6..875da0718 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_matrix_stats.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_matrix_stats.go @@ -5,7 +5,7 @@ package elastic // MatrixMatrixStatsAggregation ... -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-stats-aggregation.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.3/search-aggregations-metrics-stats-aggregation.html // for details. type MatrixStatsAggregation struct { fields []string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_matrix_stats_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_matrix_stats_test.go deleted file mode 100644 index 28138fe02..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_matrix_stats_test.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMatrixStatsAggregation(t *testing.T) { - agg := NewMatrixStatsAggregation(). - Fields("poverty", "income"). - Missing(map[string]interface{}{ - "income": 50000, - }). - Mode("avg"). - Format("0000.0"). - ValueType("double") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"matrix_stats":{"fields":["poverty","income"],"format":"0000.0","missing":{"income":50000},"mode":"avg","value_type":"double"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMatrixStatsAggregationWithMetaData(t *testing.T) { - agg := NewMatrixStatsAggregation(). - Fields("poverty", "income"). - Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"matrix_stats":{"fields":["poverty","income"]},"meta":{"name":"Oliver"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_avg.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_avg.go index 2b764e065..ff337a8cd 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_avg.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_avg.go @@ -9,7 +9,7 @@ package elastic // aggregated documents. These values can be extracted either from // specific numeric fields in the documents, or be generated by // a provided script. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-avg-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-avg-aggregation.html type AvgAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_avg_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_avg_test.go deleted file mode 100644 index 784ff45dd..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_avg_test.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestAvgAggregation(t *testing.T) { - agg := NewAvgAggregation().Field("grade") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"avg":{"field":"grade"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestAvgAggregationWithFormat(t *testing.T) { - agg := NewAvgAggregation().Field("grade").Format("000.0") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"avg":{"field":"grade","format":"000.0"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestAvgAggregationWithMetaData(t *testing.T) { - agg := NewAvgAggregation().Field("grade").Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"avg":{"field":"grade"},"meta":{"name":"Oliver"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_cardinality.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_cardinality.go index 3b999c849..8f6f447c4 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_cardinality.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_cardinality.go @@ -8,7 +8,7 @@ package elastic // calculates an approximate count of distinct values. // Values can be extracted either from specific fields in the document // or generated by a script. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-cardinality-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-cardinality-aggregation.html type CardinalityAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_cardinality_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_cardinality_test.go deleted file mode 100644 index b5f8490b5..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_cardinality_test.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestCardinalityAggregation(t *testing.T) { - agg := NewCardinalityAggregation().Field("author.hash") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"cardinality":{"field":"author.hash"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestCardinalityAggregationWithOptions(t *testing.T) { - agg := NewCardinalityAggregation().Field("author.hash").PrecisionThreshold(100).Rehash(true) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"cardinality":{"field":"author.hash","precision_threshold":100,"rehash":true}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestCardinalityAggregationWithFormat(t *testing.T) { - agg := NewCardinalityAggregation().Field("author.hash").Format("00000") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"cardinality":{"field":"author.hash","format":"00000"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestCardinalityAggregationWithMetaData(t *testing.T) { - agg := NewCardinalityAggregation().Field("author.hash").Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"cardinality":{"field":"author.hash"},"meta":{"name":"Oliver"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_extended_stats.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_extended_stats.go index 4e0bbe65a..95b312686 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_extended_stats.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_extended_stats.go @@ -8,7 +8,7 @@ package elastic // computes stats over numeric values extracted from the aggregated documents. // These values can be extracted either from specific numeric fields // in the documents, or be generated by a provided script. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-extendedstats-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-extendedstats-aggregation.html type ExtendedStatsAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_extended_stats_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_extended_stats_test.go deleted file mode 100644 index 76489630d..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_extended_stats_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestExtendedStatsAggregation(t *testing.T) { - agg := NewExtendedStatsAggregation().Field("grade") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"extended_stats":{"field":"grade"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestExtendedStatsAggregationWithFormat(t *testing.T) { - agg := NewExtendedStatsAggregation().Field("grade").Format("000.0") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"extended_stats":{"field":"grade","format":"000.0"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_geo_bounds.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_geo_bounds.go index 406f2d000..c263a76b4 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_geo_bounds.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_geo_bounds.go @@ -6,7 +6,7 @@ package elastic // GeoBoundsAggregation is a metric aggregation that computes the // bounding box containing all geo_point values for a field. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-geobounds-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-geobounds-aggregation.html type GeoBoundsAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_geo_bounds_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_geo_bounds_test.go deleted file mode 100644 index ea713c604..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_geo_bounds_test.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGeoBoundsAggregation(t *testing.T) { - agg := NewGeoBoundsAggregation().Field("location") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_bounds":{"field":"location"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoBoundsAggregationWithWrapLongitude(t *testing.T) { - agg := NewGeoBoundsAggregation().Field("location").WrapLongitude(true) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_bounds":{"field":"location","wrap_longitude":true}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoBoundsAggregationWithMetaData(t *testing.T) { - agg := NewGeoBoundsAggregation().Field("location").Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_bounds":{"field":"location"},"meta":{"name":"Oliver"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_geo_centroid.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_geo_centroid.go new file mode 100644 index 000000000..a3470794a --- /dev/null +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_geo_centroid.go @@ -0,0 +1,95 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// GeoCentroidAggregation is a metric aggregation that computes the weighted centroid +// from all coordinate values for a Geo-point datatype field. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-aggregations-metrics-geocentroid-aggregation.html +type GeoCentroidAggregation struct { + field string + script *Script + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewGeoCentroidAggregation() *GeoCentroidAggregation { + return &GeoCentroidAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *GeoCentroidAggregation) Field(field string) *GeoCentroidAggregation { + a.field = field + return a +} + +func (a *GeoCentroidAggregation) Script(script *Script) *GeoCentroidAggregation { + a.script = script + return a +} + +func (a *GeoCentroidAggregation) SubAggregation(name string, subAggregation Aggregation) *GeoCentroidAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *GeoCentroidAggregation) Meta(metaData map[string]interface{}) *GeoCentroidAggregation { + a.meta = metaData + return a +} + +func (a *GeoCentroidAggregation) Source() (interface{}, error) { + // Example: + // { + // "query" : { + // "match" : { "business_type" : "shop" } + // }, + // "aggs" : { + // "centroid" : { + // "geo_centroid" : { + // "field" : "location" + // } + // } + // } + // } + // + // This method returns only the { "geo_centroid" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["geo_centroid"] = opts + + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_max.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_max.go index acdfa14a8..b62130676 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_max.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_max.go @@ -9,7 +9,7 @@ package elastic // the aggregated documents. These values can be extracted either from // specific numeric fields in the documents, or be generated by // a provided script. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-max-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-max-aggregation.html type MaxAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_max_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_max_test.go deleted file mode 100644 index 773cc2e4b..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_max_test.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMaxAggregation(t *testing.T) { - agg := NewMaxAggregation().Field("price") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"max":{"field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMaxAggregationWithFormat(t *testing.T) { - agg := NewMaxAggregation().Field("price").Format("00000.00") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"max":{"field":"price","format":"00000.00"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMaxAggregationWithMetaData(t *testing.T) { - agg := NewMaxAggregation().Field("price").Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"max":{"field":"price"},"meta":{"name":"Oliver"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_min.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_min.go index af63585da..c1ca6922b 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_min.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_min.go @@ -9,7 +9,7 @@ package elastic // aggregated documents. These values can be extracted either from // specific numeric fields in the documents, or be generated by a // provided script. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-min-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-min-aggregation.html type MinAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_min_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_min_test.go deleted file mode 100644 index fcde3817c..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_min_test.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMinAggregation(t *testing.T) { - agg := NewMinAggregation().Field("price") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"min":{"field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMinAggregationWithFormat(t *testing.T) { - agg := NewMinAggregation().Field("price").Format("00000.00") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"min":{"field":"price","format":"00000.00"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMinAggregationWithMetaData(t *testing.T) { - agg := NewMinAggregation().Field("price").Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"meta":{"name":"Oliver"},"min":{"field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_percentile_ranks.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_percentile_ranks.go index 674fc41f9..3e0595e88 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_percentile_ranks.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_percentile_ranks.go @@ -5,7 +5,7 @@ package elastic // PercentileRanksAggregation -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-percentile-rank-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-percentile-rank-aggregation.html type PercentileRanksAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_percentile_ranks_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_percentile_ranks_test.go deleted file mode 100644 index a4bac02b5..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_percentile_ranks_test.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestPercentileRanksAggregation(t *testing.T) { - agg := NewPercentileRanksAggregation().Field("load_time") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percentile_ranks":{"field":"load_time"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPercentileRanksAggregationWithCustomValues(t *testing.T) { - agg := NewPercentileRanksAggregation().Field("load_time").Values(15, 30) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percentile_ranks":{"field":"load_time","values":[15,30]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPercentileRanksAggregationWithFormat(t *testing.T) { - agg := NewPercentileRanksAggregation().Field("load_time").Format("000.0") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percentile_ranks":{"field":"load_time","format":"000.0"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPercentileRanksAggregationWithMetaData(t *testing.T) { - agg := NewPercentileRanksAggregation().Field("load_time").Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"meta":{"name":"Oliver"},"percentile_ranks":{"field":"load_time"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_percentiles.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_percentiles.go index a1d78c8f2..411f9c50f 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_percentiles.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_percentiles.go @@ -5,7 +5,7 @@ package elastic // PercentilesAggregation -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-percentile-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-percentile-aggregation.html type PercentilesAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_percentiles_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_percentiles_test.go deleted file mode 100644 index 93df1dd29..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_percentiles_test.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestPercentilesAggregation(t *testing.T) { - agg := NewPercentilesAggregation().Field("price") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percentiles":{"field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPercentilesAggregationWithCustomPercents(t *testing.T) { - agg := NewPercentilesAggregation().Field("price").Percentiles(0.2, 0.5, 0.9) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percentiles":{"field":"price","percents":[0.2,0.5,0.9]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPercentilesAggregationWithFormat(t *testing.T) { - agg := NewPercentilesAggregation().Field("price").Format("00000.00") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percentiles":{"field":"price","format":"00000.00"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPercentilesAggregationWithMetaData(t *testing.T) { - agg := NewPercentilesAggregation().Field("price").Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"meta":{"name":"Oliver"},"percentiles":{"field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_stats.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_stats.go index b9bbe7cff..400b79b00 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_stats.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_stats.go @@ -8,7 +8,7 @@ package elastic // over numeric values extracted from the aggregated documents. // These values can be extracted either from specific numeric fields // in the documents, or be generated by a provided script. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-stats-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-stats-aggregation.html type StatsAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_stats_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_stats_test.go deleted file mode 100644 index 5cff372d4..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_stats_test.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestStatsAggregation(t *testing.T) { - agg := NewStatsAggregation().Field("grade") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"stats":{"field":"grade"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestStatsAggregationWithFormat(t *testing.T) { - agg := NewStatsAggregation().Field("grade").Format("0000.0") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"stats":{"field":"grade","format":"0000.0"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestStatsAggregationWithMetaData(t *testing.T) { - agg := NewStatsAggregation().Field("grade").Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"meta":{"name":"Oliver"},"stats":{"field":"grade"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_sum.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_sum.go index e1c07c9c1..f959a3e54 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_sum.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_sum.go @@ -8,7 +8,7 @@ package elastic // numeric values that are extracted from the aggregated documents. // These values can be extracted either from specific numeric fields // in the documents, or be generated by a provided script. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-sum-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-sum-aggregation.html type SumAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_sum_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_sum_test.go deleted file mode 100644 index ff0e42545..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_sum_test.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSumAggregation(t *testing.T) { - agg := NewSumAggregation().Field("price") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"sum":{"field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSumAggregationWithFormat(t *testing.T) { - agg := NewSumAggregation().Field("price").Format("00000.00") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"sum":{"field":"price","format":"00000.00"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSumAggregationWithMetaData(t *testing.T) { - agg := NewSumAggregation().Field("price").Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"meta":{"name":"Oliver"},"sum":{"field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_top_hits.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_top_hits.go index 2b181895e..43dd36cdb 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_top_hits.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_top_hits.go @@ -13,7 +13,7 @@ package elastic // a bucket aggregator. One or more bucket aggregators determines by // which properties a result set get sliced into. // -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-top-hits-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-top-hits-aggregation.html type TopHitsAggregation struct { searchSource *SearchSource } diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_top_hits_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_top_hits_test.go deleted file mode 100644 index 861f079fe..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_top_hits_test.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTopHitsAggregation(t *testing.T) { - fsc := NewFetchSourceContext(true).Include("title") - agg := NewTopHitsAggregation(). - Sort("last_activity_date", false). - FetchSourceContext(fsc). - Size(1) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"top_hits":{"_source":{"includes":["title"]},"size":1,"sort":[{"last_activity_date":{"order":"desc"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_value_count.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_value_count.go index d56f1f873..4e7281d62 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_value_count.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_value_count.go @@ -11,7 +11,7 @@ package elastic // used in conjunction with other single-value aggregations. // For example, when computing the avg one might be interested in the // number of values the average is computed over. -// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-metrics-valuecount-aggregation.html +// See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-valuecount-aggregation.html type ValueCountAggregation struct { field string script *Script diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_value_count_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_value_count_test.go deleted file mode 100644 index 18d2ba119..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_metrics_value_count_test.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestValueCountAggregation(t *testing.T) { - agg := NewValueCountAggregation().Field("grade") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"value_count":{"field":"grade"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestValueCountAggregationWithFormat(t *testing.T) { - // Format comes with 1.5.0+ - agg := NewValueCountAggregation().Field("grade").Format("0000.0") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"value_count":{"field":"grade","format":"0000.0"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestValueCountAggregationWithMetaData(t *testing.T) { - agg := NewValueCountAggregation().Field("grade") - agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"meta":{"name":"Oliver"},"value_count":{"field":"grade"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_avg_bucket.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_avg_bucket.go index f37a9bdb8..7eea9310d 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_avg_bucket.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_avg_bucket.go @@ -10,7 +10,7 @@ package elastic // be a multi-bucket aggregation. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-avg-bucket-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-avg-bucket-aggregation.html type AvgBucketAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_avg_bucket_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_avg_bucket_test.go deleted file mode 100644 index 019b8f1ad..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_avg_bucket_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestAvgBucketAggregation(t *testing.T) { - agg := NewAvgBucketAggregation().BucketsPath("the_sum").GapPolicy("skip") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"avg_bucket":{"buckets_path":"the_sum","gap_policy":"skip"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_bucket_script.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_bucket_script.go index 34e356964..13cad638f 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_bucket_script.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_bucket_script.go @@ -10,7 +10,7 @@ package elastic // numeric and the script must return a numeric value. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-bucket-script-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-bucket-script-aggregation.html type BucketScriptAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_bucket_script_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_bucket_script_test.go deleted file mode 100644 index 3c101c706..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_bucket_script_test.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestBucketScriptAggregation(t *testing.T) { - agg := NewBucketScriptAggregation(). - AddBucketsPath("tShirtSales", "t-shirts>sales"). - AddBucketsPath("totalSales", "total_sales"). - Script(NewScript("tShirtSales / totalSales * 100")) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"bucket_script":{"buckets_path":{"tShirtSales":"t-shirts\u003esales","totalSales":"total_sales"},"script":{"source":"tShirtSales / totalSales * 100"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_bucket_selector.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_bucket_selector.go index 233414d70..f3c938519 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_bucket_selector.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_bucket_selector.go @@ -12,7 +12,7 @@ package elastic // will be evaluated as false and all other values will evaluate to true. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-bucket-selector-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-bucket-selector-aggregation.html type BucketSelectorAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_bucket_selector_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_bucket_selector_test.go deleted file mode 100644 index e378c2832..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_bucket_selector_test.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestBucketSelectorAggregation(t *testing.T) { - agg := NewBucketSelectorAggregation(). - AddBucketsPath("totalSales", "total_sales"). - Script(NewScript("totalSales >= 1000")) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"bucket_selector":{"buckets_path":{"totalSales":"total_sales"},"script":{"source":"totalSales \u003e= 1000"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_cumulative_sum.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_cumulative_sum.go index 80a1db42d..95546f1cb 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_cumulative_sum.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_cumulative_sum.go @@ -10,7 +10,7 @@ package elastic // histogram must have min_doc_count set to 0 (default for histogram aggregations). // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-cumulative-sum-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-cumulative-sum-aggregation.html type CumulativeSumAggregation struct { format string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_cumulative_sum_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_cumulative_sum_test.go deleted file mode 100644 index 69a215d43..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_cumulative_sum_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestCumulativeSumAggregation(t *testing.T) { - agg := NewCumulativeSumAggregation().BucketsPath("sales") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"cumulative_sum":{"buckets_path":"sales"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_derivative.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_derivative.go index ee7114e25..2c3c7e03a 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_derivative.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_derivative.go @@ -10,7 +10,7 @@ package elastic // histogram must have min_doc_count set to 0 (default for histogram aggregations). // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-derivative-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-derivative-aggregation.html type DerivativeAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_derivative_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_derivative_test.go deleted file mode 100644 index 7e7b26749..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_derivative_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestDerivativeAggregation(t *testing.T) { - agg := NewDerivativeAggregation().BucketsPath("sales") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"derivative":{"buckets_path":"sales"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_max_bucket.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_max_bucket.go index 5da049561..5a10b0e45 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_max_bucket.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_max_bucket.go @@ -11,7 +11,7 @@ package elastic // be a multi-bucket aggregation. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-max-bucket-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-max-bucket-aggregation.html type MaxBucketAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_max_bucket_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_max_bucket_test.go deleted file mode 100644 index aa9bf2f6d..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_max_bucket_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMaxBucketAggregation(t *testing.T) { - agg := NewMaxBucketAggregation().BucketsPath("the_sum").GapPolicy("skip") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"max_bucket":{"buckets_path":"the_sum","gap_policy":"skip"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_min_bucket.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_min_bucket.go index 463bb919e..96982250c 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_min_bucket.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_min_bucket.go @@ -11,7 +11,7 @@ package elastic // be a multi-bucket aggregation. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-min-bucket-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-min-bucket-aggregation.html type MinBucketAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_min_bucket_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_min_bucket_test.go deleted file mode 100644 index ff4abf2b2..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_min_bucket_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMinBucketAggregation(t *testing.T) { - agg := NewMinBucketAggregation().BucketsPath("sales_per_month>sales").GapPolicy("skip") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"min_bucket":{"buckets_path":"sales_per_month\u003esales","gap_policy":"skip"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_mov_avg.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_mov_avg.go index 821d73842..cf94342f7 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_mov_avg.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_mov_avg.go @@ -8,7 +8,7 @@ package elastic // across the data and emit the average value of that window. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-movavg-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-movavg-aggregation.html type MovAvgAggregation struct { format string gapPolicy string @@ -162,7 +162,7 @@ func (a *MovAvgAggregation) Source() (interface{}, error) { } // -- Models for moving averages -- -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-movavg-aggregation.html#_models +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-movavg-aggregation.html#_models // MovAvgModel specifies the model to use with the MovAvgAggregation. type MovAvgModel interface { @@ -175,7 +175,7 @@ type MovAvgModel interface { // EWMAMovAvgModel calculates an exponentially weighted moving average. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-movavg-aggregation.html#_ewma_exponentially_weighted +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-movavg-aggregation.html#_ewma_exponentially_weighted type EWMAMovAvgModel struct { alpha *float64 } @@ -213,7 +213,7 @@ func (m *EWMAMovAvgModel) Settings() map[string]interface{} { // HoltLinearMovAvgModel calculates a doubly exponential weighted moving average. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-movavg-aggregation.html#_holt_linear +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-movavg-aggregation.html#_holt_linear type HoltLinearMovAvgModel struct { alpha *float64 beta *float64 @@ -262,7 +262,7 @@ func (m *HoltLinearMovAvgModel) Settings() map[string]interface{} { // HoltWintersMovAvgModel calculates a triple exponential weighted moving average. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-movavg-aggregation.html#_holt_winters +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-movavg-aggregation.html#_holt_winters type HoltWintersMovAvgModel struct { alpha *float64 beta *float64 @@ -349,7 +349,7 @@ func (m *HoltWintersMovAvgModel) Settings() map[string]interface{} { // by position in collection. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-movavg-aggregation.html#_linear +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-movavg-aggregation.html#_linear type LinearMovAvgModel struct { } @@ -373,7 +373,7 @@ func (m *LinearMovAvgModel) Settings() map[string]interface{} { // SimpleMovAvgModel calculates a simple unweighted (arithmetic) moving average. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-movavg-aggregation.html#_simple +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-movavg-aggregation.html#_simple type SimpleMovAvgModel struct { } diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_mov_avg_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_mov_avg_test.go deleted file mode 100644 index af2fc7c27..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_mov_avg_test.go +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMovAvgAggregation(t *testing.T) { - agg := NewMovAvgAggregation().BucketsPath("the_sum") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"moving_avg":{"buckets_path":"the_sum"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMovAvgAggregationWithSimpleModel(t *testing.T) { - agg := NewMovAvgAggregation().BucketsPath("the_sum").Window(30).Model(NewSimpleMovAvgModel()) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"moving_avg":{"buckets_path":"the_sum","model":"simple","window":30}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMovAvgAggregationWithLinearModel(t *testing.T) { - agg := NewMovAvgAggregation().BucketsPath("the_sum").Window(30).Model(NewLinearMovAvgModel()) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"moving_avg":{"buckets_path":"the_sum","model":"linear","window":30}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMovAvgAggregationWithEWMAModel(t *testing.T) { - agg := NewMovAvgAggregation().BucketsPath("the_sum").Window(30).Model(NewEWMAMovAvgModel().Alpha(0.5)) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"moving_avg":{"buckets_path":"the_sum","model":"ewma","settings":{"alpha":0.5},"window":30}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMovAvgAggregationWithHoltLinearModel(t *testing.T) { - agg := NewMovAvgAggregation().BucketsPath("the_sum").Window(30). - Model(NewHoltLinearMovAvgModel().Alpha(0.5).Beta(0.4)) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"moving_avg":{"buckets_path":"the_sum","model":"holt","settings":{"alpha":0.5,"beta":0.4},"window":30}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMovAvgAggregationWithHoltWintersModel(t *testing.T) { - agg := NewMovAvgAggregation().BucketsPath("the_sum").Window(30).Predict(10).Minimize(true). - Model(NewHoltWintersMovAvgModel().Alpha(0.5).Beta(0.4).Gamma(0.3).Period(7).Pad(true)) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"moving_avg":{"buckets_path":"the_sum","minimize":true,"model":"holt_winters","predict":10,"settings":{"alpha":0.5,"beta":0.4,"gamma":0.3,"pad":true,"period":7},"window":30}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMovAvgAggregationWithSubAggs(t *testing.T) { - agg := NewMovAvgAggregation().BucketsPath("the_sum") - agg = agg.SubAggregation("avg_sum", NewAvgAggregation().Field("height")) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"avg_sum":{"avg":{"field":"height"}}},"moving_avg":{"buckets_path":"the_sum"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_percentiles_bucket.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_percentiles_bucket.go index 9a3556269..4caca7432 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_percentiles_bucket.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_percentiles_bucket.go @@ -10,7 +10,7 @@ package elastic // be a multi-bucket aggregation. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-percentiles-bucket-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-percentiles-bucket-aggregation.html type PercentilesBucketAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_percentiles_bucket_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_percentiles_bucket_test.go deleted file mode 100644 index 5fa2639de..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_percentiles_bucket_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestPercentilesBucketAggregation(t *testing.T) { - agg := NewPercentilesBucketAggregation().BucketsPath("the_sum").GapPolicy("skip") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percentiles_bucket":{"buckets_path":"the_sum","gap_policy":"skip"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPercentilesBucketAggregationWithPercents(t *testing.T) { - agg := NewPercentilesBucketAggregation().BucketsPath("the_sum").Percents(0.1, 1.0, 5.0, 25, 50) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percentiles_bucket":{"buckets_path":"the_sum","percents":[0.1,1,5,25,50]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_serial_diff.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_serial_diff.go index e13b94ea9..84ae43004 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_serial_diff.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_serial_diff.go @@ -9,7 +9,7 @@ package elastic // subtracted from itself at different time lags or periods. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-serialdiff-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-serialdiff-aggregation.html type SerialDiffAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_serial_diff_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_serial_diff_test.go deleted file mode 100644 index 6d336a2ee..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_serial_diff_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSerialDiffAggregation(t *testing.T) { - agg := NewSerialDiffAggregation().BucketsPath("the_sum").Lag(7) - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"serial_diff":{"buckets_path":"the_sum","lag":7}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_stats_bucket.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_stats_bucket.go index e68a420f2..fb0a94afc 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_stats_bucket.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_stats_bucket.go @@ -10,7 +10,7 @@ package elastic // be a multi-bucket aggregation. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-stats-bucket-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-stats-bucket-aggregation.html type StatsBucketAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_stats_bucket_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_stats_bucket_test.go deleted file mode 100644 index 117a73885..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_stats_bucket_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestStatsBucketAggregation(t *testing.T) { - agg := NewStatsBucketAggregation().BucketsPath("the_sum").GapPolicy("skip") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"stats_bucket":{"buckets_path":"the_sum","gap_policy":"skip"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_sum_bucket.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_sum_bucket.go index c22ae8f50..1f78efa56 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_sum_bucket.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_sum_bucket.go @@ -10,7 +10,7 @@ package elastic // be a multi-bucket aggregation. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-aggregations-pipeline-sum-bucket-aggregation.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-sum-bucket-aggregation.html type SumBucketAggregation struct { format string gapPolicy string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_sum_bucket_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_sum_bucket_test.go deleted file mode 100644 index be8275c81..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_sum_bucket_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSumBucketAggregation(t *testing.T) { - agg := NewSumBucketAggregation().BucketsPath("the_sum") - src, err := agg.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"sum_bucket":{"buckets_path":"the_sum"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_test.go deleted file mode 100644 index 24dd4eb0f..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_pipeline_test.go +++ /dev/null @@ -1,903 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestAggsIntegrationAvgBucket(t *testing.T) { - //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents - builder := client.Search(). - Index(testOrderIndex). - Type("doc"). - Query(NewMatchAllQuery()). - Pretty(true) - h := NewDateHistogramAggregation().Field("time").Interval("month") - h = h.SubAggregation("sales", NewSumAggregation().Field("price")) - builder = builder.Aggregation("sales_per_month", h) - builder = builder.Aggregation("avg_monthly_sales", NewAvgBucketAggregation().BucketsPath("sales_per_month>sales")) - - res, err := builder.Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res.Hits == nil { - t.Errorf("expected Hits != nil; got: nil") - } - - aggs := res.Aggregations - if aggs == nil { - t.Fatal("expected aggregations != nil; got: nil") - } - - agg, found := aggs.AvgBucket("avg_monthly_sales") - if !found { - t.Fatal("expected avg_monthly_sales aggregation") - } - if agg == nil { - t.Fatal("expected avg_monthly_sales aggregation") - } - if agg.Value == nil { - t.Fatal("expected avg_monthly_sales.value != nil") - } - if got, want := *agg.Value, float64(939.2); got != want { - t.Fatalf("expected avg_monthly_sales.value=%v; got: %v", want, got) - } -} - -func TestAggsIntegrationDerivative(t *testing.T) { - //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents - builder := client.Search(). - Index(testOrderIndex). - Type("doc"). - Query(NewMatchAllQuery()). - Pretty(true) - h := NewDateHistogramAggregation().Field("time").Interval("month") - h = h.SubAggregation("sales", NewSumAggregation().Field("price")) - h = h.SubAggregation("sales_deriv", NewDerivativeAggregation().BucketsPath("sales")) - builder = builder.Aggregation("sales_per_month", h) - - res, err := builder.Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res.Hits == nil { - t.Errorf("expected Hits != nil; got: nil") - } - - aggs := res.Aggregations - if aggs == nil { - t.Fatal("expected aggregations != nil; got: nil") - } - - agg, found := aggs.DateHistogram("sales_per_month") - if !found { - t.Fatal("expected sales_per_month aggregation") - } - if agg == nil { - t.Fatal("expected sales_per_month aggregation") - } - if got, want := len(agg.Buckets), 6; got != want { - t.Fatalf("expected %d buckets; got: %d", want, got) - } - - if got, want := agg.Buckets[0].DocCount, int64(1); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[1].DocCount, int64(0); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[2].DocCount, int64(1); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[3].DocCount, int64(3); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[4].DocCount, int64(1); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[5].DocCount, int64(2); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - - d, found := agg.Buckets[0].Derivative("sales_deriv") - if found { - t.Fatal("expected no sales_deriv aggregation") - } - if d != nil { - t.Fatal("expected no sales_deriv aggregation") - } - - d, found = agg.Buckets[1].Derivative("sales_deriv") - if !found { - t.Fatal("expected sales_deriv aggregation") - } - if d == nil { - t.Fatal("expected sales_deriv aggregation") - } - if d.Value != nil { - t.Fatal("expected sales_deriv value == nil") - } - - d, found = agg.Buckets[2].Derivative("sales_deriv") - if !found { - t.Fatal("expected sales_deriv aggregation") - } - if d == nil { - t.Fatal("expected sales_deriv aggregation") - } - if d.Value != nil { - t.Fatal("expected sales_deriv value == nil") - } - - d, found = agg.Buckets[3].Derivative("sales_deriv") - if !found { - t.Fatal("expected sales_deriv aggregation") - } - if d == nil { - t.Fatal("expected sales_deriv aggregation") - } - if d.Value == nil { - t.Fatal("expected sales_deriv value != nil") - } - if got, want := *d.Value, float64(2348.0); got != want { - t.Fatalf("expected sales_deriv.value=%v; got: %v", want, got) - } - - d, found = agg.Buckets[4].Derivative("sales_deriv") - if !found { - t.Fatal("expected sales_deriv aggregation") - } - if d == nil { - t.Fatal("expected sales_deriv aggregation") - } - if d.Value == nil { - t.Fatal("expected sales_deriv value != nil") - } - if got, want := *d.Value, float64(-1658.0); got != want { - t.Fatalf("expected sales_deriv.value=%v; got: %v", want, got) - } - - d, found = agg.Buckets[5].Derivative("sales_deriv") - if !found { - t.Fatal("expected sales_deriv aggregation") - } - if d == nil { - t.Fatal("expected sales_deriv aggregation") - } - if d.Value == nil { - t.Fatal("expected sales_deriv value != nil") - } - if got, want := *d.Value, float64(-722.0); got != want { - t.Fatalf("expected sales_deriv.value=%v; got: %v", want, got) - } -} - -func TestAggsIntegrationMaxBucket(t *testing.T) { - //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents - builder := client.Search(). - Index(testOrderIndex). - Type("doc"). - Query(NewMatchAllQuery()). - Pretty(true) - h := NewDateHistogramAggregation().Field("time").Interval("month") - h = h.SubAggregation("sales", NewSumAggregation().Field("price")) - builder = builder.Aggregation("sales_per_month", h) - builder = builder.Aggregation("max_monthly_sales", NewMaxBucketAggregation().BucketsPath("sales_per_month>sales")) - - res, err := builder.Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res.Hits == nil { - t.Errorf("expected Hits != nil; got: nil") - } - - aggs := res.Aggregations - if aggs == nil { - t.Fatal("expected aggregations != nil; got: nil") - } - - agg, found := aggs.MaxBucket("max_monthly_sales") - if !found { - t.Fatal("expected max_monthly_sales aggregation") - } - if agg == nil { - t.Fatal("expected max_monthly_sales aggregation") - } - if got, want := len(agg.Keys), 1; got != want { - t.Fatalf("expected len(max_monthly_sales.keys)=%d; got: %d", want, got) - } - if got, want := agg.Keys[0], "2015-04-01"; got != want { - t.Fatalf("expected max_monthly_sales.keys[0]=%v; got: %v", want, got) - } - if agg.Value == nil { - t.Fatal("expected max_monthly_sales.value != nil") - } - if got, want := *agg.Value, float64(2448); got != want { - t.Fatalf("expected max_monthly_sales.value=%v; got: %v", want, got) - } -} - -func TestAggsIntegrationMinBucket(t *testing.T) { - //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents - builder := client.Search(). - Index(testOrderIndex). - Type("doc"). - Query(NewMatchAllQuery()). - Pretty(true) - h := NewDateHistogramAggregation().Field("time").Interval("month") - h = h.SubAggregation("sales", NewSumAggregation().Field("price")) - builder = builder.Aggregation("sales_per_month", h) - builder = builder.Aggregation("min_monthly_sales", NewMinBucketAggregation().BucketsPath("sales_per_month>sales")) - - res, err := builder.Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res.Hits == nil { - t.Errorf("expected Hits != nil; got: nil") - } - - aggs := res.Aggregations - if aggs == nil { - t.Fatal("expected aggregations != nil; got: nil") - } - - agg, found := aggs.MinBucket("min_monthly_sales") - if !found { - t.Fatal("expected min_monthly_sales aggregation") - } - if agg == nil { - t.Fatal("expected min_monthly_sales aggregation") - } - if got, want := len(agg.Keys), 1; got != want { - t.Fatalf("expected len(min_monthly_sales.keys)=%d; got: %d", want, got) - } - if got, want := agg.Keys[0], "2015-06-01"; got != want { - t.Fatalf("expected min_monthly_sales.keys[0]=%v; got: %v", want, got) - } - if agg.Value == nil { - t.Fatal("expected min_monthly_sales.value != nil") - } - if got, want := *agg.Value, float64(68); got != want { - t.Fatalf("expected min_monthly_sales.value=%v; got: %v", want, got) - } -} - -func TestAggsIntegrationSumBucket(t *testing.T) { - //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents - builder := client.Search(). - Index(testOrderIndex). - Type("doc"). - Query(NewMatchAllQuery()). - Pretty(true) - h := NewDateHistogramAggregation().Field("time").Interval("month") - h = h.SubAggregation("sales", NewSumAggregation().Field("price")) - builder = builder.Aggregation("sales_per_month", h) - builder = builder.Aggregation("sum_monthly_sales", NewSumBucketAggregation().BucketsPath("sales_per_month>sales")) - - res, err := builder.Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res.Hits == nil { - t.Errorf("expected Hits != nil; got: nil") - } - - aggs := res.Aggregations - if aggs == nil { - t.Fatal("expected aggregations != nil; got: nil") - } - - agg, found := aggs.SumBucket("sum_monthly_sales") - if !found { - t.Fatal("expected sum_monthly_sales aggregation") - } - if agg == nil { - t.Fatal("expected sum_monthly_sales aggregation") - } - if agg.Value == nil { - t.Fatal("expected sum_monthly_sales.value != nil") - } - if got, want := *agg.Value, float64(4696.0); got != want { - t.Fatalf("expected sum_monthly_sales.value=%v; got: %v", want, got) - } -} - -func TestAggsIntegrationMovAvg(t *testing.T) { - //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents - builder := client.Search(). - Index(testOrderIndex). - Type("doc"). - Query(NewMatchAllQuery()). - Pretty(true) - h := NewDateHistogramAggregation().Field("time").Interval("month") - h = h.SubAggregation("the_sum", NewSumAggregation().Field("price")) - h = h.SubAggregation("the_movavg", NewMovAvgAggregation().BucketsPath("the_sum")) - builder = builder.Aggregation("my_date_histo", h) - - res, err := builder.Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res.Hits == nil { - t.Errorf("expected Hits != nil; got: nil") - } - - aggs := res.Aggregations - if aggs == nil { - t.Fatal("expected aggregations != nil; got: nil") - } - - agg, found := aggs.DateHistogram("my_date_histo") - if !found { - t.Fatal("expected sum_monthly_sales aggregation") - } - if agg == nil { - t.Fatal("expected sum_monthly_sales aggregation") - } - if got, want := len(agg.Buckets), 6; got != want { - t.Fatalf("expected %d buckets; got: %d", want, got) - } - - d, found := agg.Buckets[0].MovAvg("the_movavg") - if found { - t.Fatal("expected no the_movavg aggregation") - } - if d != nil { - t.Fatal("expected no the_movavg aggregation") - } - - d, found = agg.Buckets[1].MovAvg("the_movavg") - if found { - t.Fatal("expected no the_movavg aggregation") - } - if d != nil { - t.Fatal("expected no the_movavg aggregation") - } - - d, found = agg.Buckets[2].MovAvg("the_movavg") - if !found { - t.Fatal("expected the_movavg aggregation") - } - if d == nil { - t.Fatal("expected the_movavg aggregation") - } - if d.Value == nil { - t.Fatal("expected the_movavg value") - } - if got, want := *d.Value, float64(1290.0); got != want { - t.Fatalf("expected %v buckets; got: %v", want, got) - } - - d, found = agg.Buckets[3].MovAvg("the_movavg") - if !found { - t.Fatal("expected the_movavg aggregation") - } - if d == nil { - t.Fatal("expected the_movavg aggregation") - } - if d.Value == nil { - t.Fatal("expected the_movavg value") - } - if got, want := *d.Value, float64(695.0); got != want { - t.Fatalf("expected %v buckets; got: %v", want, got) - } - - d, found = agg.Buckets[4].MovAvg("the_movavg") - if !found { - t.Fatal("expected the_movavg aggregation") - } - if d == nil { - t.Fatal("expected the_movavg aggregation") - } - if d.Value == nil { - t.Fatal("expected the_movavg value") - } - if got, want := *d.Value, float64(1279.3333333333333); got != want { - t.Fatalf("expected %v buckets; got: %v", want, got) - } - - d, found = agg.Buckets[5].MovAvg("the_movavg") - if !found { - t.Fatal("expected the_movavg aggregation") - } - if d == nil { - t.Fatal("expected the_movavg aggregation") - } - if d.Value == nil { - t.Fatal("expected the_movavg value") - } - if got, want := *d.Value, float64(1157.0); got != want { - t.Fatalf("expected %v buckets; got: %v", want, got) - } -} - -func TestAggsIntegrationCumulativeSum(t *testing.T) { - //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents - builder := client.Search(). - Index(testOrderIndex). - Type("doc"). - Query(NewMatchAllQuery()). - Pretty(true) - h := NewDateHistogramAggregation().Field("time").Interval("month") - h = h.SubAggregation("sales", NewSumAggregation().Field("price")) - h = h.SubAggregation("cumulative_sales", NewCumulativeSumAggregation().BucketsPath("sales")) - builder = builder.Aggregation("sales_per_month", h) - - res, err := builder.Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res.Hits == nil { - t.Errorf("expected Hits != nil; got: nil") - } - - aggs := res.Aggregations - if aggs == nil { - t.Fatal("expected aggregations != nil; got: nil") - } - - agg, found := aggs.DateHistogram("sales_per_month") - if !found { - t.Fatal("expected sales_per_month aggregation") - } - if agg == nil { - t.Fatal("expected sales_per_month aggregation") - } - if got, want := len(agg.Buckets), 6; got != want { - t.Fatalf("expected %d buckets; got: %d", want, got) - } - - if got, want := agg.Buckets[0].DocCount, int64(1); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[1].DocCount, int64(0); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[2].DocCount, int64(1); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[3].DocCount, int64(3); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[4].DocCount, int64(1); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[5].DocCount, int64(2); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - - d, found := agg.Buckets[0].CumulativeSum("cumulative_sales") - if !found { - t.Fatal("expected cumulative_sales aggregation") - } - if d == nil { - t.Fatal("expected cumulative_sales aggregation") - } - if d.Value == nil { - t.Fatal("expected cumulative_sales value != nil") - } - if got, want := *d.Value, float64(1290.0); got != want { - t.Fatalf("expected cumulative_sales.value=%v; got: %v", want, got) - } - - d, found = agg.Buckets[1].CumulativeSum("cumulative_sales") - if !found { - t.Fatal("expected cumulative_sales aggregation") - } - if d == nil { - t.Fatal("expected cumulative_sales aggregation") - } - if d.Value == nil { - t.Fatal("expected cumulative_sales value != nil") - } - if got, want := *d.Value, float64(1290.0); got != want { - t.Fatalf("expected cumulative_sales.value=%v; got: %v", want, got) - } - - d, found = agg.Buckets[2].CumulativeSum("cumulative_sales") - if !found { - t.Fatal("expected cumulative_sales aggregation") - } - if d == nil { - t.Fatal("expected cumulative_sales aggregation") - } - if d.Value == nil { - t.Fatal("expected cumulative_sales value != nil") - } - if got, want := *d.Value, float64(1390.0); got != want { - t.Fatalf("expected cumulative_sales.value=%v; got: %v", want, got) - } - - d, found = agg.Buckets[3].CumulativeSum("cumulative_sales") - if !found { - t.Fatal("expected cumulative_sales aggregation") - } - if d == nil { - t.Fatal("expected cumulative_sales aggregation") - } - if d.Value == nil { - t.Fatal("expected cumulative_sales value != nil") - } - if got, want := *d.Value, float64(3838.0); got != want { - t.Fatalf("expected cumulative_sales.value=%v; got: %v", want, got) - } - - d, found = agg.Buckets[4].CumulativeSum("cumulative_sales") - if !found { - t.Fatal("expected cumulative_sales aggregation") - } - if d == nil { - t.Fatal("expected cumulative_sales aggregation") - } - if d.Value == nil { - t.Fatal("expected cumulative_sales value != nil") - } - if got, want := *d.Value, float64(4628.0); got != want { - t.Fatalf("expected cumulative_sales.value=%v; got: %v", want, got) - } - - d, found = agg.Buckets[5].CumulativeSum("cumulative_sales") - if !found { - t.Fatal("expected cumulative_sales aggregation") - } - if d == nil { - t.Fatal("expected cumulative_sales aggregation") - } - if d.Value == nil { - t.Fatal("expected cumulative_sales value != nil") - } - if got, want := *d.Value, float64(4696.0); got != want { - t.Fatalf("expected cumulative_sales.value=%v; got: %v", want, got) - } -} - -func TestAggsIntegrationBucketScript(t *testing.T) { - // client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents - builder := client.Search(). - Index(testOrderIndex). - Type("doc"). - Query(NewMatchAllQuery()). - Pretty(true) - h := NewDateHistogramAggregation().Field("time").Interval("month") - h = h.SubAggregation("total_sales", NewSumAggregation().Field("price")) - appleFilter := NewFilterAggregation().Filter(NewTermQuery("manufacturer", "Apple")) - appleFilter = appleFilter.SubAggregation("sales", NewSumAggregation().Field("price")) - h = h.SubAggregation("apple_sales", appleFilter) - h = h.SubAggregation("apple_percentage", - NewBucketScriptAggregation(). - GapPolicy("insert_zeros"). - AddBucketsPath("appleSales", "apple_sales>sales"). - AddBucketsPath("totalSales", "total_sales"). - Script(NewScript("params.appleSales / params.totalSales * 100"))) - builder = builder.Aggregation("sales_per_month", h) - - res, err := builder.Pretty(true).Do(context.TODO()) - if err != nil { - t.Fatalf("%v (maybe scripting is disabled?)", err) - } - if res.Hits == nil { - t.Errorf("expected Hits != nil; got: nil") - } - - aggs := res.Aggregations - if aggs == nil { - t.Fatal("expected aggregations != nil; got: nil") - } - - agg, found := aggs.DateHistogram("sales_per_month") - if !found { - t.Fatal("expected sales_per_month aggregation") - } - if agg == nil { - t.Fatal("expected sales_per_month aggregation") - } - if got, want := len(agg.Buckets), 6; got != want { - t.Fatalf("expected %d buckets; got: %d", want, got) - } - - if got, want := agg.Buckets[0].DocCount, int64(1); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[1].DocCount, int64(0); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[2].DocCount, int64(1); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[3].DocCount, int64(3); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[4].DocCount, int64(1); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[5].DocCount, int64(2); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - - d, found := agg.Buckets[0].BucketScript("apple_percentage") - if !found { - t.Fatal("expected apple_percentage aggregation") - } - if d == nil { - t.Fatal("expected apple_percentage aggregation") - } - if d.Value == nil { - t.Fatal("expected apple_percentage value != nil") - } - if got, want := *d.Value, float64(100.0); got != want { - t.Fatalf("expected apple_percentage.value=%v; got: %v", want, got) - } - - d, found = agg.Buckets[1].BucketScript("apple_percentage") - if !found { - t.Fatal("expected apple_percentage aggregation") - } - if d == nil { - t.Fatal("expected apple_percentage aggregation") - } - if d.Value != nil { - t.Fatal("expected apple_percentage value == nil") - } - - d, found = agg.Buckets[2].BucketScript("apple_percentage") - if !found { - t.Fatal("expected apple_percentage aggregation") - } - if d == nil { - t.Fatal("expected apple_percentage aggregation") - } - if d.Value == nil { - t.Fatal("expected apple_percentage value != nil") - } - if got, want := *d.Value, float64(0.0); got != want { - t.Fatalf("expected apple_percentage.value=%v; got: %v", want, got) - } - - d, found = agg.Buckets[3].BucketScript("apple_percentage") - if !found { - t.Fatal("expected apple_percentage aggregation") - } - if d == nil { - t.Fatal("expected apple_percentage aggregation") - } - if d.Value == nil { - t.Fatal("expected apple_percentage value != nil") - } - if got, want := *d.Value, float64(34.64052287581699); got != want { - t.Fatalf("expected apple_percentage.value=%v; got: %v", want, got) - } - - d, found = agg.Buckets[4].BucketScript("apple_percentage") - if !found { - t.Fatal("expected apple_percentage aggregation") - } - if d == nil { - t.Fatal("expected apple_percentage aggregation") - } - if d.Value == nil { - t.Fatal("expected apple_percentage value != nil") - } - if got, want := *d.Value, float64(0.0); got != want { - t.Fatalf("expected apple_percentage.value=%v; got: %v", want, got) - } - - d, found = agg.Buckets[5].BucketScript("apple_percentage") - if !found { - t.Fatal("expected apple_percentage aggregation") - } - if d == nil { - t.Fatal("expected apple_percentage aggregation") - } - if d.Value == nil { - t.Fatal("expected apple_percentage value != nil") - } - if got, want := *d.Value, float64(0.0); got != want { - t.Fatalf("expected apple_percentage.value=%v; got: %v", want, got) - } -} - -func TestAggsIntegrationBucketSelector(t *testing.T) { - //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents - builder := client.Search(). - Index(testOrderIndex). - Type("doc"). - Query(NewMatchAllQuery()). - Pretty(true) - h := NewDateHistogramAggregation().Field("time").Interval("month") - h = h.SubAggregation("total_sales", NewSumAggregation().Field("price")) - h = h.SubAggregation("sales_bucket_filter", - NewBucketSelectorAggregation(). - AddBucketsPath("totalSales", "total_sales"). - Script(NewScript("params.totalSales <= 100"))) - builder = builder.Aggregation("sales_per_month", h) - - res, err := builder.Do(context.TODO()) - if err != nil { - t.Fatalf("%v (maybe scripting is disabled?)", err) - } - if res.Hits == nil { - t.Errorf("expected Hits != nil; got: nil") - } - - aggs := res.Aggregations - if aggs == nil { - t.Fatal("expected aggregations != nil; got: nil") - } - - agg, found := aggs.DateHistogram("sales_per_month") - if !found { - t.Fatal("expected sales_per_month aggregation") - } - if agg == nil { - t.Fatal("expected sales_per_month aggregation") - } - if got, want := len(agg.Buckets), 2; got != want { - t.Fatalf("expected %d buckets; got: %d", want, got) - } - - if got, want := agg.Buckets[0].DocCount, int64(1); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[1].DocCount, int64(2); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } -} - -func TestAggsIntegrationSerialDiff(t *testing.T) { - //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents - builder := client.Search(). - Index(testOrderIndex). - Type("doc"). - Query(NewMatchAllQuery()). - Pretty(true) - h := NewDateHistogramAggregation().Field("time").Interval("month") - h = h.SubAggregation("sales", NewSumAggregation().Field("price")) - h = h.SubAggregation("the_diff", NewSerialDiffAggregation().BucketsPath("sales").Lag(1)) - builder = builder.Aggregation("sales_per_month", h) - - res, err := builder.Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res.Hits == nil { - t.Errorf("expected Hits != nil; got: nil") - } - - aggs := res.Aggregations - if aggs == nil { - t.Fatal("expected aggregations != nil; got: nil") - } - - agg, found := aggs.DateHistogram("sales_per_month") - if !found { - t.Fatal("expected sales_per_month aggregation") - } - if agg == nil { - t.Fatal("expected sales_per_month aggregation") - } - if got, want := len(agg.Buckets), 6; got != want { - t.Fatalf("expected %d buckets; got: %d", want, got) - } - - if got, want := agg.Buckets[0].DocCount, int64(1); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[1].DocCount, int64(0); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[2].DocCount, int64(1); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[3].DocCount, int64(3); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[4].DocCount, int64(1); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - if got, want := agg.Buckets[5].DocCount, int64(2); got != want { - t.Fatalf("expected DocCount=%d; got: %d", want, got) - } - - d, found := agg.Buckets[0].SerialDiff("the_diff") - if found { - t.Fatal("expected no the_diff aggregation") - } - if d != nil { - t.Fatal("expected no the_diff aggregation") - } - - d, found = agg.Buckets[1].SerialDiff("the_diff") - if found { - t.Fatal("expected no the_diff aggregation") - } - if d != nil { - t.Fatal("expected no the_diff aggregation") - } - - d, found = agg.Buckets[2].SerialDiff("the_diff") - if found { - t.Fatal("expected no the_diff aggregation") - } - if d != nil { - t.Fatal("expected no the_diff aggregation") - } - - d, found = agg.Buckets[3].SerialDiff("the_diff") - if !found { - t.Fatal("expected the_diff aggregation") - } - if d == nil { - t.Fatal("expected the_diff aggregation") - } - if d.Value == nil { - t.Fatal("expected the_diff value != nil") - } - if got, want := *d.Value, float64(2348.0); got != want { - t.Fatalf("expected the_diff.value=%v; got: %v", want, got) - } - - d, found = agg.Buckets[4].SerialDiff("the_diff") - if !found { - t.Fatal("expected the_diff aggregation") - } - if d == nil { - t.Fatal("expected the_diff aggregation") - } - if d.Value == nil { - t.Fatal("expected the_diff value != nil") - } - if got, want := *d.Value, float64(-1658.0); got != want { - t.Fatalf("expected the_diff.value=%v; got: %v", want, got) - } - - d, found = agg.Buckets[5].SerialDiff("the_diff") - if !found { - t.Fatal("expected the_diff aggregation") - } - if d == nil { - t.Fatal("expected the_diff aggregation") - } - if d.Value == nil { - t.Fatal("expected the_diff value != nil") - } - if got, want := *d.Value, float64(-722.0); got != want { - t.Fatalf("expected the_diff.value=%v; got: %v", want, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_aggs_test.go deleted file mode 100644 index f1b6347b3..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_aggs_test.go +++ /dev/null @@ -1,3416 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "strings" - "testing" - "time" -) - -func TestAggs(t *testing.T) { - //client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndex(t) - - /* - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - */ - - tweet1 := tweet{ - User: "olivere", - Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Image: "http://golang.org/doc/gopher/gophercolor.png", - Tags: []string{"golang", "elasticsearch"}, - Location: "48.1333,11.5667", // lat,lon - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", - Retweets: 0, - Message: "Another unrelated topic.", - Tags: []string{"golang"}, - Location: "48.1189,11.4289", // lat,lon - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", - Retweets: 12, - Message: "Cycling is fun.", - Tags: []string{"sports", "cycling"}, - Location: "47.7167,11.7167", // lat,lon - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - - // Terms Aggregate by user name - globalAgg := NewGlobalAggregation() - usersAgg := NewTermsAggregation().Field("user").Size(10).OrderByCountDesc() - retweetsAgg := NewTermsAggregation().Field("retweets").Size(10) - avgRetweetsAgg := NewAvgAggregation().Field("retweets") - avgRetweetsWithMetaAgg := NewAvgAggregation().Field("retweetsMeta").Meta(map[string]interface{}{"meta": true}) - minRetweetsAgg := NewMinAggregation().Field("retweets") - maxRetweetsAgg := NewMaxAggregation().Field("retweets") - sumRetweetsAgg := NewSumAggregation().Field("retweets") - statsRetweetsAgg := NewStatsAggregation().Field("retweets") - extstatsRetweetsAgg := NewExtendedStatsAggregation().Field("retweets") - valueCountRetweetsAgg := NewValueCountAggregation().Field("retweets") - percentilesRetweetsAgg := NewPercentilesAggregation().Field("retweets") - percentileRanksRetweetsAgg := NewPercentileRanksAggregation().Field("retweets").Values(25, 50, 75) - cardinalityAgg := NewCardinalityAggregation().Field("user") - significantTermsAgg := NewSignificantTermsAggregation().Field("message") - samplerAgg := NewSamplerAggregation().SubAggregation("tagged_with", NewTermsAggregation().Field("tags")) - retweetsRangeAgg := NewRangeAggregation().Field("retweets").Lt(10).Between(10, 100).Gt(100) - retweetsKeyedRangeAgg := NewRangeAggregation().Field("retweets").Keyed(true).Lt(10).Between(10, 100).Gt(100) - dateRangeAgg := NewDateRangeAggregation().Field("created").Lt("2012-01-01").Between("2012-01-01", "2013-01-01").Gt("2013-01-01") - missingTagsAgg := NewMissingAggregation().Field("tags") - retweetsHistoAgg := NewHistogramAggregation().Field("retweets").Interval(100) - dateHistoAgg := NewDateHistogramAggregation().Field("created").Interval("year") - retweetsFilterAgg := NewFilterAggregation().Filter( - NewRangeQuery("created").Gte("2012-01-01").Lte("2012-12-31")). - SubAggregation("avgRetweetsSub", NewAvgAggregation().Field("retweets")) - queryFilterAgg := NewFilterAggregation().Filter(NewTermQuery("tags", "golang")) - topTagsHitsAgg := NewTopHitsAggregation().Sort("created", false).Size(5).FetchSource(true) - topTagsAgg := NewTermsAggregation().Field("tags").Size(3).SubAggregation("top_tag_hits", topTagsHitsAgg) - geoBoundsAgg := NewGeoBoundsAggregation().Field("location") - geoHashAgg := NewGeoHashGridAggregation().Field("location").Precision(5) - composite := NewCompositeAggregation().Sources( - NewCompositeAggregationTermsValuesSource("composite_users").Field("user"), - NewCompositeAggregationHistogramValuesSource("composite_retweets", 1).Field("retweets"), - NewCompositeAggregationDateHistogramValuesSource("composite_created", "1m").Field("created"), - ) - - // Run query - builder := client.Search().Index(testIndexName).Query(all).Pretty(true) - builder = builder.Aggregation("global", globalAgg) - builder = builder.Aggregation("users", usersAgg) - builder = builder.Aggregation("retweets", retweetsAgg) - builder = builder.Aggregation("avgRetweets", avgRetweetsAgg) - builder = builder.Aggregation("avgRetweetsWithMeta", avgRetweetsWithMetaAgg) - builder = builder.Aggregation("minRetweets", minRetweetsAgg) - builder = builder.Aggregation("maxRetweets", maxRetweetsAgg) - builder = builder.Aggregation("sumRetweets", sumRetweetsAgg) - builder = builder.Aggregation("statsRetweets", statsRetweetsAgg) - builder = builder.Aggregation("extstatsRetweets", extstatsRetweetsAgg) - builder = builder.Aggregation("valueCountRetweets", valueCountRetweetsAgg) - builder = builder.Aggregation("percentilesRetweets", percentilesRetweetsAgg) - builder = builder.Aggregation("percentileRanksRetweets", percentileRanksRetweetsAgg) - builder = builder.Aggregation("usersCardinality", cardinalityAgg) - builder = builder.Aggregation("significantTerms", significantTermsAgg) - builder = builder.Aggregation("sample", samplerAgg) - builder = builder.Aggregation("retweetsRange", retweetsRangeAgg) - builder = builder.Aggregation("retweetsKeyedRange", retweetsKeyedRangeAgg) - builder = builder.Aggregation("dateRange", dateRangeAgg) - builder = builder.Aggregation("missingTags", missingTagsAgg) - builder = builder.Aggregation("retweetsHisto", retweetsHistoAgg) - builder = builder.Aggregation("dateHisto", dateHistoAgg) - builder = builder.Aggregation("retweetsFilter", retweetsFilterAgg) - builder = builder.Aggregation("queryFilter", queryFilterAgg) - builder = builder.Aggregation("top-tags", topTagsAgg) - builder = builder.Aggregation("viewport", geoBoundsAgg) - builder = builder.Aggregation("geohashed", geoHashAgg) - // Unnamed filters - countByUserAgg := NewFiltersAggregation(). - Filters(NewTermQuery("user", "olivere"), NewTermQuery("user", "sandrae")) - builder = builder.Aggregation("countByUser", countByUserAgg) - // Named filters - countByUserAgg2 := NewFiltersAggregation(). - FilterWithName("olivere", NewTermQuery("user", "olivere")). - FilterWithName("sandrae", NewTermQuery("user", "sandrae")) - builder = builder.Aggregation("countByUser2", countByUserAgg2) - // AvgBucket - dateHisto := NewDateHistogramAggregation().Field("created").Interval("year") - dateHisto = dateHisto.SubAggregation("sumOfRetweets", NewSumAggregation().Field("retweets")) - builder = builder.Aggregation("avgBucketDateHisto", dateHisto) - builder = builder.Aggregation("avgSumOfRetweets", NewAvgBucketAggregation().BucketsPath("avgBucketDateHisto>sumOfRetweets")) - // MinBucket - dateHisto = NewDateHistogramAggregation().Field("created").Interval("year") - dateHisto = dateHisto.SubAggregation("sumOfRetweets", NewSumAggregation().Field("retweets")) - builder = builder.Aggregation("minBucketDateHisto", dateHisto) - builder = builder.Aggregation("minBucketSumOfRetweets", NewMinBucketAggregation().BucketsPath("minBucketDateHisto>sumOfRetweets")) - // MaxBucket - dateHisto = NewDateHistogramAggregation().Field("created").Interval("year") - dateHisto = dateHisto.SubAggregation("sumOfRetweets", NewSumAggregation().Field("retweets")) - builder = builder.Aggregation("maxBucketDateHisto", dateHisto) - builder = builder.Aggregation("maxBucketSumOfRetweets", NewMaxBucketAggregation().BucketsPath("maxBucketDateHisto>sumOfRetweets")) - // SumBucket - dateHisto = NewDateHistogramAggregation().Field("created").Interval("year") - dateHisto = dateHisto.SubAggregation("sumOfRetweets", NewSumAggregation().Field("retweets")) - builder = builder.Aggregation("sumBucketDateHisto", dateHisto) - builder = builder.Aggregation("sumBucketSumOfRetweets", NewSumBucketAggregation().BucketsPath("sumBucketDateHisto>sumOfRetweets")) - // MovAvg - dateHisto = NewDateHistogramAggregation().Field("created").Interval("year") - dateHisto = dateHisto.SubAggregation("sumOfRetweets", NewSumAggregation().Field("retweets")) - dateHisto = dateHisto.SubAggregation("movingAvg", NewMovAvgAggregation().BucketsPath("sumOfRetweets")) - builder = builder.Aggregation("movingAvgDateHisto", dateHisto) - builder = builder.Aggregation("composite", composite) - searchResult, err := builder.Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected Hits != nil; got: nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected Hits.TotalHits = %d; got: %d", 3, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 3 { - t.Errorf("expected len(Hits.Hits) = %d; got: %d", 3, len(searchResult.Hits.Hits)) - } - agg := searchResult.Aggregations - if agg == nil { - t.Fatalf("expected Aggregations != nil; got: nil") - } - - // Search for non-existent aggregate should return (nil, false) - unknownAgg, found := agg.Terms("no-such-aggregate") - if found { - t.Errorf("expected unknown aggregation to not be found; got: %v", found) - } - if unknownAgg != nil { - t.Errorf("expected unknown aggregation to return %v; got %v", nil, unknownAgg) - } - - // Global - globalAggRes, found := agg.Global("global") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if globalAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if globalAggRes.DocCount != 3 { - t.Errorf("expected DocCount = %d; got: %d", 3, globalAggRes.DocCount) - } - - // Search for existent aggregate (by name) should return (aggregate, true) - termsAggRes, found := agg.Terms("users") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if termsAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(termsAggRes.Buckets) != 2 { - t.Fatalf("expected %d; got: %d", 2, len(termsAggRes.Buckets)) - } - if termsAggRes.Buckets[0].Key != "olivere" { - t.Errorf("expected %q; got: %q", "olivere", termsAggRes.Buckets[0].Key) - } - if termsAggRes.Buckets[0].DocCount != 2 { - t.Errorf("expected %d; got: %d", 2, termsAggRes.Buckets[0].DocCount) - } - if termsAggRes.Buckets[1].Key != "sandrae" { - t.Errorf("expected %q; got: %q", "sandrae", termsAggRes.Buckets[1].Key) - } - if termsAggRes.Buckets[1].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, termsAggRes.Buckets[1].DocCount) - } - - // A terms aggregate with keys that are not strings - retweetsAggRes, found := agg.Terms("retweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if retweetsAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(retweetsAggRes.Buckets) != 3 { - t.Fatalf("expected %d; got: %d", 3, len(retweetsAggRes.Buckets)) - } - - if retweetsAggRes.Buckets[0].Key != float64(0) { - t.Errorf("expected %v; got: %v", float64(0), retweetsAggRes.Buckets[0].Key) - } - if got, err := retweetsAggRes.Buckets[0].KeyNumber.Int64(); err != nil { - t.Errorf("expected %d; got: %v", 0, retweetsAggRes.Buckets[0].Key) - } else if got != 0 { - t.Errorf("expected %d; got: %d", 0, got) - } - if retweetsAggRes.Buckets[0].KeyNumber != "0" { - t.Errorf("expected %q; got: %q", "0", retweetsAggRes.Buckets[0].KeyNumber) - } - if retweetsAggRes.Buckets[0].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, retweetsAggRes.Buckets[0].DocCount) - } - - if retweetsAggRes.Buckets[1].Key != float64(12) { - t.Errorf("expected %v; got: %v", float64(12), retweetsAggRes.Buckets[1].Key) - } - if got, err := retweetsAggRes.Buckets[1].KeyNumber.Int64(); err != nil { - t.Errorf("expected %d; got: %v", 0, retweetsAggRes.Buckets[1].KeyNumber) - } else if got != 12 { - t.Errorf("expected %d; got: %d", 12, got) - } - if retweetsAggRes.Buckets[1].KeyNumber != "12" { - t.Errorf("expected %q; got: %q", "12", retweetsAggRes.Buckets[1].KeyNumber) - } - if retweetsAggRes.Buckets[1].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, retweetsAggRes.Buckets[1].DocCount) - } - - if retweetsAggRes.Buckets[2].Key != float64(108) { - t.Errorf("expected %v; got: %v", float64(108), retweetsAggRes.Buckets[2].Key) - } - if got, err := retweetsAggRes.Buckets[2].KeyNumber.Int64(); err != nil { - t.Errorf("expected %d; got: %v", 108, retweetsAggRes.Buckets[2].KeyNumber) - } else if got != 108 { - t.Errorf("expected %d; got: %d", 108, got) - } - if retweetsAggRes.Buckets[2].KeyNumber != "108" { - t.Errorf("expected %q; got: %q", "108", retweetsAggRes.Buckets[2].KeyNumber) - } - if retweetsAggRes.Buckets[2].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, retweetsAggRes.Buckets[2].DocCount) - } - - // avgRetweets - avgAggRes, found := agg.Avg("avgRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if avgAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if avgAggRes.Value == nil { - t.Fatalf("expected != nil; got: %v", *avgAggRes.Value) - } - if *avgAggRes.Value != 40.0 { - t.Errorf("expected %v; got: %v", 40.0, *avgAggRes.Value) - } - - // avgRetweetsWithMeta - avgMetaAggRes, found := agg.Avg("avgRetweetsWithMeta") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if avgMetaAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if avgMetaAggRes.Meta == nil { - t.Fatalf("expected != nil; got: %v", avgMetaAggRes.Meta) - } - metaDataValue, found := avgMetaAggRes.Meta["meta"] - if !found { - t.Fatalf("expected to return meta data key %q; got: %v", "meta", found) - } - if flag, ok := metaDataValue.(bool); !ok { - t.Fatalf("expected to return meta data key type %T; got: %T", true, metaDataValue) - } else if flag != true { - t.Fatalf("expected to return meta data key value %v; got: %v", true, flag) - } - - // minRetweets - minAggRes, found := agg.Min("minRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if minAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if minAggRes.Value == nil { - t.Fatalf("expected != nil; got: %v", *minAggRes.Value) - } - if *minAggRes.Value != 0.0 { - t.Errorf("expected %v; got: %v", 0.0, *minAggRes.Value) - } - - // maxRetweets - maxAggRes, found := agg.Max("maxRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if maxAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if maxAggRes.Value == nil { - t.Fatalf("expected != nil; got: %v", *maxAggRes.Value) - } - if *maxAggRes.Value != 108.0 { - t.Errorf("expected %v; got: %v", 108.0, *maxAggRes.Value) - } - - // sumRetweets - sumAggRes, found := agg.Sum("sumRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if sumAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if sumAggRes.Value == nil { - t.Fatalf("expected != nil; got: %v", *sumAggRes.Value) - } - if *sumAggRes.Value != 120.0 { - t.Errorf("expected %v; got: %v", 120.0, *sumAggRes.Value) - } - - // statsRetweets - statsAggRes, found := agg.Stats("statsRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if statsAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if statsAggRes.Count != 3 { - t.Errorf("expected %d; got: %d", 3, statsAggRes.Count) - } - if statsAggRes.Min == nil { - t.Fatalf("expected != nil; got: %v", *statsAggRes.Min) - } - if *statsAggRes.Min != 0.0 { - t.Errorf("expected %v; got: %v", 0.0, *statsAggRes.Min) - } - if statsAggRes.Max == nil { - t.Fatalf("expected != nil; got: %v", *statsAggRes.Max) - } - if *statsAggRes.Max != 108.0 { - t.Errorf("expected %v; got: %v", 108.0, *statsAggRes.Max) - } - if statsAggRes.Avg == nil { - t.Fatalf("expected != nil; got: %v", *statsAggRes.Avg) - } - if *statsAggRes.Avg != 40.0 { - t.Errorf("expected %v; got: %v", 40.0, *statsAggRes.Avg) - } - if statsAggRes.Sum == nil { - t.Fatalf("expected != nil; got: %v", *statsAggRes.Sum) - } - if *statsAggRes.Sum != 120.0 { - t.Errorf("expected %v; got: %v", 120.0, *statsAggRes.Sum) - } - - // extstatsRetweets - extStatsAggRes, found := agg.ExtendedStats("extstatsRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if extStatsAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if extStatsAggRes.Count != 3 { - t.Errorf("expected %d; got: %d", 3, extStatsAggRes.Count) - } - if extStatsAggRes.Min == nil { - t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Min) - } - if *extStatsAggRes.Min != 0.0 { - t.Errorf("expected %v; got: %v", 0.0, *extStatsAggRes.Min) - } - if extStatsAggRes.Max == nil { - t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Max) - } - if *extStatsAggRes.Max != 108.0 { - t.Errorf("expected %v; got: %v", 108.0, *extStatsAggRes.Max) - } - if extStatsAggRes.Avg == nil { - t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Avg) - } - if *extStatsAggRes.Avg != 40.0 { - t.Errorf("expected %v; got: %v", 40.0, *extStatsAggRes.Avg) - } - if extStatsAggRes.Sum == nil { - t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Sum) - } - if *extStatsAggRes.Sum != 120.0 { - t.Errorf("expected %v; got: %v", 120.0, *extStatsAggRes.Sum) - } - if extStatsAggRes.SumOfSquares == nil { - t.Fatalf("expected != nil; got: %v", *extStatsAggRes.SumOfSquares) - } - if *extStatsAggRes.SumOfSquares != 11808.0 { - t.Errorf("expected %v; got: %v", 11808.0, *extStatsAggRes.SumOfSquares) - } - if extStatsAggRes.Variance == nil { - t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Variance) - } - if *extStatsAggRes.Variance != 2336.0 { - t.Errorf("expected %v; got: %v", 2336.0, *extStatsAggRes.Variance) - } - if extStatsAggRes.StdDeviation == nil { - t.Fatalf("expected != nil; got: %v", *extStatsAggRes.StdDeviation) - } - if *extStatsAggRes.StdDeviation != 48.33218389437829 { - t.Errorf("expected %v; got: %v", 48.33218389437829, *extStatsAggRes.StdDeviation) - } - - // valueCountRetweets - valueCountAggRes, found := agg.ValueCount("valueCountRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if valueCountAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if valueCountAggRes.Value == nil { - t.Fatalf("expected != nil; got: %v", *valueCountAggRes.Value) - } - if *valueCountAggRes.Value != 3.0 { - t.Errorf("expected %v; got: %v", 3.0, *valueCountAggRes.Value) - } - - // percentilesRetweets - percentilesAggRes, found := agg.Percentiles("percentilesRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if percentilesAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - // ES 1.4.x returns 7: {"1.0":...} - // ES 1.5.0 returns 14: {"1.0":..., "1.0_as_string":...} - // So we're relaxing the test here. - if len(percentilesAggRes.Values) == 0 { - t.Errorf("expected at least %d value; got: %d\nValues are: %#v", 1, len(percentilesAggRes.Values), percentilesAggRes.Values) - } - if _, found := percentilesAggRes.Values["0.0"]; found { - t.Errorf("expected %v; got: %v", false, found) - } - if percentilesAggRes.Values["1.0"] != 0.24 { - t.Errorf("expected %v; got: %v", 0.24, percentilesAggRes.Values["1.0"]) - } - if percentilesAggRes.Values["25.0"] != 6.0 { - t.Errorf("expected %v; got: %v", 6.0, percentilesAggRes.Values["25.0"]) - } - if percentilesAggRes.Values["99.0"] != 106.08 { - t.Errorf("expected %v; got: %v", 106.08, percentilesAggRes.Values["99.0"]) - } - - // percentileRanksRetweets - percentileRanksAggRes, found := agg.PercentileRanks("percentileRanksRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if percentileRanksAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(percentileRanksAggRes.Values) == 0 { - t.Errorf("expected at least %d value; got %d\nValues are: %#v", 1, len(percentileRanksAggRes.Values), percentileRanksAggRes.Values) - } - if _, found := percentileRanksAggRes.Values["0.0"]; found { - t.Errorf("expected %v; got: %v", true, found) - } - if percentileRanksAggRes.Values["25.0"] != 21.180555555555557 { - t.Errorf("expected %v; got: %v", 21.180555555555557, percentileRanksAggRes.Values["25.0"]) - } - if percentileRanksAggRes.Values["50.0"] != 29.86111111111111 { - t.Errorf("expected %v; got: %v", 29.86111111111111, percentileRanksAggRes.Values["50.0"]) - } - if percentileRanksAggRes.Values["75.0"] != 38.54166666666667 { - t.Errorf("expected %v; got: %v", 38.54166666666667, percentileRanksAggRes.Values["75.0"]) - } - - // usersCardinality - cardAggRes, found := agg.Cardinality("usersCardinality") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if cardAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if cardAggRes.Value == nil { - t.Fatalf("expected != nil; got: %v", *cardAggRes.Value) - } - if *cardAggRes.Value != 2 { - t.Errorf("expected %v; got: %v", 2, *cardAggRes.Value) - } - - // retweetsFilter - filterAggRes, found := agg.Filter("retweetsFilter") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if filterAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if filterAggRes.DocCount != 2 { - t.Fatalf("expected %v; got: %v", 2, filterAggRes.DocCount) - } - - // Retrieve sub-aggregation - avgRetweetsAggRes, found := filterAggRes.Avg("avgRetweetsSub") - if !found { - t.Error("expected sub-aggregation \"avgRetweets\" to be found; got false") - } - if avgRetweetsAggRes == nil { - t.Fatal("expected sub-aggregation \"avgRetweets\"; got nil") - } - if avgRetweetsAggRes.Value == nil { - t.Fatalf("expected != nil; got: %v", avgRetweetsAggRes.Value) - } - if *avgRetweetsAggRes.Value != 54.0 { - t.Errorf("expected %v; got: %v", 54.0, *avgRetweetsAggRes.Value) - } - - // queryFilter - queryFilterAggRes, found := agg.Filter("queryFilter") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if queryFilterAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if queryFilterAggRes.DocCount != 2 { - t.Fatalf("expected %v; got: %v", 2, queryFilterAggRes.DocCount) - } - - // significantTerms - stAggRes, found := agg.SignificantTerms("significantTerms") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if stAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if stAggRes.DocCount != 3 { - t.Errorf("expected %v; got: %v", 3, stAggRes.DocCount) - } - if len(stAggRes.Buckets) != 0 { - t.Errorf("expected %v; got: %v", 0, len(stAggRes.Buckets)) - } - - // sampler - samplerAggRes, found := agg.Sampler("sample") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if samplerAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if samplerAggRes.DocCount != 3 { - t.Errorf("expected %v; got: %v", 3, samplerAggRes.DocCount) - } - sub, found := samplerAggRes.Aggregations["tagged_with"] - if !found { - t.Fatalf("expected sub aggregation %q", "tagged_with") - } - if sub == nil { - t.Fatalf("expected sub aggregation %q; got: %v", "tagged_with", sub) - } - - // retweetsRange - rangeAggRes, found := agg.Range("retweetsRange") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if rangeAggRes == nil { - t.Fatal("expected != nil; got: nil") - } - if len(rangeAggRes.Buckets) != 3 { - t.Fatalf("expected %d; got: %d", 3, len(rangeAggRes.Buckets)) - } - if rangeAggRes.Buckets[0].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, rangeAggRes.Buckets[0].DocCount) - } - if rangeAggRes.Buckets[1].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, rangeAggRes.Buckets[1].DocCount) - } - if rangeAggRes.Buckets[2].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, rangeAggRes.Buckets[2].DocCount) - } - - // retweetsKeyedRange - keyedRangeAggRes, found := agg.KeyedRange("retweetsKeyedRange") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if keyedRangeAggRes == nil { - t.Fatal("expected != nil; got: nil") - } - if len(keyedRangeAggRes.Buckets) != 3 { - t.Fatalf("expected %d; got: %d", 3, len(keyedRangeAggRes.Buckets)) - } - _, found = keyedRangeAggRes.Buckets["no-such-key"] - if found { - t.Fatalf("expected bucket to not be found; got: %v", found) - } - bucket, found := keyedRangeAggRes.Buckets["*-10.0"] - if !found { - t.Fatalf("expected bucket to be found; got: %v", found) - } - if bucket.DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, bucket.DocCount) - } - bucket, found = keyedRangeAggRes.Buckets["10.0-100.0"] - if !found { - t.Fatalf("expected bucket to be found; got: %v", found) - } - if bucket.DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, bucket.DocCount) - } - bucket, found = keyedRangeAggRes.Buckets["100.0-*"] - if !found { - t.Fatalf("expected bucket to be found; got: %v", found) - } - if bucket.DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, bucket.DocCount) - } - - // dateRange - dateRangeRes, found := agg.DateRange("dateRange") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if dateRangeRes == nil { - t.Fatal("expected != nil; got: nil") - } - if dateRangeRes.Buckets[0].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, dateRangeRes.Buckets[0].DocCount) - } - if dateRangeRes.Buckets[0].From != nil { - t.Fatal("expected From to be nil") - } - if dateRangeRes.Buckets[0].To == nil { - t.Fatal("expected To to be != nil") - } - if *dateRangeRes.Buckets[0].To != 1.325376e+12 { - t.Errorf("expected %v; got: %v", 1.325376e+12, *dateRangeRes.Buckets[0].To) - } - if dateRangeRes.Buckets[0].ToAsString != "2012-01-01T00:00:00.000Z" { - t.Errorf("expected %q; got: %q", "2012-01-01T00:00:00.000Z", dateRangeRes.Buckets[0].ToAsString) - } - if dateRangeRes.Buckets[1].DocCount != 2 { - t.Errorf("expected %d; got: %d", 2, dateRangeRes.Buckets[1].DocCount) - } - if dateRangeRes.Buckets[1].From == nil { - t.Fatal("expected From to be != nil") - } - if *dateRangeRes.Buckets[1].From != 1.325376e+12 { - t.Errorf("expected From = %v; got: %v", 1.325376e+12, *dateRangeRes.Buckets[1].From) - } - if dateRangeRes.Buckets[1].FromAsString != "2012-01-01T00:00:00.000Z" { - t.Errorf("expected FromAsString = %q; got: %q", "2012-01-01T00:00:00.000Z", dateRangeRes.Buckets[1].FromAsString) - } - if dateRangeRes.Buckets[1].To == nil { - t.Fatal("expected To to be != nil") - } - if *dateRangeRes.Buckets[1].To != 1.3569984e+12 { - t.Errorf("expected To = %v; got: %v", 1.3569984e+12, *dateRangeRes.Buckets[1].To) - } - if dateRangeRes.Buckets[1].ToAsString != "2013-01-01T00:00:00.000Z" { - t.Errorf("expected ToAsString = %q; got: %q", "2013-01-01T00:00:00.000Z", dateRangeRes.Buckets[1].ToAsString) - } - if dateRangeRes.Buckets[2].DocCount != 0 { - t.Errorf("expected %d; got: %d", 0, dateRangeRes.Buckets[2].DocCount) - } - if dateRangeRes.Buckets[2].To != nil { - t.Fatal("expected To to be nil") - } - if dateRangeRes.Buckets[2].From == nil { - t.Fatal("expected From to be != nil") - } - if *dateRangeRes.Buckets[2].From != 1.3569984e+12 { - t.Errorf("expected %v; got: %v", 1.3569984e+12, *dateRangeRes.Buckets[2].From) - } - if dateRangeRes.Buckets[2].FromAsString != "2013-01-01T00:00:00.000Z" { - t.Errorf("expected %q; got: %q", "2013-01-01T00:00:00.000Z", dateRangeRes.Buckets[2].FromAsString) - } - - // missingTags - missingRes, found := agg.Missing("missingTags") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if missingRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if missingRes.DocCount != 0 { - t.Errorf("expected searchResult.Aggregations[\"missingTags\"].DocCount = %v; got %v", 0, missingRes.DocCount) - } - - // retweetsHisto - histoRes, found := agg.Histogram("retweetsHisto") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if histoRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(histoRes.Buckets) != 2 { - t.Fatalf("expected %d; got: %d", 2, len(histoRes.Buckets)) - } - if histoRes.Buckets[0].DocCount != 2 { - t.Errorf("expected %d; got: %d", 2, histoRes.Buckets[0].DocCount) - } - if histoRes.Buckets[0].Key != 0.0 { - t.Errorf("expected %v; got: %v", 0.0, histoRes.Buckets[0].Key) - } - if histoRes.Buckets[1].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, histoRes.Buckets[1].DocCount) - } - if histoRes.Buckets[1].Key != 100.0 { - t.Errorf("expected %v; got: %+v", 100.0, histoRes.Buckets[1].Key) - } - - // dateHisto - dateHistoRes, found := agg.DateHistogram("dateHisto") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if dateHistoRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(dateHistoRes.Buckets) != 2 { - t.Fatalf("expected %d; got: %d", 2, len(dateHistoRes.Buckets)) - } - if dateHistoRes.Buckets[0].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, dateHistoRes.Buckets[0].DocCount) - } - if dateHistoRes.Buckets[0].Key != 1.29384e+12 { - t.Errorf("expected %v; got: %v", 1.29384e+12, dateHistoRes.Buckets[0].Key) - } - if dateHistoRes.Buckets[0].KeyAsString == nil { - t.Fatalf("expected != nil; got: %q", dateHistoRes.Buckets[0].KeyAsString) - } - if *dateHistoRes.Buckets[0].KeyAsString != "2011-01-01T00:00:00.000Z" { - t.Errorf("expected %q; got: %q", "2011-01-01T00:00:00.000Z", *dateHistoRes.Buckets[0].KeyAsString) - } - if dateHistoRes.Buckets[1].DocCount != 2 { - t.Errorf("expected %d; got: %d", 2, dateHistoRes.Buckets[1].DocCount) - } - if dateHistoRes.Buckets[1].Key != 1.325376e+12 { - t.Errorf("expected %v; got: %v", 1.325376e+12, dateHistoRes.Buckets[1].Key) - } - if dateHistoRes.Buckets[1].KeyAsString == nil { - t.Fatalf("expected != nil; got: %q", dateHistoRes.Buckets[1].KeyAsString) - } - if *dateHistoRes.Buckets[1].KeyAsString != "2012-01-01T00:00:00.000Z" { - t.Errorf("expected %q; got: %q", "2012-01-01T00:00:00.000Z", *dateHistoRes.Buckets[1].KeyAsString) - } - - // topHits - topTags, found := agg.Terms("top-tags") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if topTags == nil { - t.Fatalf("expected != nil; got: nil") - } - if topTags.DocCountErrorUpperBound != 0 { - t.Errorf("expected %v; got: %v", 0, topTags.DocCountErrorUpperBound) - } - if topTags.SumOfOtherDocCount != 1 { - t.Errorf("expected %v; got: %v", 1, topTags.SumOfOtherDocCount) - } - if len(topTags.Buckets) != 3 { - t.Fatalf("expected %d; got: %d", 3, len(topTags.Buckets)) - } - if topTags.Buckets[0].DocCount != 2 { - t.Errorf("expected %d; got: %d", 2, topTags.Buckets[0].DocCount) - } - if topTags.Buckets[0].Key != "golang" { - t.Errorf("expected %v; got: %v", "golang", topTags.Buckets[0].Key) - } - topHits, found := topTags.Buckets[0].TopHits("top_tag_hits") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if topHits == nil { - t.Fatal("expected != nil; got: nil") - } - if topHits.Hits == nil { - t.Fatalf("expected != nil; got: nil") - } - if topHits.Hits.TotalHits != 2 { - t.Errorf("expected %d; got: %d", 2, topHits.Hits.TotalHits) - } - if topHits.Hits.Hits == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(topHits.Hits.Hits) != 2 { - t.Fatalf("expected %d; got: %d", 2, len(topHits.Hits.Hits)) - } - hit := topHits.Hits.Hits[0] - if !found { - t.Fatalf("expected %v; got: %v", true, found) - } - if hit == nil { - t.Fatal("expected != nil; got: nil") - } - var tw tweet - if err := json.Unmarshal(*hit.Source, &tw); err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if tw.Message != "Welcome to Golang and Elasticsearch." { - t.Errorf("expected %q; got: %q", "Welcome to Golang and Elasticsearch.", tw.Message) - } - if topTags.Buckets[1].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, topTags.Buckets[1].DocCount) - } - if topTags.Buckets[1].Key != "cycling" { - t.Errorf("expected %v; got: %v", "cycling", topTags.Buckets[1].Key) - } - topHits, found = topTags.Buckets[1].TopHits("top_tag_hits") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if topHits == nil { - t.Fatal("expected != nil; got: nil") - } - if topHits.Hits == nil { - t.Fatal("expected != nil; got nil") - } - if topHits.Hits.TotalHits != 1 { - t.Errorf("expected %d; got: %d", 1, topHits.Hits.TotalHits) - } - if topTags.Buckets[2].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, topTags.Buckets[2].DocCount) - } - if topTags.Buckets[2].Key != "elasticsearch" { - t.Errorf("expected %v; got: %v", "elasticsearch", topTags.Buckets[2].Key) - } - topHits, found = topTags.Buckets[2].TopHits("top_tag_hits") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if topHits == nil { - t.Fatal("expected != nil; got: nil") - } - if topHits.Hits == nil { - t.Fatal("expected != nil; got: nil") - } - if topHits.Hits.TotalHits != 1 { - t.Errorf("expected %d; got: %d", 1, topHits.Hits.TotalHits) - } - - // viewport via geo_bounds (1.3.0 has an error in that it doesn't output the aggregation name) - geoBoundsRes, found := agg.GeoBounds("viewport") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if geoBoundsRes == nil { - t.Fatalf("expected != nil; got: nil") - } - - // geohashed via geohash - geoHashRes, found := agg.GeoHash("geohashed") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if geoHashRes == nil { - t.Fatalf("expected != nil; got: nil") - } - - // Filters agg "countByUser" (unnamed) - countByUserAggRes, found := agg.Filters("countByUser") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if countByUserAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(countByUserAggRes.Buckets) != 2 { - t.Fatalf("expected %d; got: %d", 2, len(countByUserAggRes.Buckets)) - } - if len(countByUserAggRes.NamedBuckets) != 0 { - t.Fatalf("expected %d; got: %d", 0, len(countByUserAggRes.NamedBuckets)) - } - if countByUserAggRes.Buckets[0].DocCount != 2 { - t.Errorf("expected %d; got: %d", 2, countByUserAggRes.Buckets[0].DocCount) - } - if countByUserAggRes.Buckets[1].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, countByUserAggRes.Buckets[1].DocCount) - } - - // Filters agg "countByUser2" (named) - countByUser2AggRes, found := agg.Filters("countByUser2") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if countByUser2AggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(countByUser2AggRes.Buckets) != 0 { - t.Fatalf("expected %d; got: %d", 0, len(countByUser2AggRes.Buckets)) - } - if len(countByUser2AggRes.NamedBuckets) != 2 { - t.Fatalf("expected %d; got: %d", 2, len(countByUser2AggRes.NamedBuckets)) - } - b, found := countByUser2AggRes.NamedBuckets["olivere"] - if !found { - t.Fatalf("expected bucket %q; got: %v", "olivere", found) - } - if b == nil { - t.Fatalf("expected bucket %q; got: %v", "olivere", b) - } - if b.DocCount != 2 { - t.Errorf("expected %d; got: %d", 2, b.DocCount) - } - b, found = countByUser2AggRes.NamedBuckets["sandrae"] - if !found { - t.Fatalf("expected bucket %q; got: %v", "sandrae", found) - } - if b == nil { - t.Fatalf("expected bucket %q; got: %v", "sandrae", b) - } - if b.DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, b.DocCount) - } - - compositeAggRes, found := agg.Composite("composite") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if compositeAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if want, have := 3, len(compositeAggRes.Buckets); want != have { - t.Fatalf("expected %d; got: %d", want, have) - } -} - -// TestAggsMarshal ensures that marshaling aggregations back into a string -// does not yield base64 encoded data. See https://github.com/olivere/elastic/issues/51 -// and https://groups.google.com/forum/#!topic/Golang-Nuts/38ShOlhxAYY for details. -func TestAggsMarshal(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", - Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Image: "http://golang.org/doc/gopher/gophercolor.png", - Tags: []string{"golang", "elasticsearch"}, - Location: "48.1333,11.5667", // lat,lon - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - dhagg := NewDateHistogramAggregation().Field("created").Interval("year") - - // Run query - builder := client.Search().Index(testIndexName).Query(all) - builder = builder.Aggregation("dhagg", dhagg) - searchResult, err := builder.Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.TotalHits() != 1 { - t.Errorf("expected Hits.TotalHits = %d; got: %d", 1, searchResult.TotalHits()) - } - if _, found := searchResult.Aggregations["dhagg"]; !found { - t.Fatalf("expected aggregation %q", "dhagg") - } - buf, err := json.Marshal(searchResult) - if err != nil { - t.Fatal(err) - } - s := string(buf) - if i := strings.Index(s, `{"dhagg":{"buckets":[{"key_as_string":"2012-01-01`); i < 0 { - t.Errorf("expected to serialize aggregation into string; got: %v", s) - } -} - -func TestAggsMetricsMin(t *testing.T) { - s := `{ - "min_price": { - "value": 10 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Min("min_price") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(10) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(10), *agg.Value) - } -} - -func TestAggsMetricsMax(t *testing.T) { - s := `{ - "max_price": { - "value": 35 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Max("max_price") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(35) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(35), *agg.Value) - } -} - -func TestAggsMetricsSum(t *testing.T) { - s := `{ - "intraday_return": { - "value": 2.18 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Sum("intraday_return") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(2.18) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(2.18), *agg.Value) - } -} - -func TestAggsMetricsAvg(t *testing.T) { - s := `{ - "avg_grade": { - "value": 75 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Avg("avg_grade") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(75) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(75), *agg.Value) - } -} - -func TestAggsMetricsValueCount(t *testing.T) { - s := `{ - "grades_count": { - "value": 10 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.ValueCount("grades_count") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(10) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(10), *agg.Value) - } -} - -func TestAggsMetricsCardinality(t *testing.T) { - s := `{ - "author_count": { - "value": 12 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Cardinality("author_count") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(12) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(12), *agg.Value) - } -} - -func TestAggsMetricsStats(t *testing.T) { - s := `{ - "grades_stats": { - "count": 6, - "min": 60, - "max": 98, - "avg": 78.5, - "sum": 471 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Stats("grades_stats") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Count != int64(6) { - t.Fatalf("expected aggregation Count = %v; got: %v", int64(6), agg.Count) - } - if agg.Min == nil { - t.Fatalf("expected aggregation Min != nil; got: %v", agg.Min) - } - if *agg.Min != float64(60) { - t.Fatalf("expected aggregation Min = %v; got: %v", float64(60), *agg.Min) - } - if agg.Max == nil { - t.Fatalf("expected aggregation Max != nil; got: %v", agg.Max) - } - if *agg.Max != float64(98) { - t.Fatalf("expected aggregation Max = %v; got: %v", float64(98), *agg.Max) - } - if agg.Avg == nil { - t.Fatalf("expected aggregation Avg != nil; got: %v", agg.Avg) - } - if *agg.Avg != float64(78.5) { - t.Fatalf("expected aggregation Avg = %v; got: %v", float64(78.5), *agg.Avg) - } - if agg.Sum == nil { - t.Fatalf("expected aggregation Sum != nil; got: %v", agg.Sum) - } - if *agg.Sum != float64(471) { - t.Fatalf("expected aggregation Sum = %v; got: %v", float64(471), *agg.Sum) - } -} - -func TestAggsMetricsExtendedStats(t *testing.T) { - s := `{ - "grades_stats": { - "count": 6, - "min": 72, - "max": 117.6, - "avg": 94.2, - "sum": 565.2, - "sum_of_squares": 54551.51999999999, - "variance": 218.2799999999976, - "std_deviation": 14.774302013969987 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.ExtendedStats("grades_stats") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Count != int64(6) { - t.Fatalf("expected aggregation Count = %v; got: %v", int64(6), agg.Count) - } - if agg.Min == nil { - t.Fatalf("expected aggregation Min != nil; got: %v", agg.Min) - } - if *agg.Min != float64(72) { - t.Fatalf("expected aggregation Min = %v; got: %v", float64(72), *agg.Min) - } - if agg.Max == nil { - t.Fatalf("expected aggregation Max != nil; got: %v", agg.Max) - } - if *agg.Max != float64(117.6) { - t.Fatalf("expected aggregation Max = %v; got: %v", float64(117.6), *agg.Max) - } - if agg.Avg == nil { - t.Fatalf("expected aggregation Avg != nil; got: %v", agg.Avg) - } - if *agg.Avg != float64(94.2) { - t.Fatalf("expected aggregation Avg = %v; got: %v", float64(94.2), *agg.Avg) - } - if agg.Sum == nil { - t.Fatalf("expected aggregation Sum != nil; got: %v", agg.Sum) - } - if *agg.Sum != float64(565.2) { - t.Fatalf("expected aggregation Sum = %v; got: %v", float64(565.2), *agg.Sum) - } - if agg.SumOfSquares == nil { - t.Fatalf("expected aggregation sum_of_squares != nil; got: %v", agg.SumOfSquares) - } - if *agg.SumOfSquares != float64(54551.51999999999) { - t.Fatalf("expected aggregation sum_of_squares = %v; got: %v", float64(54551.51999999999), *agg.SumOfSquares) - } - if agg.Variance == nil { - t.Fatalf("expected aggregation Variance != nil; got: %v", agg.Variance) - } - if *agg.Variance != float64(218.2799999999976) { - t.Fatalf("expected aggregation Variance = %v; got: %v", float64(218.2799999999976), *agg.Variance) - } - if agg.StdDeviation == nil { - t.Fatalf("expected aggregation StdDeviation != nil; got: %v", agg.StdDeviation) - } - if *agg.StdDeviation != float64(14.774302013969987) { - t.Fatalf("expected aggregation StdDeviation = %v; got: %v", float64(14.774302013969987), *agg.StdDeviation) - } -} - -func TestAggsMatrixStats(t *testing.T) { - s := `{ - "matrixstats": { - "fields": [{ - "name": "income", - "count": 50, - "mean": 51985.1, - "variance": 7.383377037755103E7, - "skewness": 0.5595114003506483, - "kurtosis": 2.5692365287787124, - "covariance": { - "income": 7.383377037755103E7, - "poverty": -21093.65836734694 - }, - "correlation": { - "income": 1.0, - "poverty": -0.8352655256272504 - } - }, { - "name": "poverty", - "count": 51, - "mean": 12.732000000000001, - "variance": 8.637730612244896, - "skewness": 0.4516049811903419, - "kurtosis": 2.8615929677997767, - "covariance": { - "income": -21093.65836734694, - "poverty": 8.637730612244896 - }, - "correlation": { - "income": -0.8352655256272504, - "poverty": 1.0 - } - }] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.MatrixStats("matrixstats") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if want, got := 2, len(agg.Fields); want != got { - t.Fatalf("expected aggregaton len(Fields) = %v; got: %v", want, got) - } - field := agg.Fields[0] - if want, got := "income", field.Name; want != got { - t.Fatalf("expected aggregation field name == %q; got: %q", want, got) - } - if want, got := int64(50), field.Count; want != got { - t.Fatalf("expected aggregation field count == %v; got: %v", want, got) - } - if want, got := 51985.1, field.Mean; want != got { - t.Fatalf("expected aggregation field mean == %v; got: %v", want, got) - } - if want, got := 7.383377037755103e7, field.Variance; want != got { - t.Fatalf("expected aggregation field variance == %v; got: %v", want, got) - } - if want, got := 0.5595114003506483, field.Skewness; want != got { - t.Fatalf("expected aggregation field skewness == %v; got: %v", want, got) - } - if want, got := 2.5692365287787124, field.Kurtosis; want != got { - t.Fatalf("expected aggregation field kurtosis == %v; got: %v", want, got) - } - if field.Covariance == nil { - t.Fatalf("expected aggregation field covariance != nil; got: %v", nil) - } - if want, got := 7.383377037755103e7, field.Covariance["income"]; want != got { - t.Fatalf("expected aggregation field covariance == %v; got: %v", want, got) - } - if want, got := -21093.65836734694, field.Covariance["poverty"]; want != got { - t.Fatalf("expected aggregation field covariance == %v; got: %v", want, got) - } - if field.Correlation == nil { - t.Fatalf("expected aggregation field correlation != nil; got: %v", nil) - } - if want, got := 1.0, field.Correlation["income"]; want != got { - t.Fatalf("expected aggregation field correlation == %v; got: %v", want, got) - } - if want, got := -0.8352655256272504, field.Correlation["poverty"]; want != got { - t.Fatalf("expected aggregation field correlation == %v; got: %v", want, got) - } - field = agg.Fields[1] - if want, got := "poverty", field.Name; want != got { - t.Fatalf("expected aggregation field name == %q; got: %q", want, got) - } - if want, got := int64(51), field.Count; want != got { - t.Fatalf("expected aggregation field count == %v; got: %v", want, got) - } -} - -func TestAggsMetricsPercentiles(t *testing.T) { - s := `{ - "load_time_outlier": { - "values" : { - "1.0": 15, - "5.0": 20, - "25.0": 23, - "50.0": 25, - "75.0": 29, - "95.0": 60, - "99.0": 150 - } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Percentiles("load_time_outlier") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Values == nil { - t.Fatalf("expected aggregation Values != nil; got: %v", agg.Values) - } - if len(agg.Values) != 7 { - t.Fatalf("expected %d aggregation Values; got: %d", 7, len(agg.Values)) - } - if agg.Values["1.0"] != float64(15) { - t.Errorf("expected aggregation value for \"1.0\" = %v; got: %v", float64(15), agg.Values["1.0"]) - } - if agg.Values["5.0"] != float64(20) { - t.Errorf("expected aggregation value for \"5.0\" = %v; got: %v", float64(20), agg.Values["5.0"]) - } - if agg.Values["25.0"] != float64(23) { - t.Errorf("expected aggregation value for \"25.0\" = %v; got: %v", float64(23), agg.Values["25.0"]) - } - if agg.Values["50.0"] != float64(25) { - t.Errorf("expected aggregation value for \"50.0\" = %v; got: %v", float64(25), agg.Values["50.0"]) - } - if agg.Values["75.0"] != float64(29) { - t.Errorf("expected aggregation value for \"75.0\" = %v; got: %v", float64(29), agg.Values["75.0"]) - } - if agg.Values["95.0"] != float64(60) { - t.Errorf("expected aggregation value for \"95.0\" = %v; got: %v", float64(60), agg.Values["95.0"]) - } - if agg.Values["99.0"] != float64(150) { - t.Errorf("expected aggregation value for \"99.0\" = %v; got: %v", float64(150), agg.Values["99.0"]) - } -} - -func TestAggsMetricsPercentileRanks(t *testing.T) { - s := `{ - "load_time_outlier": { - "values" : { - "15": 92, - "30": 100 - } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.PercentileRanks("load_time_outlier") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Values == nil { - t.Fatalf("expected aggregation Values != nil; got: %v", agg.Values) - } - if len(agg.Values) != 2 { - t.Fatalf("expected %d aggregation Values; got: %d", 7, len(agg.Values)) - } - if agg.Values["15"] != float64(92) { - t.Errorf("expected aggregation value for \"15\" = %v; got: %v", float64(92), agg.Values["15"]) - } - if agg.Values["30"] != float64(100) { - t.Errorf("expected aggregation value for \"30\" = %v; got: %v", float64(100), agg.Values["30"]) - } -} - -func TestAggsMetricsTopHits(t *testing.T) { - s := `{ - "top-tags": { - "buckets": [ - { - "key": "windows-7", - "doc_count": 25365, - "top_tags_hits": { - "hits": { - "total": 25365, - "max_score": 1, - "hits": [ - { - "_index": "stack", - "_type": "question", - "_id": "602679", - "_score": 1, - "_source": { - "title": "Windows port opening" - }, - "sort": [ - 1370143231177 - ] - } - ] - } - } - }, - { - "key": "linux", - "doc_count": 18342, - "top_tags_hits": { - "hits": { - "total": 18342, - "max_score": 1, - "hits": [ - { - "_index": "stack", - "_type": "question", - "_id": "602672", - "_score": 1, - "_source": { - "title": "Ubuntu RFID Screensaver lock-unlock" - }, - "sort": [ - 1370143379747 - ] - } - ] - } - } - }, - { - "key": "windows", - "doc_count": 18119, - "top_tags_hits": { - "hits": { - "total": 18119, - "max_score": 1, - "hits": [ - { - "_index": "stack", - "_type": "question", - "_id": "602678", - "_score": 1, - "_source": { - "title": "If I change my computers date / time, what could be affected?" - }, - "sort": [ - 1370142868283 - ] - } - ] - } - } - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Terms("top-tags") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 3 { - t.Errorf("expected %d bucket entries; got: %d", 3, len(agg.Buckets)) - } - if agg.Buckets[0].Key != "windows-7" { - t.Errorf("expected bucket key = %q; got: %q", "windows-7", agg.Buckets[0].Key) - } - if agg.Buckets[1].Key != "linux" { - t.Errorf("expected bucket key = %q; got: %q", "linux", agg.Buckets[1].Key) - } - if agg.Buckets[2].Key != "windows" { - t.Errorf("expected bucket key = %q; got: %q", "windows", agg.Buckets[2].Key) - } - - // Sub-aggregation of top-hits - subAgg, found := agg.Buckets[0].TopHits("top_tags_hits") - if !found { - t.Fatalf("expected sub aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub aggregation != nil; got: %v", subAgg) - } - if subAgg.Hits == nil { - t.Fatalf("expected sub aggregation Hits != nil; got: %v", subAgg.Hits) - } - if subAgg.Hits.TotalHits != 25365 { - t.Fatalf("expected sub aggregation Hits.TotalHits = %d; got: %d", 25365, subAgg.Hits.TotalHits) - } - if subAgg.Hits.MaxScore == nil { - t.Fatalf("expected sub aggregation Hits.MaxScore != %v; got: %v", nil, *subAgg.Hits.MaxScore) - } - if *subAgg.Hits.MaxScore != float64(1.0) { - t.Fatalf("expected sub aggregation Hits.MaxScore = %v; got: %v", float64(1.0), *subAgg.Hits.MaxScore) - } - - subAgg, found = agg.Buckets[1].TopHits("top_tags_hits") - if !found { - t.Fatalf("expected sub aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub aggregation != nil; got: %v", subAgg) - } - if subAgg.Hits == nil { - t.Fatalf("expected sub aggregation Hits != nil; got: %v", subAgg.Hits) - } - if subAgg.Hits.TotalHits != 18342 { - t.Fatalf("expected sub aggregation Hits.TotalHits = %d; got: %d", 18342, subAgg.Hits.TotalHits) - } - if subAgg.Hits.MaxScore == nil { - t.Fatalf("expected sub aggregation Hits.MaxScore != %v; got: %v", nil, *subAgg.Hits.MaxScore) - } - if *subAgg.Hits.MaxScore != float64(1.0) { - t.Fatalf("expected sub aggregation Hits.MaxScore = %v; got: %v", float64(1.0), *subAgg.Hits.MaxScore) - } - - subAgg, found = agg.Buckets[2].TopHits("top_tags_hits") - if !found { - t.Fatalf("expected sub aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub aggregation != nil; got: %v", subAgg) - } - if subAgg.Hits == nil { - t.Fatalf("expected sub aggregation Hits != nil; got: %v", subAgg.Hits) - } - if subAgg.Hits.TotalHits != 18119 { - t.Fatalf("expected sub aggregation Hits.TotalHits = %d; got: %d", 18119, subAgg.Hits.TotalHits) - } - if subAgg.Hits.MaxScore == nil { - t.Fatalf("expected sub aggregation Hits.MaxScore != %v; got: %v", nil, *subAgg.Hits.MaxScore) - } - if *subAgg.Hits.MaxScore != float64(1.0) { - t.Fatalf("expected sub aggregation Hits.MaxScore = %v; got: %v", float64(1.0), *subAgg.Hits.MaxScore) - } -} - -func TestAggsBucketGlobal(t *testing.T) { - s := `{ - "all_products" : { - "doc_count" : 100, - "avg_price" : { - "value" : 56.3 - } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Global("all_products") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 100 { - t.Fatalf("expected aggregation DocCount = %d; got: %d", 100, agg.DocCount) - } - - // Sub-aggregation - subAgg, found := agg.Avg("avg_price") - if !found { - t.Fatalf("expected sub-aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub-aggregation != nil; got: %v", subAgg) - } - if subAgg.Value == nil { - t.Fatalf("expected sub-aggregation value != nil; got: %v", subAgg.Value) - } - if *subAgg.Value != float64(56.3) { - t.Fatalf("expected sub-aggregation value = %v; got: %v", float64(56.3), *subAgg.Value) - } -} - -func TestAggsBucketFilter(t *testing.T) { - s := `{ - "in_stock_products" : { - "doc_count" : 100, - "avg_price" : { "value" : 56.3 } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Filter("in_stock_products") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 100 { - t.Fatalf("expected aggregation DocCount = %d; got: %d", 100, agg.DocCount) - } - - // Sub-aggregation - subAgg, found := agg.Avg("avg_price") - if !found { - t.Fatalf("expected sub-aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub-aggregation != nil; got: %v", subAgg) - } - if subAgg.Value == nil { - t.Fatalf("expected sub-aggregation value != nil; got: %v", subAgg.Value) - } - if *subAgg.Value != float64(56.3) { - t.Fatalf("expected sub-aggregation value = %v; got: %v", float64(56.3), *subAgg.Value) - } -} - -func TestAggsBucketFiltersWithBuckets(t *testing.T) { - s := `{ - "messages" : { - "buckets" : [ - { - "doc_count" : 34, - "monthly" : { - "buckets" : [] - } - }, - { - "doc_count" : 439, - "monthly" : { - "buckets" : [] - } - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Filters("messages") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != %v; got: %v", nil, agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Fatalf("expected %d buckets; got: %d", 2, len(agg.Buckets)) - } - - if agg.Buckets[0].DocCount != 34 { - t.Fatalf("expected DocCount = %d; got: %d", 34, agg.Buckets[0].DocCount) - } - subAgg, found := agg.Buckets[0].Histogram("monthly") - if !found { - t.Fatalf("expected sub aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub aggregation != %v; got: %v", nil, subAgg) - } - - if agg.Buckets[1].DocCount != 439 { - t.Fatalf("expected DocCount = %d; got: %d", 439, agg.Buckets[1].DocCount) - } - subAgg, found = agg.Buckets[1].Histogram("monthly") - if !found { - t.Fatalf("expected sub aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub aggregation != %v; got: %v", nil, subAgg) - } -} - -func TestAggsBucketFiltersWithNamedBuckets(t *testing.T) { - s := `{ - "messages" : { - "buckets" : { - "errors" : { - "doc_count" : 34, - "monthly" : { - "buckets" : [] - } - }, - "warnings" : { - "doc_count" : 439, - "monthly" : { - "buckets" : [] - } - } - } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Filters("messages") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.NamedBuckets == nil { - t.Fatalf("expected aggregation buckets != %v; got: %v", nil, agg.NamedBuckets) - } - if len(agg.NamedBuckets) != 2 { - t.Fatalf("expected %d buckets; got: %d", 2, len(agg.NamedBuckets)) - } - - if agg.NamedBuckets["errors"].DocCount != 34 { - t.Fatalf("expected DocCount = %d; got: %d", 34, agg.NamedBuckets["errors"].DocCount) - } - subAgg, found := agg.NamedBuckets["errors"].Histogram("monthly") - if !found { - t.Fatalf("expected sub aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub aggregation != %v; got: %v", nil, subAgg) - } - - if agg.NamedBuckets["warnings"].DocCount != 439 { - t.Fatalf("expected DocCount = %d; got: %d", 439, agg.NamedBuckets["warnings"].DocCount) - } - subAgg, found = agg.NamedBuckets["warnings"].Histogram("monthly") - if !found { - t.Fatalf("expected sub aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub aggregation != %v; got: %v", nil, subAgg) - } -} - -func TestAggsBucketMissing(t *testing.T) { - s := `{ - "products_without_a_price" : { - "doc_count" : 10 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Missing("products_without_a_price") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 10 { - t.Fatalf("expected aggregation DocCount = %d; got: %d", 10, agg.DocCount) - } -} - -func TestAggsBucketNested(t *testing.T) { - s := `{ - "resellers": { - "min_price": { - "value" : 350 - } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Nested("resellers") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 0 { - t.Fatalf("expected aggregation DocCount = %d; got: %d", 0, agg.DocCount) - } - - // Sub-aggregation - subAgg, found := agg.Avg("min_price") - if !found { - t.Fatalf("expected sub-aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub-aggregation != nil; got: %v", subAgg) - } - if subAgg.Value == nil { - t.Fatalf("expected sub-aggregation value != nil; got: %v", subAgg.Value) - } - if *subAgg.Value != float64(350) { - t.Fatalf("expected sub-aggregation value = %v; got: %v", float64(350), *subAgg.Value) - } -} - -func TestAggsBucketReverseNested(t *testing.T) { - s := `{ - "comment_to_issue": { - "doc_count" : 10 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.ReverseNested("comment_to_issue") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 10 { - t.Fatalf("expected aggregation DocCount = %d; got: %d", 10, agg.DocCount) - } -} - -func TestAggsBucketChildren(t *testing.T) { - s := `{ - "to-answers": { - "doc_count" : 10 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Children("to-answers") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 10 { - t.Fatalf("expected aggregation DocCount = %d; got: %d", 10, agg.DocCount) - } -} - -func TestAggsBucketTerms(t *testing.T) { - s := `{ - "users" : { - "doc_count_error_upper_bound" : 1, - "sum_other_doc_count" : 2, - "buckets" : [ { - "key" : "olivere", - "doc_count" : 2 - }, { - "key" : "sandrae", - "doc_count" : 1 - } ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Terms("users") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) - } - if agg.Buckets[0].Key != "olivere" { - t.Errorf("expected key %q; got: %q", "olivere", agg.Buckets[0].Key) - } - if agg.Buckets[0].DocCount != 2 { - t.Errorf("expected doc count %d; got: %d", 2, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].Key != "sandrae" { - t.Errorf("expected key %q; got: %q", "sandrae", agg.Buckets[1].Key) - } - if agg.Buckets[1].DocCount != 1 { - t.Errorf("expected doc count %d; got: %d", 1, agg.Buckets[1].DocCount) - } -} - -func TestAggsBucketTermsWithNumericKeys(t *testing.T) { - s := `{ - "users" : { - "doc_count_error_upper_bound" : 1, - "sum_other_doc_count" : 2, - "buckets" : [ { - "key" : 17, - "doc_count" : 2 - }, { - "key" : 21, - "doc_count" : 1 - } ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Terms("users") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) - } - if agg.Buckets[0].Key != float64(17) { - t.Errorf("expected key %v; got: %v", 17, agg.Buckets[0].Key) - } - if got, err := agg.Buckets[0].KeyNumber.Int64(); err != nil { - t.Errorf("expected to convert key to int64; got: %v", err) - } else if got != 17 { - t.Errorf("expected key %v; got: %v", 17, agg.Buckets[0].Key) - } - if agg.Buckets[0].DocCount != 2 { - t.Errorf("expected doc count %d; got: %d", 2, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].Key != float64(21) { - t.Errorf("expected key %v; got: %v", 21, agg.Buckets[1].Key) - } - if got, err := agg.Buckets[1].KeyNumber.Int64(); err != nil { - t.Errorf("expected to convert key to int64; got: %v", err) - } else if got != 21 { - t.Errorf("expected key %v; got: %v", 21, agg.Buckets[1].Key) - } - if agg.Buckets[1].DocCount != 1 { - t.Errorf("expected doc count %d; got: %d", 1, agg.Buckets[1].DocCount) - } -} - -func TestAggsBucketTermsWithBoolKeys(t *testing.T) { - s := `{ - "users" : { - "doc_count_error_upper_bound" : 1, - "sum_other_doc_count" : 2, - "buckets" : [ { - "key" : true, - "doc_count" : 2 - }, { - "key" : false, - "doc_count" : 1 - } ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Terms("users") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) - } - if agg.Buckets[0].Key != true { - t.Errorf("expected key %v; got: %v", true, agg.Buckets[0].Key) - } - if agg.Buckets[0].DocCount != 2 { - t.Errorf("expected doc count %d; got: %d", 2, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].Key != false { - t.Errorf("expected key %v; got: %v", false, agg.Buckets[1].Key) - } - if agg.Buckets[1].DocCount != 1 { - t.Errorf("expected doc count %d; got: %d", 1, agg.Buckets[1].DocCount) - } -} - -func TestAggsBucketSignificantTerms(t *testing.T) { - s := `{ - "significantCrimeTypes" : { - "doc_count": 47347, - "buckets" : [ - { - "key": "Bicycle theft", - "doc_count": 3640, - "score": 0.371235374214817, - "bg_count": 66799 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.SignificantTerms("significantCrimeTypes") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 47347 { - t.Fatalf("expected aggregation DocCount != %d; got: %d", 47347, agg.DocCount) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 1 { - t.Errorf("expected %d bucket entries; got: %d", 1, len(agg.Buckets)) - } - if agg.Buckets[0].Key != "Bicycle theft" { - t.Errorf("expected key = %q; got: %q", "Bicycle theft", agg.Buckets[0].Key) - } - if agg.Buckets[0].DocCount != 3640 { - t.Errorf("expected doc count = %d; got: %d", 3640, agg.Buckets[0].DocCount) - } - if agg.Buckets[0].Score != float64(0.371235374214817) { - t.Errorf("expected score = %v; got: %v", float64(0.371235374214817), agg.Buckets[0].Score) - } - if agg.Buckets[0].BgCount != 66799 { - t.Errorf("expected BgCount = %d; got: %d", 66799, agg.Buckets[0].BgCount) - } -} - -func TestAggsBucketSampler(t *testing.T) { - s := `{ - "sample" : { - "doc_count": 1000, - "keywords": { - "doc_count": 1000, - "buckets" : [ - { - "key": "bend", - "doc_count": 58, - "score": 37.982536582524276, - "bg_count": 103 - } - ] - } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Sampler("sample") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 1000 { - t.Fatalf("expected aggregation DocCount != %d; got: %d", 1000, agg.DocCount) - } - sub, found := agg.Aggregations["keywords"] - if !found { - t.Fatalf("expected sub aggregation %q", "keywords") - } - if sub == nil { - t.Fatalf("expected sub aggregation %q; got: %v", "keywords", sub) - } -} - -func TestAggsBucketRange(t *testing.T) { - s := `{ - "price_ranges" : { - "buckets": [ - { - "to": 50, - "doc_count": 2 - }, - { - "from": 50, - "to": 100, - "doc_count": 4 - }, - { - "from": 100, - "doc_count": 4 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Range("price_ranges") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 3 { - t.Errorf("expected %d bucket entries; got: %d", 3, len(agg.Buckets)) - } - if agg.Buckets[0].From != nil { - t.Errorf("expected From = %v; got: %v", nil, agg.Buckets[0].From) - } - if agg.Buckets[0].To == nil { - t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[0].To) - } - if *agg.Buckets[0].To != float64(50) { - t.Errorf("expected To = %v; got: %v", float64(50), *agg.Buckets[0].To) - } - if agg.Buckets[0].DocCount != 2 { - t.Errorf("expected DocCount = %d; got: %d", 2, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].From == nil { - t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[1].From) - } - if *agg.Buckets[1].From != float64(50) { - t.Errorf("expected From = %v; got: %v", float64(50), *agg.Buckets[1].From) - } - if agg.Buckets[1].To == nil { - t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[1].To) - } - if *agg.Buckets[1].To != float64(100) { - t.Errorf("expected To = %v; got: %v", float64(100), *agg.Buckets[1].To) - } - if agg.Buckets[1].DocCount != 4 { - t.Errorf("expected DocCount = %d; got: %d", 4, agg.Buckets[1].DocCount) - } - if agg.Buckets[2].From == nil { - t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[2].From) - } - if *agg.Buckets[2].From != float64(100) { - t.Errorf("expected From = %v; got: %v", float64(100), *agg.Buckets[2].From) - } - if agg.Buckets[2].To != nil { - t.Errorf("expected To = %v; got: %v", nil, agg.Buckets[2].To) - } - if agg.Buckets[2].DocCount != 4 { - t.Errorf("expected DocCount = %d; got: %d", 4, agg.Buckets[2].DocCount) - } -} - -func TestAggsBucketDateRange(t *testing.T) { - s := `{ - "range": { - "buckets": [ - { - "to": 1.3437792E+12, - "to_as_string": "08-2012", - "doc_count": 7 - }, - { - "from": 1.3437792E+12, - "from_as_string": "08-2012", - "doc_count": 2 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.DateRange("range") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) - } - if agg.Buckets[0].From != nil { - t.Errorf("expected From = %v; got: %v", nil, agg.Buckets[0].From) - } - if agg.Buckets[0].To == nil { - t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[0].To) - } - if *agg.Buckets[0].To != float64(1.3437792E+12) { - t.Errorf("expected To = %v; got: %v", float64(1.3437792E+12), *agg.Buckets[0].To) - } - if agg.Buckets[0].ToAsString != "08-2012" { - t.Errorf("expected ToAsString = %q; got: %q", "08-2012", agg.Buckets[0].ToAsString) - } - if agg.Buckets[0].DocCount != 7 { - t.Errorf("expected DocCount = %d; got: %d", 7, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].From == nil { - t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[1].From) - } - if *agg.Buckets[1].From != float64(1.3437792E+12) { - t.Errorf("expected From = %v; got: %v", float64(1.3437792E+12), *agg.Buckets[1].From) - } - if agg.Buckets[1].FromAsString != "08-2012" { - t.Errorf("expected FromAsString = %q; got: %q", "08-2012", agg.Buckets[1].FromAsString) - } - if agg.Buckets[1].To != nil { - t.Errorf("expected To = %v; got: %v", nil, agg.Buckets[1].To) - } - if agg.Buckets[1].DocCount != 2 { - t.Errorf("expected DocCount = %d; got: %d", 2, agg.Buckets[1].DocCount) - } -} - -func TestAggsBucketIPRange(t *testing.T) { - s := `{ - "ip_ranges": { - "buckets" : [ - { - "to": 167772165, - "to_as_string": "10.0.0.5", - "doc_count": 4 - }, - { - "from": 167772165, - "from_as_string": "10.0.0.5", - "doc_count": 6 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.IPRange("ip_ranges") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) - } - if agg.Buckets[0].From != nil { - t.Errorf("expected From = %v; got: %v", nil, agg.Buckets[0].From) - } - if agg.Buckets[0].To == nil { - t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[0].To) - } - if *agg.Buckets[0].To != float64(167772165) { - t.Errorf("expected To = %v; got: %v", float64(167772165), *agg.Buckets[0].To) - } - if agg.Buckets[0].ToAsString != "10.0.0.5" { - t.Errorf("expected ToAsString = %q; got: %q", "10.0.0.5", agg.Buckets[0].ToAsString) - } - if agg.Buckets[0].DocCount != 4 { - t.Errorf("expected DocCount = %d; got: %d", 4, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].From == nil { - t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[1].From) - } - if *agg.Buckets[1].From != float64(167772165) { - t.Errorf("expected From = %v; got: %v", float64(167772165), *agg.Buckets[1].From) - } - if agg.Buckets[1].FromAsString != "10.0.0.5" { - t.Errorf("expected FromAsString = %q; got: %q", "10.0.0.5", agg.Buckets[1].FromAsString) - } - if agg.Buckets[1].To != nil { - t.Errorf("expected To = %v; got: %v", nil, agg.Buckets[1].To) - } - if agg.Buckets[1].DocCount != 6 { - t.Errorf("expected DocCount = %d; got: %d", 6, agg.Buckets[1].DocCount) - } -} - -func TestAggsBucketHistogram(t *testing.T) { - s := `{ - "prices" : { - "buckets": [ - { - "key": 0, - "doc_count": 2 - }, - { - "key": 50, - "doc_count": 4 - }, - { - "key": 150, - "doc_count": 3 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Histogram("prices") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 3 { - t.Errorf("expected %d buckets; got: %d", 3, len(agg.Buckets)) - } - if agg.Buckets[0].Key != 0 { - t.Errorf("expected key = %v; got: %v", 0, agg.Buckets[0].Key) - } - if agg.Buckets[0].KeyAsString != nil { - t.Fatalf("expected key_as_string = %v; got: %q", nil, *agg.Buckets[0].KeyAsString) - } - if agg.Buckets[0].DocCount != 2 { - t.Errorf("expected doc count = %d; got: %d", 2, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].Key != 50 { - t.Errorf("expected key = %v; got: %v", 50, agg.Buckets[1].Key) - } - if agg.Buckets[1].KeyAsString != nil { - t.Fatalf("expected key_as_string = %v; got: %q", nil, *agg.Buckets[1].KeyAsString) - } - if agg.Buckets[1].DocCount != 4 { - t.Errorf("expected doc count = %d; got: %d", 4, agg.Buckets[1].DocCount) - } - if agg.Buckets[2].Key != 150 { - t.Errorf("expected key = %v; got: %v", 150, agg.Buckets[2].Key) - } - if agg.Buckets[2].KeyAsString != nil { - t.Fatalf("expected key_as_string = %v; got: %q", nil, *agg.Buckets[2].KeyAsString) - } - if agg.Buckets[2].DocCount != 3 { - t.Errorf("expected doc count = %d; got: %d", 3, agg.Buckets[2].DocCount) - } -} - -func TestAggsBucketDateHistogram(t *testing.T) { - s := `{ - "articles_over_time": { - "buckets": [ - { - "key_as_string": "2013-02-02", - "key": 1328140800000, - "doc_count": 1 - }, - { - "key_as_string": "2013-03-02", - "key": 1330646400000, - "doc_count": 2 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.DateHistogram("articles_over_time") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) - } - if agg.Buckets[0].Key != 1328140800000 { - t.Errorf("expected key %v; got: %v", 1328140800000, agg.Buckets[0].Key) - } - if agg.Buckets[0].KeyAsString == nil { - t.Fatalf("expected key_as_string != nil; got: %v", agg.Buckets[0].KeyAsString) - } - if *agg.Buckets[0].KeyAsString != "2013-02-02" { - t.Errorf("expected key_as_string %q; got: %q", "2013-02-02", *agg.Buckets[0].KeyAsString) - } - if agg.Buckets[0].DocCount != 1 { - t.Errorf("expected doc count %d; got: %d", 1, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].Key != 1330646400000 { - t.Errorf("expected key %v; got: %v", 1330646400000, agg.Buckets[1].Key) - } - if agg.Buckets[1].KeyAsString == nil { - t.Fatalf("expected key_as_string != nil; got: %v", agg.Buckets[1].KeyAsString) - } - if *agg.Buckets[1].KeyAsString != "2013-03-02" { - t.Errorf("expected key_as_string %q; got: %q", "2013-03-02", *agg.Buckets[1].KeyAsString) - } - if agg.Buckets[1].DocCount != 2 { - t.Errorf("expected doc count %d; got: %d", 2, agg.Buckets[1].DocCount) - } -} - -func TestAggsMetricsGeoBounds(t *testing.T) { - s := `{ - "viewport": { - "bounds": { - "top_left": { - "lat": 80.45, - "lon": -160.22 - }, - "bottom_right": { - "lat": 40.65, - "lon": 42.57 - } - } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.GeoBounds("viewport") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Bounds.TopLeft.Latitude != float64(80.45) { - t.Fatalf("expected Bounds.TopLeft.Latitude != %v; got: %v", float64(80.45), agg.Bounds.TopLeft.Latitude) - } - if agg.Bounds.TopLeft.Longitude != float64(-160.22) { - t.Fatalf("expected Bounds.TopLeft.Longitude != %v; got: %v", float64(-160.22), agg.Bounds.TopLeft.Longitude) - } - if agg.Bounds.BottomRight.Latitude != float64(40.65) { - t.Fatalf("expected Bounds.BottomRight.Latitude != %v; got: %v", float64(40.65), agg.Bounds.BottomRight.Latitude) - } - if agg.Bounds.BottomRight.Longitude != float64(42.57) { - t.Fatalf("expected Bounds.BottomRight.Longitude != %v; got: %v", float64(42.57), agg.Bounds.BottomRight.Longitude) - } -} - -func TestAggsBucketGeoHash(t *testing.T) { - s := `{ - "myLarge-GrainGeoHashGrid": { - "buckets": [ - { - "key": "svz", - "doc_count": 10964 - }, - { - "key": "sv8", - "doc_count": 3198 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.GeoHash("myLarge-GrainGeoHashGrid") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) - } - if agg.Buckets[0].Key != "svz" { - t.Errorf("expected key %q; got: %q", "svz", agg.Buckets[0].Key) - } - if agg.Buckets[0].DocCount != 10964 { - t.Errorf("expected doc count %d; got: %d", 10964, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].Key != "sv8" { - t.Errorf("expected key %q; got: %q", "sv8", agg.Buckets[1].Key) - } - if agg.Buckets[1].DocCount != 3198 { - t.Errorf("expected doc count %d; got: %d", 3198, agg.Buckets[1].DocCount) - } -} - -func TestAggsBucketGeoDistance(t *testing.T) { - s := `{ - "rings" : { - "buckets": [ - { - "unit": "km", - "to": 100.0, - "doc_count": 3 - }, - { - "unit": "km", - "from": 100.0, - "to": 300.0, - "doc_count": 1 - }, - { - "unit": "km", - "from": 300.0, - "doc_count": 7 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.GeoDistance("rings") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 3 { - t.Errorf("expected %d bucket entries; got: %d", 3, len(agg.Buckets)) - } - if agg.Buckets[0].From != nil { - t.Errorf("expected From = %v; got: %v", nil, agg.Buckets[0].From) - } - if agg.Buckets[0].To == nil { - t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[0].To) - } - if *agg.Buckets[0].To != float64(100.0) { - t.Errorf("expected To = %v; got: %v", float64(100.0), *agg.Buckets[0].To) - } - if agg.Buckets[0].DocCount != 3 { - t.Errorf("expected DocCount = %d; got: %d", 4, agg.Buckets[0].DocCount) - } - - if agg.Buckets[1].From == nil { - t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[1].From) - } - if *agg.Buckets[1].From != float64(100.0) { - t.Errorf("expected From = %v; got: %v", float64(100.0), *agg.Buckets[1].From) - } - if agg.Buckets[1].To == nil { - t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[1].To) - } - if *agg.Buckets[1].To != float64(300.0) { - t.Errorf("expected From = %v; got: %v", float64(300.0), *agg.Buckets[1].To) - } - if agg.Buckets[1].DocCount != 1 { - t.Errorf("expected DocCount = %d; got: %d", 1, agg.Buckets[1].DocCount) - } - - if agg.Buckets[2].From == nil { - t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[2].From) - } - if *agg.Buckets[2].From != float64(300.0) { - t.Errorf("expected From = %v; got: %v", float64(300.0), *agg.Buckets[2].From) - } - if agg.Buckets[2].To != nil { - t.Errorf("expected To = %v; got: %v", nil, agg.Buckets[2].To) - } - if agg.Buckets[2].DocCount != 7 { - t.Errorf("expected DocCount = %d; got: %d", 7, agg.Buckets[2].DocCount) - } -} - -func TestAggsSubAggregates(t *testing.T) { - rs := `{ - "users" : { - "doc_count_error_upper_bound" : 1, - "sum_other_doc_count" : 2, - "buckets" : [ { - "key" : "olivere", - "doc_count" : 2, - "ts" : { - "buckets" : [ { - "key_as_string" : "2012-01-01T00:00:00.000Z", - "key" : 1325376000000, - "doc_count" : 2 - } ] - } - }, { - "key" : "sandrae", - "doc_count" : 1, - "ts" : { - "buckets" : [ { - "key_as_string" : "2011-01-01T00:00:00.000Z", - "key" : 1293840000000, - "doc_count" : 1 - } ] - } - } ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(rs), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - // Access top-level aggregation - users, found := aggs.Terms("users") - if !found { - t.Fatalf("expected users aggregation to be found; got: %v", found) - } - if users == nil { - t.Fatalf("expected users aggregation; got: %v", users) - } - if users.Buckets == nil { - t.Fatalf("expected users buckets; got: %v", users.Buckets) - } - if len(users.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(users.Buckets)) - } - if users.Buckets[0].Key != "olivere" { - t.Errorf("expected key %q; got: %q", "olivere", users.Buckets[0].Key) - } - if users.Buckets[0].DocCount != 2 { - t.Errorf("expected doc count %d; got: %d", 2, users.Buckets[0].DocCount) - } - if users.Buckets[1].Key != "sandrae" { - t.Errorf("expected key %q; got: %q", "sandrae", users.Buckets[1].Key) - } - if users.Buckets[1].DocCount != 1 { - t.Errorf("expected doc count %d; got: %d", 1, users.Buckets[1].DocCount) - } - - // Access sub-aggregation - ts, found := users.Buckets[0].DateHistogram("ts") - if !found { - t.Fatalf("expected ts aggregation to be found; got: %v", found) - } - if ts == nil { - t.Fatalf("expected ts aggregation; got: %v", ts) - } - if ts.Buckets == nil { - t.Fatalf("expected ts buckets; got: %v", ts.Buckets) - } - if len(ts.Buckets) != 1 { - t.Errorf("expected %d bucket entries; got: %d", 1, len(ts.Buckets)) - } - if ts.Buckets[0].Key != 1325376000000 { - t.Errorf("expected key %v; got: %v", 1325376000000, ts.Buckets[0].Key) - } - if ts.Buckets[0].KeyAsString == nil { - t.Fatalf("expected key_as_string != %v; got: %v", nil, ts.Buckets[0].KeyAsString) - } - if *ts.Buckets[0].KeyAsString != "2012-01-01T00:00:00.000Z" { - t.Errorf("expected key_as_string %q; got: %q", "2012-01-01T00:00:00.000Z", *ts.Buckets[0].KeyAsString) - } -} - -func TestAggsPipelineAvgBucket(t *testing.T) { - s := `{ - "avg_monthly_sales" : { - "value" : 328.33333333333333 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.AvgBucket("avg_monthly_sales") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(328.33333333333333) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(328.33333333333333), *agg.Value) - } -} - -func TestAggsPipelineSumBucket(t *testing.T) { - s := `{ - "sum_monthly_sales" : { - "value" : 985 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.SumBucket("sum_monthly_sales") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(985) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(985), *agg.Value) - } -} - -func TestAggsPipelineMaxBucket(t *testing.T) { - s := `{ - "max_monthly_sales" : { - "keys": ["2015/01/01 00:00:00"], - "value" : 550 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.MaxBucket("max_monthly_sales") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if len(agg.Keys) != 1 { - t.Fatalf("expected 1 key; got: %d", len(agg.Keys)) - } - if got, want := agg.Keys[0], "2015/01/01 00:00:00"; got != want { - t.Fatalf("expected key %q; got: %v (%T)", want, got, got) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(550) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(550), *agg.Value) - } -} - -func TestAggsPipelineMinBucket(t *testing.T) { - s := `{ - "min_monthly_sales" : { - "keys": ["2015/02/01 00:00:00"], - "value" : 60 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.MinBucket("min_monthly_sales") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if len(agg.Keys) != 1 { - t.Fatalf("expected 1 key; got: %d", len(agg.Keys)) - } - if got, want := agg.Keys[0], "2015/02/01 00:00:00"; got != want { - t.Fatalf("expected key %q; got: %v (%T)", want, got, got) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(60) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(60), *agg.Value) - } -} - -func TestAggsPipelineMovAvg(t *testing.T) { - s := `{ - "the_movavg" : { - "value" : 12.0 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.MovAvg("the_movavg") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(12.0) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(12.0), *agg.Value) - } -} - -func TestAggsPipelineDerivative(t *testing.T) { - s := `{ - "sales_deriv" : { - "value" : 315 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Derivative("sales_deriv") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(315) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(315), *agg.Value) - } -} - -func TestAggsPipelinePercentilesBucket(t *testing.T) { - s := `{ - "sales_percentiles": { - "values": { - "25.0": 100, - "50.0": 200, - "75.0": 300 - } - } -}` - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.PercentilesBucket("sales_percentiles") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if len(agg.Values) != 3 { - t.Fatalf("expected aggregation map with three entries; got: %v", agg.Values) - } -} - -func TestAggsPipelineStatsBucket(t *testing.T) { - s := `{ - "stats_monthly_sales": { - "count": 3, - "min": 60.0, - "max": 550.0, - "avg": 328.3333333333333, - "sum": 985.0 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.StatsBucket("stats_monthly_sales") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Count != 3 { - t.Fatalf("expected aggregation count = %v; got: %v", 3, agg.Count) - } - if agg.Min == nil { - t.Fatalf("expected aggregation min != nil; got: %v", agg.Min) - } - if *agg.Min != float64(60.0) { - t.Fatalf("expected aggregation min = %v; got: %v", float64(60.0), *agg.Min) - } - if agg.Max == nil { - t.Fatalf("expected aggregation max != nil; got: %v", agg.Max) - } - if *agg.Max != float64(550.0) { - t.Fatalf("expected aggregation max = %v; got: %v", float64(550.0), *agg.Max) - } - if agg.Avg == nil { - t.Fatalf("expected aggregation avg != nil; got: %v", agg.Avg) - } - if *agg.Avg != float64(328.3333333333333) { - t.Fatalf("expected aggregation average = %v; got: %v", float64(328.3333333333333), *agg.Avg) - } - if agg.Sum == nil { - t.Fatalf("expected aggregation sum != nil; got: %v", agg.Sum) - } - if *agg.Sum != float64(985.0) { - t.Fatalf("expected aggregation sum = %v; got: %v", float64(985.0), *agg.Sum) - } -} - -func TestAggsPipelineCumulativeSum(t *testing.T) { - s := `{ - "cumulative_sales" : { - "value" : 550 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.CumulativeSum("cumulative_sales") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(550) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(550), *agg.Value) - } -} - -func TestAggsPipelineBucketScript(t *testing.T) { - s := `{ - "t-shirt-percentage" : { - "value" : 20 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.BucketScript("t-shirt-percentage") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(20) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(20), *agg.Value) - } -} - -func TestAggsPipelineSerialDiff(t *testing.T) { - s := `{ - "the_diff" : { - "value" : -722.0 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.SerialDiff("the_diff") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(-722.0) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(20), *agg.Value) - } -} - -func TestAggsComposite(t *testing.T) { - s := `{ - "the_composite" : { - "buckets" : [ - { - "key" : { - "composite_users" : "olivere", - "composite_retweets" : 0.0, - "composite_created" : 1349856720000 - }, - "doc_count" : 1 - }, - { - "key" : { - "composite_users" : "olivere", - "composite_retweets" : 108.0, - "composite_created" : 1355333880000 - }, - "doc_count" : 1 - }, - { - "key" : { - "composite_users" : "sandrae", - "composite_retweets" : 12.0, - "composite_created" : 1321009080000 - }, - "doc_count" : 1 - } - ] - } - }` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Composite("the_composite") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if want, have := 3, len(agg.Buckets); want != have { - t.Fatalf("expected aggregation buckets length = %v; got: %v", want, have) - } - - // 1st bucket - bucket := agg.Buckets[0] - if want, have := int64(1), bucket.DocCount; want != have { - t.Fatalf("expected aggregation bucket doc count = %v; got: %v", want, have) - } - if want, have := 3, len(bucket.Key); want != have { - t.Fatalf("expected aggregation bucket key length = %v; got: %v", want, have) - } - v, found := bucket.Key["composite_users"] - if !found { - t.Fatalf("expected to find bucket key %q", "composite_users") - } - s, ok := v.(string) - if !ok { - t.Fatalf("expected to have bucket key of type string; got: %T", v) - } - if want, have := "olivere", s; want != have { - t.Fatalf("expected to find bucket key value %q; got: %q", want, have) - } - v, found = bucket.Key["composite_retweets"] - if !found { - t.Fatalf("expected to find bucket key %q", "composite_retweets") - } - f, ok := v.(float64) - if !ok { - t.Fatalf("expected to have bucket key of type string; got: %T", v) - } - if want, have := 0.0, f; want != have { - t.Fatalf("expected to find bucket key value %v; got: %v", want, have) - } - v, found = bucket.Key["composite_created"] - if !found { - t.Fatalf("expected to find bucket key %q", "composite_created") - } - f, ok = v.(float64) - if !ok { - t.Fatalf("expected to have bucket key of type string; got: %T", v) - } - if want, have := 1349856720000.0, f; want != have { - t.Fatalf("expected to find bucket key value %v; got: %v", want, have) - } - - // 2nd bucket - bucket = agg.Buckets[1] - if want, have := int64(1), bucket.DocCount; want != have { - t.Fatalf("expected aggregation bucket doc count = %v; got: %v", want, have) - } - if want, have := 3, len(bucket.Key); want != have { - t.Fatalf("expected aggregation bucket key length = %v; got: %v", want, have) - } - v, found = bucket.Key["composite_users"] - if !found { - t.Fatalf("expected to find bucket key %q", "composite_users") - } - s, ok = v.(string) - if !ok { - t.Fatalf("expected to have bucket key of type string; got: %T", v) - } - if want, have := "olivere", s; want != have { - t.Fatalf("expected to find bucket key value %q; got: %q", want, have) - } - v, found = bucket.Key["composite_retweets"] - if !found { - t.Fatalf("expected to find bucket key %q", "composite_retweets") - } - f, ok = v.(float64) - if !ok { - t.Fatalf("expected to have bucket key of type string; got: %T", v) - } - if want, have := 108.0, f; want != have { - t.Fatalf("expected to find bucket key value %v; got: %v", want, have) - } - v, found = bucket.Key["composite_created"] - if !found { - t.Fatalf("expected to find bucket key %q", "composite_created") - } - f, ok = v.(float64) - if !ok { - t.Fatalf("expected to have bucket key of type string; got: %T", v) - } - if want, have := 1355333880000.0, f; want != have { - t.Fatalf("expected to find bucket key value %v; got: %v", want, have) - } - - // 3rd bucket - bucket = agg.Buckets[2] - if want, have := int64(1), bucket.DocCount; want != have { - t.Fatalf("expected aggregation bucket doc count = %v; got: %v", want, have) - } - if want, have := 3, len(bucket.Key); want != have { - t.Fatalf("expected aggregation bucket key length = %v; got: %v", want, have) - } - v, found = bucket.Key["composite_users"] - if !found { - t.Fatalf("expected to find bucket key %q", "composite_users") - } - s, ok = v.(string) - if !ok { - t.Fatalf("expected to have bucket key of type string; got: %T", v) - } - if want, have := "sandrae", s; want != have { - t.Fatalf("expected to find bucket key value %q; got: %q", want, have) - } - v, found = bucket.Key["composite_retweets"] - if !found { - t.Fatalf("expected to find bucket key %q", "composite_retweets") - } - f, ok = v.(float64) - if !ok { - t.Fatalf("expected to have bucket key of type string; got: %T", v) - } - if want, have := 12.0, f; want != have { - t.Fatalf("expected to find bucket key value %v; got: %v", want, have) - } - v, found = bucket.Key["composite_created"] - if !found { - t.Fatalf("expected to find bucket key %q", "composite_created") - } - f, ok = v.(float64) - if !ok { - t.Fatalf("expected to have bucket key of type string; got: %T", v) - } - if want, have := 1321009080000.0, f; want != have { - t.Fatalf("expected to find bucket key value %v; got: %v", want, have) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_collapse_builder.go b/vendor/gopkg.in/olivere/elastic.v5/search_collapse_builder.go index b3c628ba3..48ed17acb 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_collapse_builder.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_collapse_builder.go @@ -5,7 +5,7 @@ package elastic // CollapseBuilder enables field collapsing on a search request. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-collapse.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.3/search-request-collapse.html // for details. type CollapseBuilder struct { field string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_collapse_builder_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_collapse_builder_test.go deleted file mode 100644 index 0b74fadab..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_collapse_builder_test.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestCollapseBuilderSource(t *testing.T) { - b := NewCollapseBuilder("user"). - InnerHit(NewInnerHit().Name("last_tweets").Size(5).Sort("date", true)). - MaxConcurrentGroupRequests(4) - src, err := b.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"field":"user","inner_hits":{"name":"last_tweets","size":5,"sort":[{"date":{"order":"asc"}}]},"max_concurrent_group_searches":4}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_bool.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_bool.go index a1ff17596..8ae223834 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_bool.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_bool.go @@ -9,7 +9,7 @@ import "fmt" // A bool query matches documents matching boolean // combinations of other queries. // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-bool-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-bool-query.html type BoolQuery struct { Query mustClauses []Query @@ -17,6 +17,7 @@ type BoolQuery struct { filterClauses []Query shouldClauses []Query boost *float64 + disableCoord *bool minimumShouldMatch string adjustPureNegative *bool queryName string @@ -57,6 +58,11 @@ func (q *BoolQuery) Boost(boost float64) *BoolQuery { return q } +func (q *BoolQuery) DisableCoord(disableCoord bool) *BoolQuery { + q.disableCoord = &disableCoord + return q +} + func (q *BoolQuery) MinimumShouldMatch(minimumShouldMatch string) *BoolQuery { q.minimumShouldMatch = minimumShouldMatch return q @@ -100,7 +106,7 @@ func (q *BoolQuery) Source() (interface{}, error) { // "term" : { "tag" : "elasticsearch" } // } // ], - // "minimum_should_match" : 1, + // "minimum_number_should_match" : 1, // "boost" : 1.0 // } // } @@ -189,6 +195,9 @@ func (q *BoolQuery) Source() (interface{}, error) { if q.boost != nil { boolClause["boost"] = *q.boost } + if q.disableCoord != nil { + boolClause["disable_coord"] = *q.disableCoord + } if q.minimumShouldMatch != "" { boolClause["minimum_should_match"] = q.minimumShouldMatch } diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_bool_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_bool_test.go deleted file mode 100644 index cdcc38de1..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_bool_test.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestBoolQuery(t *testing.T) { - q := NewBoolQuery() - q = q.Must(NewTermQuery("tag", "wow")) - q = q.MustNot(NewRangeQuery("age").From(10).To(20)) - q = q.Filter(NewTermQuery("account", "1")) - q = q.Should(NewTermQuery("tag", "sometag"), NewTermQuery("tag", "sometagtag")) - q = q.Boost(10) - q = q.QueryName("Test") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"bool":{"_name":"Test","boost":10,"filter":{"term":{"account":"1"}},"must":{"term":{"tag":"wow"}},"must_not":{"range":{"age":{"from":10,"include_lower":true,"include_upper":true,"to":20}}},"should":[{"term":{"tag":"sometag"}},{"term":{"tag":"sometagtag"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_boosting.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_boosting.go index 0060a30a8..3a31237c9 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_boosting.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_boosting.go @@ -7,7 +7,7 @@ package elastic // A boosting query can be used to effectively // demote results that match a given query. // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-boosting-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-boosting-query.html type BoostingQuery struct { Query positiveClause Query diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_boosting_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_boosting_test.go deleted file mode 100644 index 6c7f263f4..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_boosting_test.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestBoostingQuery(t *testing.T) { - q := NewBoostingQuery() - q = q.Positive(NewTermQuery("tag", "wow")) - q = q.Negative(NewRangeQuery("age").From(10).To(20)) - q = q.NegativeBoost(0.2) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"boosting":{"negative":{"range":{"age":{"from":10,"include_lower":true,"include_upper":true,"to":20}}},"negative_boost":0.2,"positive":{"term":{"tag":"wow"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_common_terms.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_common_terms.go index 93a03de54..a1a37b37c 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_common_terms.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_common_terms.go @@ -8,7 +8,7 @@ package elastic // which improves the precision and recall of search results // (by taking stopwords into account), without sacrificing performance. // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-common-terms-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-common-terms-query.html type CommonTermsQuery struct { Query name string @@ -22,6 +22,7 @@ type CommonTermsQuery struct { lowFreqMinimumShouldMatch string analyzer string boost *float64 + disableCoord *bool queryName string } @@ -75,6 +76,11 @@ func (q *CommonTermsQuery) Boost(boost float64) *CommonTermsQuery { return q } +func (q *CommonTermsQuery) DisableCoord(disableCoord bool) *CommonTermsQuery { + q.disableCoord = &disableCoord + return q +} + func (q *CommonTermsQuery) QueryName(queryName string) *CommonTermsQuery { q.queryName = queryName return q @@ -126,6 +132,9 @@ func (q *CommonTermsQuery) Source() (interface{}, error) { if q.analyzer != "" { query["analyzer"] = q.analyzer } + if q.disableCoord != nil { + query["disable_coord"] = *q.disableCoord + } if q.boost != nil { query["boost"] = *q.boost } diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_common_terms_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_common_terms_test.go deleted file mode 100644 index e841e7731..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_common_terms_test.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - _ "net/http" - "testing" -) - -func TestCommonTermsQuery(t *testing.T) { - q := NewCommonTermsQuery("message", "Golang").CutoffFrequency(0.001) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"common":{"message":{"cutoff_frequency":0.001,"query":"Golang"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchQueriesCommonTermsQuery(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Common terms query - q := NewCommonTermsQuery("message", "Golang") - searchResult, err := client.Search().Index(testIndexName).Query(q).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 1 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 1, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 1 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 1, len(searchResult.Hits.Hits)) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_constant_score.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_constant_score.go index 285d91817..3ba879958 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_constant_score.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_constant_score.go @@ -8,7 +8,7 @@ package elastic // a constant score equal to the query boost for every document in the filter. // // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-constant-score-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-constant-score-query.html type ConstantScoreQuery struct { filter Query boost *float64 diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_constant_score_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_constant_score_test.go deleted file mode 100644 index 6508a91fb..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_constant_score_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestConstantScoreQuery(t *testing.T) { - q := NewConstantScoreQuery(NewTermQuery("user", "kimchy")).Boost(1.2) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"constant_score":{"boost":1.2,"filter":{"term":{"user":"kimchy"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_dis_max.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_dis_max.go index 7a4f53a97..af9a40d37 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_dis_max.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_dis_max.go @@ -10,7 +10,7 @@ package elastic // increment for any additional matching subqueries. // // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-dis-max-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-dis-max-query.html type DisMaxQuery struct { queries []Query boost *float64 diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_dis_max_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_dis_max_test.go deleted file mode 100644 index 76ddfb079..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_dis_max_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestDisMaxQuery(t *testing.T) { - q := NewDisMaxQuery() - q = q.Query(NewTermQuery("age", 34), NewTermQuery("age", 35)).Boost(1.2).TieBreaker(0.7) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"dis_max":{"boost":1.2,"queries":[{"term":{"age":34}},{"term":{"age":35}}],"tie_breaker":0.7}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_exists.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_exists.go index ac7378bad..6c2ebd369 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_exists.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_exists.go @@ -8,7 +8,7 @@ package elastic // has a value in them. // // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-exists-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-exists-query.html type ExistsQuery struct { name string queryName string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_exists_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_exists_test.go deleted file mode 100644 index f2d047087..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_exists_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestExistsQuery(t *testing.T) { - q := NewExistsQuery("user") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"exists":{"field":"user"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_fsq.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_fsq.go index 4cabd9bd9..ec34302f8 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_fsq.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_fsq.go @@ -10,7 +10,7 @@ package elastic // to compute the score on a filtered set of documents. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html type FunctionScoreQuery struct { query Query filter Query diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_fsq_score_funcs.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_fsq_score_funcs.go index 84cc52de9..622b645bb 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_fsq_score_funcs.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_fsq_score_funcs.go @@ -18,7 +18,7 @@ type ScoreFunction interface { // -- Exponential Decay -- // ExponentialDecayFunction builds an exponential decay score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html // for details. type ExponentialDecayFunction struct { fieldName string @@ -75,7 +75,7 @@ func (fn *ExponentialDecayFunction) Offset(offset interface{}) *ExponentialDecay } // Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html#_using_function_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html#_using_function_score // for details. func (fn *ExponentialDecayFunction) Weight(weight float64) *ExponentialDecayFunction { fn.weight = &weight @@ -120,7 +120,7 @@ func (fn *ExponentialDecayFunction) Source() (interface{}, error) { // -- Gauss Decay -- // GaussDecayFunction builds a gauss decay score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html // for details. type GaussDecayFunction struct { fieldName string @@ -177,7 +177,7 @@ func (fn *GaussDecayFunction) Offset(offset interface{}) *GaussDecayFunction { } // Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html#_using_function_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html#_using_function_score // for details. func (fn *GaussDecayFunction) Weight(weight float64) *GaussDecayFunction { fn.weight = &weight @@ -223,7 +223,7 @@ func (fn *GaussDecayFunction) Source() (interface{}, error) { // -- Linear Decay -- // LinearDecayFunction builds a linear decay score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html // for details. type LinearDecayFunction struct { fieldName string @@ -280,7 +280,7 @@ func (fn *LinearDecayFunction) Offset(offset interface{}) *LinearDecayFunction { } // Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html#_using_function_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html#_using_function_score // for details. func (fn *LinearDecayFunction) Weight(weight float64) *LinearDecayFunction { fn.weight = &weight @@ -336,7 +336,7 @@ func (fn *LinearDecayFunction) Source() (interface{}, error) { // compute or influence the score of documents that match with the inner // query or filter. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html#_script_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html#_script_score // for details. type ScriptFunction struct { script *Script @@ -363,7 +363,7 @@ func (fn *ScriptFunction) Script(script *Script) *ScriptFunction { } // Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html#_using_function_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html#_using_function_score // for details. func (fn *ScriptFunction) Weight(weight float64) *ScriptFunction { fn.weight = &weight @@ -394,7 +394,7 @@ func (fn *ScriptFunction) Source() (interface{}, error) { // FieldValueFactorFunction is a function score function that allows you // to use a field from a document to influence the score. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html#_field_value_factor. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html#_field_value_factor. type FieldValueFactorFunction struct { field string factor *float64 @@ -435,7 +435,7 @@ func (fn *FieldValueFactorFunction) Modifier(modifier string) *FieldValueFactorF } // Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html#_using_function_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html#_using_function_score // for details. func (fn *FieldValueFactorFunction) Weight(weight float64) *FieldValueFactorFunction { fn.weight = &weight @@ -477,7 +477,7 @@ func (fn *FieldValueFactorFunction) Source() (interface{}, error) { // WeightFactorFunction builds a weight factor function that multiplies // the weight to the score. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html#_weight +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html#_weight // for details. type WeightFactorFunction struct { weight float64 @@ -495,7 +495,7 @@ func (fn *WeightFactorFunction) Name() string { } // Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html#_using_function_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html#_using_function_score // for details. func (fn *WeightFactorFunction) Weight(weight float64) *WeightFactorFunction { fn.weight = weight @@ -517,7 +517,7 @@ func (fn *WeightFactorFunction) Source() (interface{}, error) { // -- Random -- // RandomFunction builds a random score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html#_random +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html#_random // for details. type RandomFunction struct { seed interface{} @@ -543,7 +543,7 @@ func (fn *RandomFunction) Seed(seed interface{}) *RandomFunction { } // Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-function-score-query.html#_using_function_score +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-function-score-query.html#_using_function_score // for details. func (fn *RandomFunction) Weight(weight float64) *RandomFunction { fn.weight = &weight diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_fsq_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_fsq_test.go deleted file mode 100644 index 256752d18..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_fsq_test.go +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestFunctionScoreQuery(t *testing.T) { - q := NewFunctionScoreQuery(). - Query(NewTermQuery("name.last", "banon")). - Add(NewTermQuery("name.last", "banon"), NewWeightFactorFunction(1.5)). - AddScoreFunc(NewWeightFactorFunction(3)). - AddScoreFunc(NewRandomFunction()). - Boost(3). - MaxBoost(10). - ScoreMode("avg") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"function_score":{"boost":3,"functions":[{"filter":{"term":{"name.last":"banon"}},"weight":1.5},{"weight":3},{"random_score":{}}],"max_boost":10,"query":{"term":{"name.last":"banon"}},"score_mode":"avg"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFunctionScoreQueryWithNilFilter(t *testing.T) { - q := NewFunctionScoreQuery(). - Query(NewTermQuery("tag", "wow")). - AddScoreFunc(NewRandomFunction()). - Boost(2.0). - MaxBoost(12.0). - BoostMode("multiply"). - ScoreMode("max") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"function_score":{"boost":2,"boost_mode":"multiply","max_boost":12,"query":{"term":{"tag":"wow"}},"random_score":{},"score_mode":"max"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFieldValueFactor(t *testing.T) { - q := NewFunctionScoreQuery(). - Query(NewTermQuery("name.last", "banon")). - AddScoreFunc(NewFieldValueFactorFunction().Modifier("sqrt").Factor(2).Field("income")). - Boost(2.0). - MaxBoost(12.0). - BoostMode("multiply"). - ScoreMode("max") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"function_score":{"boost":2,"boost_mode":"multiply","field_value_factor":{"factor":2,"field":"income","modifier":"sqrt"},"max_boost":12,"query":{"term":{"name.last":"banon"}},"score_mode":"max"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFieldValueFactorWithWeight(t *testing.T) { - q := NewFunctionScoreQuery(). - Query(NewTermQuery("name.last", "banon")). - AddScoreFunc(NewFieldValueFactorFunction().Modifier("sqrt").Factor(2).Field("income").Weight(2.5)). - Boost(2.0). - MaxBoost(12.0). - BoostMode("multiply"). - ScoreMode("max") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"function_score":{"boost":2,"boost_mode":"multiply","field_value_factor":{"factor":2,"field":"income","modifier":"sqrt"},"max_boost":12,"query":{"term":{"name.last":"banon"}},"score_mode":"max","weight":2.5}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFieldValueFactorWithMultipleScoreFuncsAndWeights(t *testing.T) { - q := NewFunctionScoreQuery(). - Query(NewTermQuery("name.last", "banon")). - AddScoreFunc(NewFieldValueFactorFunction().Modifier("sqrt").Factor(2).Field("income").Weight(2.5)). - AddScoreFunc(NewScriptFunction(NewScript("_score * doc['my_numeric_field'].value")).Weight(1.25)). - AddScoreFunc(NewWeightFactorFunction(0.5)). - Boost(2.0). - MaxBoost(12.0). - BoostMode("multiply"). - ScoreMode("max") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"function_score":{"boost":2,"boost_mode":"multiply","functions":[{"field_value_factor":{"factor":2,"field":"income","modifier":"sqrt"},"weight":2.5},{"script_score":{"script":{"source":"_score * doc['my_numeric_field'].value"}},"weight":1.25},{"weight":0.5}],"max_boost":12,"query":{"term":{"name.last":"banon"}},"score_mode":"max"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFunctionScoreQueryWithGaussScoreFunc(t *testing.T) { - q := NewFunctionScoreQuery(). - Query(NewTermQuery("name.last", "banon")). - AddScoreFunc(NewGaussDecayFunction().FieldName("pin.location").Origin("11, 12").Scale("2km").Offset("0km").Decay(0.33)) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"function_score":{"gauss":{"pin.location":{"decay":0.33,"offset":"0km","origin":"11, 12","scale":"2km"}},"query":{"term":{"name.last":"banon"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFunctionScoreQueryWithGaussScoreFuncAndMultiValueMode(t *testing.T) { - q := NewFunctionScoreQuery(). - Query(NewTermQuery("name.last", "banon")). - AddScoreFunc(NewGaussDecayFunction().FieldName("pin.location").Origin("11, 12").Scale("2km").Offset("0km").Decay(0.33).MultiValueMode("avg")) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"function_score":{"gauss":{"multi_value_mode":"avg","pin.location":{"decay":0.33,"offset":"0km","origin":"11, 12","scale":"2km"}},"query":{"term":{"name.last":"banon"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_fuzzy.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_fuzzy.go index 02b6c52c2..b98f9c7f0 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_fuzzy.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_fuzzy.go @@ -8,7 +8,7 @@ package elastic // string fields, and a +/- margin on numeric and date fields. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-fuzzy-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-fuzzy-query.html type FuzzyQuery struct { name string value interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_fuzzy_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_fuzzy_test.go deleted file mode 100644 index 89140ca23..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_fuzzy_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestFuzzyQuery(t *testing.T) { - q := NewFuzzyQuery("user", "ki").Boost(1.5).Fuzziness(2).PrefixLength(0).MaxExpansions(100) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fuzzy":{"user":{"boost":1.5,"fuzziness":2,"max_expansions":100,"prefix_length":0,"value":"ki"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_bounding_box.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_bounding_box.go index 0418620d8..e53340e64 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_bounding_box.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_bounding_box.go @@ -10,7 +10,7 @@ import "errors" // a bounding box. // // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-geo-bounding-box-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-geo-bounding-box-query.html type GeoBoundingBoxQuery struct { name string top *float64 diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_bounding_box_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_bounding_box_test.go deleted file mode 100644 index f44a2364f..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_bounding_box_test.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGeoBoundingBoxQueryIncomplete(t *testing.T) { - q := NewGeoBoundingBoxQuery("pin.location") - q = q.TopLeft(40.73, -74.1) - // no bottom and no right here - q = q.Type("memory") - src, err := q.Source() - if err == nil { - t.Fatal("expected error") - } - if src != nil { - t.Fatal("expected empty source") - } -} - -func TestGeoBoundingBoxQuery(t *testing.T) { - q := NewGeoBoundingBoxQuery("pin.location") - q = q.TopLeft(40.73, -74.1) - q = q.BottomRight(40.01, -71.12) - q = q.Type("memory") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_bounding_box":{"pin.location":{"bottom_right":[-71.12,40.01],"top_left":[-74.1,40.73]},"type":"memory"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoBoundingBoxQueryWithGeoPoint(t *testing.T) { - q := NewGeoBoundingBoxQuery("pin.location") - q = q.TopLeftFromGeoPoint(GeoPointFromLatLon(40.73, -74.1)) - q = q.BottomRightFromGeoPoint(GeoPointFromLatLon(40.01, -71.12)) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_bounding_box":{"pin.location":{"bottom_right":[-71.12,40.01],"top_left":[-74.1,40.73]}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_distance.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_distance.go index 00e62725f..a10bd5e3c 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_distance.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_distance.go @@ -8,7 +8,7 @@ package elastic // within a specific distance from a geo point. // // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-geo-distance-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-geo-distance-query.html type GeoDistanceQuery struct { name string distance string @@ -16,6 +16,7 @@ type GeoDistanceQuery struct { lon float64 geohash string distanceType string + optimizeBbox string queryName string } @@ -61,6 +62,11 @@ func (q *GeoDistanceQuery) DistanceType(distanceType string) *GeoDistanceQuery { return q } +func (q *GeoDistanceQuery) OptimizeBbox(optimizeBbox string) *GeoDistanceQuery { + q.optimizeBbox = optimizeBbox + return q +} + func (q *GeoDistanceQuery) QueryName(queryName string) *GeoDistanceQuery { q.queryName = queryName return q @@ -97,6 +103,9 @@ func (q *GeoDistanceQuery) Source() (interface{}, error) { if q.distanceType != "" { params["distance_type"] = q.distanceType } + if q.optimizeBbox != "" { + params["optimize_bbox"] = q.optimizeBbox + } if q.queryName != "" { params["_name"] = q.queryName } diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_distance_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_distance_test.go deleted file mode 100644 index dd169575a..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_distance_test.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGeoDistanceQuery(t *testing.T) { - q := NewGeoDistanceQuery("pin.location") - q = q.Lat(40) - q = q.Lon(-70) - q = q.Distance("200km") - q = q.DistanceType("plane") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_distance":{"distance":"200km","distance_type":"plane","pin.location":{"lat":40,"lon":-70}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoDistanceQueryWithGeoPoint(t *testing.T) { - q := NewGeoDistanceQuery("pin.location") - q = q.GeoPoint(GeoPointFromLatLon(40, -70)) - q = q.Distance("200km") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_distance":{"distance":"200km","pin.location":{"lat":40,"lon":-70}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoDistanceQueryWithGeoHash(t *testing.T) { - q := NewGeoDistanceQuery("pin.location") - q = q.GeoHash("drm3btev3e86") - q = q.Distance("12km") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_distance":{"distance":"12km","pin.location":"drm3btev3e86"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_polygon.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_polygon.go index 7678c3f3b..1faaf24e0 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_polygon.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_polygon.go @@ -7,7 +7,7 @@ package elastic // GeoPolygonQuery allows to include hits that only fall within a polygon of points. // // For more details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-geo-polygon-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-geo-polygon-query.html type GeoPolygonQuery struct { name string points []*GeoPoint diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_polygon_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_polygon_test.go deleted file mode 100644 index 932c57d7b..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_geo_polygon_test.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGeoPolygonQuery(t *testing.T) { - q := NewGeoPolygonQuery("person.location") - q = q.AddPoint(40, -70) - q = q.AddPoint(30, -80) - point, err := GeoPointFromString("20,-90") - if err != nil { - t.Fatalf("GeoPointFromString failed: %v", err) - } - q = q.AddGeoPoint(point) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_polygon":{"person.location":{"points":[{"lat":40,"lon":-70},{"lat":30,"lon":-80},{"lat":20,"lon":-90}]}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoPolygonQueryFromGeoPoints(t *testing.T) { - q := NewGeoPolygonQuery("person.location") - q = q.AddGeoPoint(&GeoPoint{Lat: 40, Lon: -70}) - q = q.AddGeoPoint(GeoPointFromLatLon(30, -80)) - point, err := GeoPointFromString("20,-90") - if err != nil { - t.Fatalf("GeoPointFromString failed: %v", err) - } - q = q.AddGeoPoint(point) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_polygon":{"person.location":{"points":[{"lat":40,"lon":-70},{"lat":30,"lon":-80},{"lat":20,"lon":-90}]}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_has_child.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_has_child.go index 41e7429c4..27cea7ad6 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_has_child.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_has_child.go @@ -8,7 +8,7 @@ package elastic // in parent documents that have child docs matching the query. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-has-child-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-has-child-query.html type HasChildQuery struct { query Query childType string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_has_child_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_has_child_test.go deleted file mode 100644 index 745c263f9..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_has_child_test.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestHasChildQuery(t *testing.T) { - q := NewHasChildQuery("blog_tag", NewTermQuery("tag", "something")).ScoreMode("min") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"has_child":{"query":{"term":{"tag":"something"}},"score_mode":"min","type":"blog_tag"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHasChildQueryWithInnerHit(t *testing.T) { - q := NewHasChildQuery("blog_tag", NewTermQuery("tag", "something")) - q = q.InnerHit(NewInnerHit().Name("comments")) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"has_child":{"inner_hits":{"name":"comments"},"query":{"term":{"tag":"something"}},"type":"blog_tag"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_has_parent.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_has_parent.go index 5e1b650af..7df110cd2 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_has_parent.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_has_parent.go @@ -11,7 +11,7 @@ package elastic // same manner as has_child query. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-has-parent-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-has-parent-query.html type HasParentQuery struct { query Query parentType string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_has_parent_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_has_parent_test.go deleted file mode 100644 index 0fec395e3..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_has_parent_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestHasParentQueryTest(t *testing.T) { - q := NewHasParentQuery("blog", NewTermQuery("tag", "something")).Score(true) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"has_parent":{"parent_type":"blog","query":{"term":{"tag":"something"}},"score":true}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_ids.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_ids.go index e067aebbe..42cc65672 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_ids.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_ids.go @@ -8,7 +8,7 @@ package elastic // Note, this query uses the _uid field. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-ids-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-ids-query.html type IdsQuery struct { types []string values []string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_ids_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_ids_test.go deleted file mode 100644 index b36605b4d..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_ids_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestIdsQuery(t *testing.T) { - q := NewIdsQuery("my_type").Ids("1", "4", "100").Boost(10.5).QueryName("my_query") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"ids":{"_name":"my_query","boost":10.5,"type":"my_type","values":["1","4","100"]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_indices.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_indices.go new file mode 100644 index 000000000..ed5ec9d84 --- /dev/null +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_indices.go @@ -0,0 +1,89 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// IndicesQuery can be used when executed across multiple indices, allowing +// to have a query that executes only when executed on an index that matches +// a specific list of indices, and another query that executes when it is +// executed on an index that does not match the listed indices. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-indices-query.html +type IndicesQuery struct { + query Query + indices []string + noMatchQueryType string + noMatchQuery Query + queryName string +} + +// NewIndicesQuery creates and initializes a new indices query. +func NewIndicesQuery(query Query, indices ...string) *IndicesQuery { + return &IndicesQuery{ + query: query, + indices: indices, + } +} + +// NoMatchQuery sets the query to use when it executes on an index that +// does not match the indices provided. +func (q *IndicesQuery) NoMatchQuery(query Query) *IndicesQuery { + q.noMatchQuery = query + return q +} + +// NoMatchQueryType sets the no match query which can be either all or none. +func (q *IndicesQuery) NoMatchQueryType(typ string) *IndicesQuery { + q.noMatchQueryType = typ + return q +} + +// QueryName sets the query name for the filter. +func (q *IndicesQuery) QueryName(queryName string) *IndicesQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the function score query. +func (q *IndicesQuery) Source() (interface{}, error) { + // { + // "indices" : { + // "indices" : ["index1", "index2"], + // "query" : { + // "term" : { "tag" : "wow" } + // }, + // "no_match_query" : { + // "term" : { "tag" : "kow" } + // } + // } + // } + + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["indices"] = params + + params["indices"] = q.indices + + src, err := q.query.Source() + if err != nil { + return nil, err + } + params["query"] = src + + if q.noMatchQuery != nil { + src, err := q.noMatchQuery.Source() + if err != nil { + return nil, err + } + params["no_match_query"] = src + } else if q.noMatchQueryType != "" { + params["no_match_query"] = q.noMatchQueryType + } + if q.queryName != "" { + params["_name"] = q.queryName + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match.go index b38b12452..1f2f16f69 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match.go @@ -12,7 +12,7 @@ package elastic // or use one of the shortcuts e.g. NewMatchPhraseQuery(...). // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-match-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-match-query.html type MatchQuery struct { name string text interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_all.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_all.go index 3829c8af0..5551eea30 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_all.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_all.go @@ -8,7 +8,7 @@ package elastic // giving them all a _score of 1.0. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-match-all-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-match-all-query.html type MatchAllQuery struct { boost *float64 queryName string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_all_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_all_test.go deleted file mode 100644 index 5d8671025..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_all_test.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMatchAllQuery(t *testing.T) { - q := NewMatchAllQuery() - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match_all":{}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMatchAllQueryWithBoost(t *testing.T) { - q := NewMatchAllQuery().Boost(3.14) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match_all":{"boost":3.14}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMatchAllQueryWithQueryName(t *testing.T) { - q := NewMatchAllQuery().QueryName("qname") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match_all":{"_name":"qname"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_none.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_none.go index 9afe16716..06d036e71 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_none.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_none.go @@ -8,7 +8,7 @@ package elastic // MatchAllQuery. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-match-all-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-match-all-query.html type MatchNoneQuery struct { queryName string } diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_none_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_none_test.go deleted file mode 100644 index 6463452da..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_none_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMatchNoneQuery(t *testing.T) { - q := NewMatchNoneQuery() - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match_none":{}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMatchNoneQueryWithQueryName(t *testing.T) { - q := NewMatchNoneQuery().QueryName("qname") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match_none":{"_name":"qname"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_phrase.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_phrase.go index 0e4c6327e..fdded2e76 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_phrase.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_phrase.go @@ -8,7 +8,7 @@ package elastic // the analyzed text. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-match-query-phrase.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-match-query-phrase.html type MatchPhraseQuery struct { name string value interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_phrase_prefix.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_phrase_prefix.go index 10a88668d..1eeba8af5 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_phrase_prefix.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_phrase_prefix.go @@ -8,7 +8,7 @@ package elastic // prefix matches on the last term in the text. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-match-query-phrase-prefix.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-match-query-phrase-prefix.html type MatchPhrasePrefixQuery struct { name string value interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_phrase_prefix_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_phrase_prefix_test.go deleted file mode 100644 index 82a02f17d..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_phrase_prefix_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMatchPhrasePrefixQuery(t *testing.T) { - q := NewMatchPhrasePrefixQuery("message", "this is a test").Boost(0.3).MaxExpansions(5) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match_phrase_prefix":{"message":{"boost":0.3,"max_expansions":5,"query":"this is a test"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_phrase_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_phrase_test.go deleted file mode 100644 index 85e60d8b5..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_phrase_test.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMatchPhraseQuery(t *testing.T) { - q := NewMatchPhraseQuery("message", "this is a test"). - Analyzer("my_analyzer"). - Boost(0.7) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match_phrase":{"message":{"analyzer":"my_analyzer","boost":0.7,"query":"this is a test"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_test.go deleted file mode 100644 index dd750cf93..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_match_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMatchQuery(t *testing.T) { - q := NewMatchQuery("message", "this is a test") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match":{"message":{"query":"this is a test"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMatchQueryWithOptions(t *testing.T) { - q := NewMatchQuery("message", "this is a test").Analyzer("whitespace").Operator("or").Boost(2.5) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match":{"message":{"analyzer":"whitespace","boost":2.5,"operator":"or","query":"this is a test"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_more_like_this.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_more_like_this.go index 5c71e291f..40c2d575d 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_more_like_this.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_more_like_this.go @@ -13,7 +13,7 @@ import "errors" // how the terms should be selected and how the query is formed. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-mlt-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-mlt-query.html type MoreLikeThisQuery struct { fields []string docs []*MoreLikeThisQueryItem @@ -25,8 +25,8 @@ type MoreLikeThisQuery struct { stopWords []string minDocFreq *int maxDocFreq *int - minWordLength *int - maxWordLength *int + minWordLen *int + maxWordLen *int boostTerms *float64 boost *float64 analyzer string @@ -147,15 +147,15 @@ func (q *MoreLikeThisQuery) MaxDocFreq(maxDocFreq int) *MoreLikeThisQuery { // MinWordLength sets the minimum word length below which words will be // ignored. It defaults to 0. -func (q *MoreLikeThisQuery) MinWordLength(minWordLength int) *MoreLikeThisQuery { - q.minWordLength = &minWordLength +func (q *MoreLikeThisQuery) MinWordLen(minWordLen int) *MoreLikeThisQuery { + q.minWordLen = &minWordLen return q } -// MaxWordLength sets the maximum word length above which words will be ignored. +// MaxWordLen sets the maximum word length above which words will be ignored. // Defaults to unbounded (0). -func (q *MoreLikeThisQuery) MaxWordLength(maxWordLength int) *MoreLikeThisQuery { - q.maxWordLength = &maxWordLength +func (q *MoreLikeThisQuery) MaxWordLen(maxWordLen int) *MoreLikeThisQuery { + q.maxWordLen = &maxWordLen return q } @@ -254,11 +254,11 @@ func (q *MoreLikeThisQuery) Source() (interface{}, error) { if q.maxDocFreq != nil { params["max_doc_freq"] = *q.maxDocFreq } - if q.minWordLength != nil { - params["min_word_length"] = *q.minWordLength + if q.minWordLen != nil { + params["min_word_len"] = *q.minWordLen } - if q.maxWordLength != nil { - params["max_word_length"] = *q.maxWordLength + if q.maxWordLen != nil { + params["max_word_len"] = *q.maxWordLen } if q.boostTerms != nil { params["boost_terms"] = *q.boostTerms diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_more_like_this_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_more_like_this_test.go deleted file mode 100644 index dcbbe74d1..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_more_like_this_test.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "testing" -) - -func TestMoreLikeThisQuerySourceWithLikeText(t *testing.T) { - q := NewMoreLikeThisQuery().LikeText("Golang topic").Field("message") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatal(err) - } - got := string(data) - expected := `{"more_like_this":{"fields":["message"],"like":["Golang topic"]}}` - if got != expected { - t.Fatalf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMoreLikeThisQuerySourceWithLikeAndUnlikeItems(t *testing.T) { - q := NewMoreLikeThisQuery() - q = q.LikeItems( - NewMoreLikeThisQueryItem().Id("1"), - NewMoreLikeThisQueryItem().Index(testIndexName2).Type("comment").Id("2").Routing("routing_id"), - ) - q = q.IgnoreLikeItems(NewMoreLikeThisQueryItem().Id("3")) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatal(err) - } - got := string(data) - expected := `{"more_like_this":{"like":[{"_id":"1"},{"_id":"2","_index":"elastic-test2","_routing":"routing_id","_type":"comment"}],"unlike":[{"_id":"3"}]}}` - if got != expected { - t.Fatalf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMoreLikeThisQuery(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another Golang topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Common query - mltq := NewMoreLikeThisQuery().LikeText("Golang topic").Field("message") - res, err := client.Search(). - Index(testIndexName). - Query(mltq). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_multi_match.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_multi_match.go index b6ff2107e..9a149fed5 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_multi_match.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_multi_match.go @@ -12,7 +12,7 @@ import ( // MultiMatchQuery builds on the MatchQuery to allow multi-field queries. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-multi-match-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-multi-match-query.html type MultiMatchQuery struct { text interface{} fields []string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_multi_match_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_multi_match_test.go deleted file mode 100644 index d897f7e72..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_multi_match_test.go +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMultiMatchQuery(t *testing.T) { - q := NewMultiMatchQuery("this is a test", "subject", "message") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"multi_match":{"fields":["subject","message"],"query":"this is a test"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMultiMatchQueryBestFields(t *testing.T) { - q := NewMultiMatchQuery("this is a test", "subject", "message").Type("best_fields") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"multi_match":{"fields":["subject","message"],"query":"this is a test","tie_breaker":0,"type":"best_fields"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMultiMatchQueryMostFields(t *testing.T) { - q := NewMultiMatchQuery("this is a test", "subject", "message").Type("most_fields") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"multi_match":{"fields":["subject","message"],"query":"this is a test","tie_breaker":1,"type":"most_fields"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMultiMatchQueryCrossFields(t *testing.T) { - q := NewMultiMatchQuery("this is a test", "subject", "message").Type("cross_fields") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"multi_match":{"fields":["subject","message"],"query":"this is a test","tie_breaker":0,"type":"cross_fields"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMultiMatchQueryPhrase(t *testing.T) { - q := NewMultiMatchQuery("this is a test", "subject", "message").Type("phrase") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"multi_match":{"fields":["subject","message"],"query":"this is a test","tie_breaker":0,"type":"phrase"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMultiMatchQueryPhrasePrefix(t *testing.T) { - q := NewMultiMatchQuery("this is a test", "subject", "message").Type("phrase_prefix") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"multi_match":{"fields":["subject","message"],"query":"this is a test","tie_breaker":0,"type":"phrase_prefix"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMultiMatchQueryBestFieldsWithCustomTieBreaker(t *testing.T) { - q := NewMultiMatchQuery("this is a test", "subject", "message"). - Type("best_fields"). - TieBreaker(0.3) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"multi_match":{"fields":["subject","message"],"query":"this is a test","tie_breaker":0.3,"type":"best_fields"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_nested.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_nested.go index d0a342283..a95cc2b80 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_nested.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_nested.go @@ -10,7 +10,7 @@ package elastic // root parent doc (or parent nested mapping). // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-nested-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-nested-query.html type NestedQuery struct { query Query path string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_nested_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_nested_test.go deleted file mode 100644 index c7a5322a6..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_nested_test.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestNestedQuery(t *testing.T) { - bq := NewBoolQuery() - bq = bq.Must(NewTermQuery("obj1.name", "blue")) - bq = bq.Must(NewRangeQuery("obj1.count").Gt(5)) - q := NewNestedQuery("obj1", bq).QueryName("qname") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"nested":{"_name":"qname","path":"obj1","query":{"bool":{"must":[{"term":{"obj1.name":"blue"}},{"range":{"obj1.count":{"from":5,"include_lower":false,"include_upper":true,"to":null}}}]}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestNestedQueryWithInnerHit(t *testing.T) { - bq := NewBoolQuery() - bq = bq.Must(NewTermQuery("obj1.name", "blue")) - bq = bq.Must(NewRangeQuery("obj1.count").Gt(5)) - q := NewNestedQuery("obj1", bq) - q = q.QueryName("qname") - q = q.InnerHit(NewInnerHit().Name("comments").Query(NewTermQuery("user", "olivere"))) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"nested":{"_name":"qname","inner_hits":{"name":"comments","query":{"term":{"user":"olivere"}}},"path":"obj1","query":{"bool":{"must":[{"term":{"obj1.name":"blue"}},{"range":{"obj1.count":{"from":5,"include_lower":false,"include_upper":true,"to":null}}}]}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestNestedQueryWithIgnoreUnmapped(t *testing.T) { - var tests = []struct { - query *BoolQuery - expected string - }{ - { - NewBoolQuery().Must(NewNestedQuery("path", NewTermQuery("test", "test"))), - `{"bool":{"must":{"nested":{"path":"path","query":{"term":{"test":"test"}}}}}}`, - }, - { - NewBoolQuery().Must(NewNestedQuery("path", NewTermQuery("test", "test")).IgnoreUnmapped(true)), - `{"bool":{"must":{"nested":{"ignore_unmapped":true,"path":"path","query":{"term":{"test":"test"}}}}}}`, - }, - { - NewBoolQuery().Must(NewNestedQuery("path", NewTermQuery("test", "test")).IgnoreUnmapped(false)), - `{"bool":{"must":{"nested":{"ignore_unmapped":false,"path":"path","query":{"term":{"test":"test"}}}}}}`, - }, - } - for _, test := range tests { - src, err := test.query.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - if got != test.expected { - t.Errorf("expected\n%s\n,got:\n%s", test.expected, got) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_parent_id.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_parent_id.go index c0b610f12..bd11cc291 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_parent_id.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_parent_id.go @@ -8,7 +8,7 @@ package elastic // particular parent. Given the following mapping definition. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-parent-id-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-parent-id-query.html type ParentIdQuery struct { typ string id string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_parent_id_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_parent_id_test.go deleted file mode 100644 index 0d18f216a..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_parent_id_test.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestParentIdQueryTest(t *testing.T) { - tests := []struct { - Query Query - Expected string - }{ - // #0 - { - Query: NewParentIdQuery("blog_tag", "1"), - Expected: `{"parent_id":{"id":"1","type":"blog_tag"}}`, - }, - // #1 - { - Query: NewParentIdQuery("blog_tag", "1").IgnoreUnmapped(true), - Expected: `{"parent_id":{"id":"1","ignore_unmapped":true,"type":"blog_tag"}}`, - }, - // #2 - { - Query: NewParentIdQuery("blog_tag", "1").IgnoreUnmapped(false), - Expected: `{"parent_id":{"id":"1","ignore_unmapped":false,"type":"blog_tag"}}`, - }, - // #3 - { - Query: NewParentIdQuery("blog_tag", "1").IgnoreUnmapped(true).Boost(5).QueryName("my_parent_query"), - Expected: `{"parent_id":{"_name":"my_parent_query","boost":5,"id":"1","ignore_unmapped":true,"type":"blog_tag"}}`, - }, - } - - for i, tt := range tests { - src, err := tt.Query.Source() - if err != nil { - t.Fatalf("#%d: encoding Source failed: %v", i, err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("#%d: marshaling to JSON failed: %v", i, err) - } - if want, got := tt.Expected, string(data); want != got { - t.Fatalf("#%d: expected\n%s\ngot:\n%s", i, want, got) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_percolator.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_percolator.go index a7605655b..16f7611ed 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_percolator.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_percolator.go @@ -9,10 +9,10 @@ import "errors" // PercolatorQuery can be used to match queries stored in an index. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-percolate-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.x/query-dsl-percolate-query.html type PercolatorQuery struct { field string - documentType string // deprecated + documentType string document interface{} indexedDocumentIndex string indexedDocumentType string @@ -32,7 +32,6 @@ func (q *PercolatorQuery) Field(field string) *PercolatorQuery { return q } -// Deprecated: DocumentType is deprecated as of 6.0. func (q *PercolatorQuery) DocumentType(typ string) *PercolatorQuery { q.documentType = typ return q @@ -78,6 +77,9 @@ func (q *PercolatorQuery) Source() (interface{}, error) { if len(q.field) == 0 { return nil, errors.New("elastic: Field is required in PercolatorQuery") } + if len(q.documentType) == 0 { + return nil, errors.New("elastic: DocumentType is required in PercolatorQuery") + } if q.document == nil { return nil, errors.New("elastic: Document is required in PercolatorQuery") } @@ -89,9 +91,7 @@ func (q *PercolatorQuery) Source() (interface{}, error) { params := make(map[string]interface{}) source["percolate"] = params params["field"] = q.field - if q.documentType != "" { - params["document_type"] = q.documentType - } + params["document_type"] = q.documentType params["document"] = q.document if len(q.indexedDocumentIndex) > 0 { params["index"] = q.indexedDocumentIndex diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_percolator_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_percolator_test.go deleted file mode 100644 index edc7be626..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_percolator_test.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestPercolatorQuery(t *testing.T) { - q := NewPercolatorQuery(). - Field("query"). - Document(map[string]interface{}{ - "message": "Some message", - }) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percolate":{"document":{"message":"Some message"},"field":"query"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPercolatorQueryWithDetails(t *testing.T) { - q := NewPercolatorQuery(). - Field("query"). - Document(map[string]interface{}{ - "message": "Some message", - }). - IndexedDocumentIndex("index"). - IndexedDocumentId("1"). - IndexedDocumentRouting("route"). - IndexedDocumentPreference("one"). - IndexedDocumentVersion(1) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percolate":{"document":{"message":"Some message"},"field":"query","id":"1","index":"index","preference":"one","routing":"route","version":1}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPercolatorQueryWithMissingFields(t *testing.T) { - q := NewPercolatorQuery() // no Field, Document, or Query - _, err := q.Source() - if err == nil { - t.Fatal("expected error, got nil") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_prefix.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_prefix.go index 075bcc7ba..0d5077553 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_prefix.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_prefix.go @@ -8,7 +8,7 @@ package elastic // with a specified prefix (not analyzed). // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-prefix-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-prefix-query.html type PrefixQuery struct { name string prefix string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_prefix_example_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_prefix_example_test.go deleted file mode 100644 index 73950f1f3..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_prefix_example_test.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic_test - -import ( - "context" - - "github.com/olivere/elastic" -) - -func ExamplePrefixQuery() { - // Get a client to the local Elasticsearch instance. - client, err := elastic.NewClient() - if err != nil { - // Handle error - panic(err) - } - - // Define wildcard query - q := elastic.NewPrefixQuery("user", "oli") - q = q.QueryName("my_query_name") - - searchResult, err := client.Search(). - Index("twitter"). - Query(q). - Pretty(true). - Do(context.Background()) - if err != nil { - // Handle error - panic(err) - } - _ = searchResult -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_prefix_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_prefix_test.go deleted file mode 100644 index 78d27b600..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_prefix_test.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestPrefixQuery(t *testing.T) { - q := NewPrefixQuery("user", "ki") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"prefix":{"user":"ki"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPrefixQueryWithOptions(t *testing.T) { - q := NewPrefixQuery("user", "ki") - q = q.QueryName("my_query_name") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"prefix":{"user":{"_name":"my_query_name","value":"ki"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_query_string.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_query_string.go index a52c8b1a5..fa1393611 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_query_string.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_query_string.go @@ -11,36 +11,39 @@ import ( // QueryStringQuery uses the query parser in order to parse its content. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-query-string-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-query-string-query.html type QueryStringQuery struct { - queryString string - defaultField string - defaultOperator string - analyzer string - quoteAnalyzer string - quoteFieldSuffix string - allowLeadingWildcard *bool - lowercaseExpandedTerms *bool // Deprecated: Decision is now made by the analyzer - enablePositionIncrements *bool - analyzeWildcard *bool - locale string // Deprecated: Decision is now made by the analyzer - boost *float64 - fuzziness string - fuzzyPrefixLength *int - fuzzyMaxExpansions *int - fuzzyRewrite string - phraseSlop *int - fields []string - fieldBoosts map[string]*float64 - tieBreaker *float64 - rewrite string - minimumShouldMatch string - lenient *bool - queryName string - timeZone string - maxDeterminizedStates *int - escape *bool - typ string + queryString string + defaultField string + defaultOperator string + analyzer string + quoteAnalyzer string + quoteFieldSuffix string + autoGeneratePhraseQueries *bool + allowLeadingWildcard *bool + lowercaseExpandedTerms *bool + enablePositionIncrements *bool + analyzeWildcard *bool + locale string // Deprecated: Decision is now made by the analyzer. + boost *float64 + fuzziness string + fuzzyPrefixLength *int + fuzzyMaxExpansions *int + fuzzyRewrite string + phraseSlop *int + fields []string + fieldBoosts map[string]*float64 + useDisMax *bool + tieBreaker *float64 + rewrite string + minimumShouldMatch string + lenient *bool + queryName string + timeZone string + maxDeterminizedStates *int + escape *bool + splitOnWhitespace *bool + useAllFields *bool } // NewQueryStringQuery creates and initializes a new QueryStringQuery. @@ -66,10 +69,11 @@ func (q *QueryStringQuery) Field(field string) *QueryStringQuery { return q } -// Type sets how multiple fields should be combined to build textual part queries, -// e.g. "best_fields". -func (q *QueryStringQuery) Type(typ string) *QueryStringQuery { - q.typ = typ +// AllFields tells the query string query to use all fields explicitly, +// even if _all is enabled. If the "default_field" parameter or "fields" +// are specified, they will be ignored. +func (q *QueryStringQuery) AllFields(useAllFields bool) *QueryStringQuery { + q.useAllFields = &useAllFields return q } @@ -80,6 +84,14 @@ func (q *QueryStringQuery) FieldWithBoost(field string, boost float64) *QueryStr return q } +// UseDisMax specifies whether to combine queries using dis max or boolean +// query when more zhan one field is used with the query string. Defaults +// to dismax (true). +func (q *QueryStringQuery) UseDisMax(useDisMax bool) *QueryStringQuery { + q.useDisMax = &useDisMax + return q +} + // TieBreaker is used when more than one field is used with the query string, // and combined queries are using dismax. func (q *QueryStringQuery) TieBreaker(tieBreaker float64) *QueryStringQuery { @@ -117,6 +129,15 @@ func (q *QueryStringQuery) QuoteAnalyzer(quoteAnalyzer string) *QueryStringQuery return q } +// AutoGeneratePhraseQueries indicates whether or not phrase queries will +// be automatically generated when the analyzer returns more then one term +// from whitespace delimited text. Set to false if phrase queries should only +// be generated when surrounded by double quotes. +func (q *QueryStringQuery) AutoGeneratePhraseQueries(autoGeneratePhraseQueries bool) *QueryStringQuery { + q.autoGeneratePhraseQueries = &autoGeneratePhraseQueries + return q +} + // MaxDeterminizedState protects against too-difficult regular expression queries. func (q *QueryStringQuery) MaxDeterminizedState(maxDeterminizedStates int) *QueryStringQuery { q.maxDeterminizedStates = &maxDeterminizedStates @@ -132,8 +153,6 @@ func (q *QueryStringQuery) AllowLeadingWildcard(allowLeadingWildcard bool) *Quer // LowercaseExpandedTerms indicates whether terms of wildcard, prefix, fuzzy // and range queries are automatically lower-cased or not. Default is true. -// -// Deprecated: Decision is now made by the analyzer. func (q *QueryStringQuery) LowercaseExpandedTerms(lowercaseExpandedTerms bool) *QueryStringQuery { q.lowercaseExpandedTerms = &lowercaseExpandedTerms return q @@ -245,6 +264,13 @@ func (q *QueryStringQuery) Escape(escape bool) *QueryStringQuery { return q } +// SplitOnWhitespace indicates whether query text should be split on whitespace +// prior to analysis. +func (q *QueryStringQuery) SplitOnWhitespace(splitOnWhitespace bool) *QueryStringQuery { + q.splitOnWhitespace = &splitOnWhitespace + return q +} + // Source returns JSON for the query. func (q *QueryStringQuery) Source() (interface{}, error) { source := make(map[string]interface{}) @@ -276,6 +302,9 @@ func (q *QueryStringQuery) Source() (interface{}, error) { if q.tieBreaker != nil { query["tie_breaker"] = *q.tieBreaker } + if q.useDisMax != nil { + query["use_dis_max"] = *q.useDisMax + } if q.defaultOperator != "" { query["default_operator"] = q.defaultOperator } @@ -285,6 +314,9 @@ func (q *QueryStringQuery) Source() (interface{}, error) { if q.quoteAnalyzer != "" { query["quote_analyzer"] = q.quoteAnalyzer } + if q.autoGeneratePhraseQueries != nil { + query["auto_generate_phrase_queries"] = *q.autoGeneratePhraseQueries + } if q.maxDeterminizedStates != nil { query["max_determinized_states"] = *q.maxDeterminizedStates } @@ -342,8 +374,11 @@ func (q *QueryStringQuery) Source() (interface{}, error) { if q.escape != nil { query["escape"] = *q.escape } - if q.typ != "" { - query["type"] = q.typ + if q.splitOnWhitespace != nil { + query["split_on_whitespace"] = *q.splitOnWhitespace + } + if q.useAllFields != nil { + query["all_fields"] = *q.useAllFields } return source, nil diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_query_string_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_query_string_test.go deleted file mode 100644 index 5030c3382..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_query_string_test.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestQueryStringQuery(t *testing.T) { - q := NewQueryStringQuery(`this AND that OR thus`) - q = q.DefaultField("content") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query_string":{"default_field":"content","query":"this AND that OR thus"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestQueryStringQueryTimeZone(t *testing.T) { - q := NewQueryStringQuery(`tweet_date:[2015-01-01 TO 2017-12-31]`) - q = q.TimeZone("Europe/Berlin") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query_string":{"query":"tweet_date:[2015-01-01 TO 2017-12-31]","time_zone":"Europe/Berlin"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_range.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_range.go index 1b92dee23..da7b5f965 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_range.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_range.go @@ -7,7 +7,7 @@ package elastic // RangeQuery matches documents with fields that have terms within a certain range. // // For details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-range-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-range-query.html type RangeQuery struct { name string from interface{} @@ -18,6 +18,7 @@ type RangeQuery struct { boost *float64 queryName string format string + relation string } // NewRangeQuery creates and initializes a new RangeQuery. @@ -112,6 +113,13 @@ func (q *RangeQuery) Format(format string) *RangeQuery { return q } +// Relation is used for range fields. which can be one of +// "within", "contains", "intersects" (default) and "disjoint". +func (q *RangeQuery) Relation(relation string) *RangeQuery { + q.relation = relation + return q +} + // Source returns JSON for the query. func (q *RangeQuery) Source() (interface{}, error) { source := make(map[string]interface{}) @@ -130,6 +138,9 @@ func (q *RangeQuery) Source() (interface{}, error) { if q.format != "" { params["format"] = q.format } + if q.relation != "" { + params["relation"] = q.relation + } if q.boost != nil { params["boost"] = *q.boost } diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_range_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_range_test.go deleted file mode 100644 index 86d018a86..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_range_test.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestRangeQuery(t *testing.T) { - q := NewRangeQuery("postDate").From("2010-03-01").To("2010-04-01").Boost(3) - q = q.QueryName("my_query") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"_name":"my_query","postDate":{"boost":3,"from":"2010-03-01","include_lower":true,"include_upper":true,"to":"2010-04-01"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeQueryWithTimeZone(t *testing.T) { - q := NewRangeQuery("born"). - Gte("2012-01-01"). - Lte("now"). - TimeZone("+1:00") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"born":{"from":"2012-01-01","include_lower":true,"include_upper":true,"time_zone":"+1:00","to":"now"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeQueryWithFormat(t *testing.T) { - q := NewRangeQuery("born"). - Gte("2012/01/01"). - Lte("now"). - Format("yyyy/MM/dd") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"born":{"format":"yyyy/MM/dd","from":"2012/01/01","include_lower":true,"include_upper":true,"to":"now"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_raw_string_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_raw_string_test.go deleted file mode 100644 index 5bb3dac41..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_raw_string_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestRawStringQuery(t *testing.T) { - q := RawStringQuery(`{"match_all":{}}`) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match_all":{}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestNewRawStringQuery(t *testing.T) { - q := NewRawStringQuery(`{"match_all":{}}`) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match_all":{}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_regexp.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_regexp.go index a08b533cb..636e4baf9 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_regexp.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_regexp.go @@ -7,7 +7,7 @@ package elastic // RegexpQuery allows you to use regular expression term queries. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-regexp-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-regexp-query.html type RegexpQuery struct { name string regexp string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_regexp_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_regexp_test.go deleted file mode 100644 index d30c0a36d..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_regexp_test.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestRegexpQuery(t *testing.T) { - q := NewRegexpQuery("name.first", "s.*y") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"regexp":{"name.first":{"value":"s.*y"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRegexpQueryWithOptions(t *testing.T) { - q := NewRegexpQuery("name.first", "s.*y"). - Boost(1.2). - Flags("INTERSECTION|COMPLEMENT|EMPTY"). - QueryName("my_query_name") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"regexp":{"name.first":{"boost":1.2,"flags":"INTERSECTION|COMPLEMENT|EMPTY","name":"my_query_name","value":"s.*y"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_script.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_script.go index d430f4c8f..664555b3e 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_script.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_script.go @@ -9,7 +9,7 @@ import "errors" // ScriptQuery allows to define scripts as filters. // // For details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-script-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-script-query.html type ScriptQuery struct { script *Script queryName string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_script_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_script_test.go deleted file mode 100644 index 66ec106d5..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_script_test.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestScriptQuery(t *testing.T) { - q := NewScriptQuery(NewScript("doc['num1'.value > 1")) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"script":{"script":{"source":"doc['num1'.value \u003e 1"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestScriptQueryWithParams(t *testing.T) { - q := NewScriptQuery(NewScript("doc['num1'.value > 1")) - q = q.QueryName("MyQueryName") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"script":{"_name":"MyQueryName","script":{"source":"doc['num1'.value \u003e 1"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_simple_query_string.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_simple_query_string.go index 462ea5533..764fa0a20 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_simple_query_string.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_simple_query_string.go @@ -15,7 +15,7 @@ import ( // and discards invalid parts of the query. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-simple-query-string-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-simple-query-string-query.html type SimpleQueryStringQuery struct { queryText string analyzer string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_simple_query_string_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_simple_query_string_test.go deleted file mode 100644 index ea4a341ec..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_simple_query_string_test.go +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "testing" -) - -func TestSimpleQueryStringQuery(t *testing.T) { - q := NewSimpleQueryStringQuery(`"fried eggs" +(eggplant | potato) -frittata`) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"simple_query_string":{"query":"\"fried eggs\" +(eggplant | potato) -frittata"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSimpleQueryStringQueryExec(t *testing.T) { - // client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - searchResult, err := client.Search(). - Index(testIndexName). - Query(NewSimpleQueryStringQuery("+Golang +Elasticsearch")). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 1 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 1, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 1 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 1, len(searchResult.Hits.Hits)) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_slice.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_slice.go index e1b1db928..0ebf88009 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_slice.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_slice.go @@ -6,7 +6,7 @@ package elastic // SliceQuery allows to partition the documents into several slices. // It is used e.g. to slice scroll operations in Elasticsearch 5.0 or later. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-scroll.html#sliced-scroll +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-request-scroll.html#sliced-scroll // for details. type SliceQuery struct { field string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_slice_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_slice_test.go deleted file mode 100644 index 0589f4e29..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_slice_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSliceQuery(t *testing.T) { - q := NewSliceQuery().Field("date").Id(0).Max(2) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"field":"date","id":0,"max":2}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_term.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_term.go index 9a445e0ec..051f6dee3 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_term.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_term.go @@ -8,7 +8,7 @@ package elastic // in the inverted index. // // For details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-term-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-term-query.html type TermQuery struct { name string value interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_term_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_term_test.go deleted file mode 100644 index f800fa954..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_term_test.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTermQuery(t *testing.T) { - q := NewTermQuery("user", "ki") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"term":{"user":"ki"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermQueryWithOptions(t *testing.T) { - q := NewTermQuery("user", "ki") - q = q.Boost(2.79) - q = q.QueryName("my_tq") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"term":{"user":{"_name":"my_tq","boost":2.79,"value":"ki"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_terms.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_terms.go index 3649576dc..794c1f31c 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_terms.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_terms.go @@ -8,7 +8,7 @@ package elastic // of the provided terms (not analyzed). // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-terms-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-terms-query.html type TermsQuery struct { name string values []interface{} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_terms_set.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_terms_set.go deleted file mode 100644 index be410a1a7..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_terms_set.go +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// TermsSetQuery returns any documents that match with at least -// one or more of the provided terms. The terms are not analyzed -// and thus must match exactly. The number of terms that must -// match varies per document and is either controlled by a -// minimum should match field or computed per document in a -// minimum should match script. -// -// For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.1/query-dsl-terms-set-query.html -type TermsSetQuery struct { - name string - values []interface{} - minimumShouldMatchField string - minimumShouldMatchScript *Script - queryName string - boost *float64 -} - -// NewTermsSetQuery creates and initializes a new TermsSetQuery. -func NewTermsSetQuery(name string, values ...interface{}) *TermsSetQuery { - q := &TermsSetQuery{ - name: name, - } - if len(values) > 0 { - q.values = append(q.values, values...) - } - return q -} - -// MinimumShouldMatchField specifies the field to match. -func (q *TermsSetQuery) MinimumShouldMatchField(minimumShouldMatchField string) *TermsSetQuery { - q.minimumShouldMatchField = minimumShouldMatchField - return q -} - -// MinimumShouldMatchScript specifies the script to match. -func (q *TermsSetQuery) MinimumShouldMatchScript(minimumShouldMatchScript *Script) *TermsSetQuery { - q.minimumShouldMatchScript = minimumShouldMatchScript - return q -} - -// Boost sets the boost for this query. -func (q *TermsSetQuery) Boost(boost float64) *TermsSetQuery { - q.boost = &boost - return q -} - -// QueryName sets the query name for the filter that can be used -// when searching for matched_filters per hit -func (q *TermsSetQuery) QueryName(queryName string) *TermsSetQuery { - q.queryName = queryName - return q -} - -// Source creates the query source for the term query. -func (q *TermsSetQuery) Source() (interface{}, error) { - // {"terms_set":{"codes":{"terms":["abc","def"],"minimum_should_match_field":"required_matches"}}} - source := make(map[string]interface{}) - inner := make(map[string]interface{}) - params := make(map[string]interface{}) - inner[q.name] = params - source["terms_set"] = inner - - // terms - params["terms"] = q.values - - // minimum_should_match_field - if match := q.minimumShouldMatchField; match != "" { - params["minimum_should_match_field"] = match - } - - // minimum_should_match_script - if match := q.minimumShouldMatchScript; match != nil { - src, err := match.Source() - if err != nil { - return nil, err - } - params["minimum_should_match_script"] = src - } - - // Common parameters for all queries - if q.boost != nil { - params["boost"] = *q.boost - } - if q.queryName != "" { - params["_name"] = q.queryName - } - - return source, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_terms_set_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_terms_set_test.go deleted file mode 100644 index e13fbfb2f..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_terms_set_test.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "testing" -) - -func TestTermsSetQueryWithField(t *testing.T) { - q := NewTermsSetQuery("codes", "abc", "def", "ghi").MinimumShouldMatchField("required_matches") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms_set":{"codes":{"minimum_should_match_field":"required_matches","terms":["abc","def","ghi"]}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermsSetQueryWithScript(t *testing.T) { - q := NewTermsSetQuery("codes", "abc", "def", "ghi"). - MinimumShouldMatchScript( - NewScript(`Math.min(params.num_terms, doc['required_matches'].value)`), - ) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms_set":{"codes":{"minimum_should_match_script":{"source":"Math.min(params.num_terms, doc['required_matches'].value)"},"terms":["abc","def","ghi"]}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchTermsSetQuery(t *testing.T) { - //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents - searchResult, err := client.Search(). - Index(testIndexName). - Query( - NewTermsSetQuery("user", "olivere", "sandrae"). - MinimumShouldMatchField("retweets"), - ). - Pretty(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if got, want := searchResult.Hits.TotalHits, int64(3); got != want { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", want, got) - } - if got, want := len(searchResult.Hits.Hits), 3; got != want { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", want, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_terms_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_terms_test.go deleted file mode 100644 index 72f472d17..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_terms_test.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTermsQuery(t *testing.T) { - q := NewTermsQuery("user", "ki") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms":{"user":["ki"]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermsQueryWithEmptyArray(t *testing.T) { - included := make([]interface{}, 0) - q := NewTermsQuery("tags", included...) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms":{"tags":[]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermsQueryWithTermsLookup(t *testing.T) { - q := NewTermsQuery("user"). - TermsLookup(NewTermsLookup().Index("users").Type("user").Id("2").Path("followers")) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms":{"user":{"id":"2","index":"users","path":"followers","type":"user"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermQuerysWithOptions(t *testing.T) { - q := NewTermsQuery("user", "ki", "ko") - q = q.Boost(2.79) - q = q.QueryName("my_tq") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms":{"_name":"my_tq","boost":2.79,"user":["ki","ko"]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_type.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_type.go index e7aef30df..70ace4541 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_type.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_type.go @@ -7,7 +7,7 @@ package elastic // TypeQuery filters documents matching the provided document / mapping type. // // For details, see: -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-type-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-type-query.html type TypeQuery struct { typ string } diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_type_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_type_test.go deleted file mode 100644 index 176b82abb..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_type_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTypeQuery(t *testing.T) { - q := NewTypeQuery("my_type") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"type":{"value":"my_type"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_wildcard.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_wildcard.go index ea8a0901c..35f481542 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_wildcard.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_queries_wildcard.go @@ -13,7 +13,7 @@ package elastic // The wildcard query maps to Lucene WildcardQuery. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-wildcard-query.html +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-wildcard-query.html type WildcardQuery struct { name string wildcard string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_queries_wildcard_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_queries_wildcard_test.go deleted file mode 100644 index b41c8ab7b..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_queries_wildcard_test.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic_test - -import ( - "context" - "encoding/json" - "testing" - - "github.com/olivere/elastic" -) - -func ExampleWildcardQuery() { - // Get a client to the local Elasticsearch instance. - client, err := elastic.NewClient() - if err != nil { - // Handle error - panic(err) - } - - // Define wildcard query - q := elastic.NewWildcardQuery("user", "oli*er?").Boost(1.2) - searchResult, err := client.Search(). - Index("twitter"). // search in index "twitter" - Query(q). // use wildcard query defined above - Do(context.TODO()) // execute - if err != nil { - // Handle error - panic(err) - } - _ = searchResult -} - -func TestWildcardQuery(t *testing.T) { - q := elastic.NewWildcardQuery("user", "ki*y??") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"wildcard":{"user":{"wildcard":"ki*y??"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestWildcardQueryWithBoost(t *testing.T) { - q := elastic.NewWildcardQuery("user", "ki*y??").Boost(1.2) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"wildcard":{"user":{"boost":1.2,"wildcard":"ki*y??"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_request.go b/vendor/gopkg.in/olivere/elastic.v5/search_request.go index 7ee4ce82c..f9dff52d9 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_request.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_request.go @@ -13,7 +13,7 @@ import ( // query details (see SearchSource). // It is used in combination with MultiSearch. type SearchRequest struct { - searchType string // default in ES is "query_then_fetch" + searchType string indices []string types []string routing *string @@ -31,38 +31,29 @@ func NewSearchRequest() *SearchRequest { return &SearchRequest{} } -// SearchRequest must be one of "query_then_fetch", "query_and_fetch", -// "scan", "count", "dfs_query_then_fetch", or "dfs_query_and_fetch". -// Use one of the constants defined via SearchType. +// SearchRequest must be one of dfs_query_then_fetch, query_then_fetch +// or query_and_fetch (deprecated in 5.3). func (r *SearchRequest) SearchType(searchType string) *SearchRequest { r.searchType = searchType return r } +// SearchTypeDfsQueryThenFetch sets search type to dfs_query_then_fetch. func (r *SearchRequest) SearchTypeDfsQueryThenFetch() *SearchRequest { return r.SearchType("dfs_query_then_fetch") } -func (r *SearchRequest) SearchTypeDfsQueryAndFetch() *SearchRequest { - return r.SearchType("dfs_query_and_fetch") -} - +// SearchTypeQueryThenFetch sets search type to query_then_fetch. func (r *SearchRequest) SearchTypeQueryThenFetch() *SearchRequest { return r.SearchType("query_then_fetch") } +// SearchTypeQueryAndFetch sets search type to query_and_fetch which +// was deprecated in 5.3. func (r *SearchRequest) SearchTypeQueryAndFetch() *SearchRequest { return r.SearchType("query_and_fetch") } -func (r *SearchRequest) SearchTypeScan() *SearchRequest { - return r.SearchType("scan") -} - -func (r *SearchRequest) SearchTypeCount() *SearchRequest { - return r.SearchType("count") -} - func (r *SearchRequest) Index(indices ...string) *SearchRequest { r.indices = append(r.indices, indices...) return r @@ -139,7 +130,7 @@ func (r *SearchRequest) Source(source interface{}) *SearchRequest { // header is used e.g. by MultiSearch to get information about the search header // of one SearchRequest. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-multi-search.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-multi-search.html func (r *SearchRequest) header() interface{} { h := make(map[string]interface{}) if r.searchType != "" { @@ -192,7 +183,7 @@ func (r *SearchRequest) header() interface{} { // // Body is used e.g. by MultiSearch to get information about the search body // of one SearchRequest. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-multi-search.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-multi-search.html func (r *SearchRequest) Body() (string, error) { switch t := r.source.(type) { default: diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_request_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_request_test.go deleted file mode 100644 index fa03af2c8..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_request_test.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - _ "net/http" - "testing" -) - -func TestSearchRequestIndex(t *testing.T) { - builder := NewSearchRequest().Index("test") - data, err := json.Marshal(builder.header()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"index":"test"}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchRequestIndices(t *testing.T) { - builder := NewSearchRequest().Index("test", "test2") - data, err := json.Marshal(builder.header()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"indices":["test","test2"]}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchRequestHasIndices(t *testing.T) { - builder := NewSearchRequest() - if builder.HasIndices() { - t.Errorf("expected HasIndices to return true; got %v", builder.HasIndices()) - } - builder = builder.Index("test", "test2") - if !builder.HasIndices() { - t.Errorf("expected HasIndices to return false; got %v", builder.HasIndices()) - } -} - -func TestSearchRequestIgnoreUnavailable(t *testing.T) { - builder := NewSearchRequest().Index("test").IgnoreUnavailable(true) - data, err := json.Marshal(builder.header()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"ignore_unavailable":true,"index":"test"}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_shards.go b/vendor/gopkg.in/olivere/elastic.v5/search_shards.go new file mode 100644 index 000000000..edd9b0547 --- /dev/null +++ b/vendor/gopkg.in/olivere/elastic.v5/search_shards.go @@ -0,0 +1,180 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "gopkg.in/olivere/elastic.v5/uritemplates" +) + +// SearchShardsService returns the indices and shards that a search request would be executed against. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-shards.html +type SearchShardsService struct { + client *Client + pretty bool + index []string + routing string + local *bool + preference string + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string +} + +// NewSearchShardsService creates a new SearchShardsService. +func NewSearchShardsService(client *Client) *SearchShardsService { + return &SearchShardsService{ + client: client, + } +} + +// Index sets the names of the indices to restrict the results. +func (s *SearchShardsService) Index(index ...string) *SearchShardsService { + s.index = append(s.index, index...) + return s +} + +//A boolean value whether to read the cluster state locally in order to +//determine where shards are allocated instead of using the Master node’s cluster state. +func (s *SearchShardsService) Local(local bool) *SearchShardsService { + s.local = &local + return s +} + +// Routing sets a specific routing value. +func (s *SearchShardsService) Routing(routing string) *SearchShardsService { + s.routing = routing + return s +} + +// Preference specifies the node or shard the operation should be performed on (default: random). +func (s *SearchShardsService) Preference(preference string) *SearchShardsService { + s.preference = preference + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *SearchShardsService) Pretty(pretty bool) *SearchShardsService { + s.pretty = pretty + return s +} + +// IgnoreUnavailable indicates whether the specified concrete indices +// should be ignored when unavailable (missing or closed). +func (s *SearchShardsService) IgnoreUnavailable(ignoreUnavailable bool) *SearchShardsService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. (This includes `_all` string +// or when no indices have been specified). +func (s *SearchShardsService) AllowNoIndices(allowNoIndices bool) *SearchShardsService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *SearchShardsService) ExpandWildcards(expandWildcards string) *SearchShardsService { + s.expandWildcards = expandWildcards + return s +} + +// buildURL builds the URL for the operation. +func (s *SearchShardsService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/{index}/_search_shards", map[string]string{ + "index": strings.Join(s.index, ","), + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.preference != "" { + params.Set("preference", s.preference) + } + if s.local != nil { + params.Set("local", fmt.Sprintf("%v", *s.local)) + } + if s.routing != "" { + params.Set("routing", s.routing) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *SearchShardsService) Validate() error { + var invalid []string + if len(s.index) < 1 { + invalid = append(invalid, "Index") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *SearchShardsService) Do(ctx context.Context) (*SearchShardsResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(SearchShardsResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// SearchShardsResponse is the response of SearchShardsService.Do. +type SearchShardsResponse struct { + Nodes map[string]interface{} `json:"nodes"` + Indices map[string]interface{} `json:"indices"` + Shards [][]ShardsInfo `json:"shards"` +} + +type ShardsInfo struct { + Index string `json:"index"` + Node string `json:"node"` + Primary bool `json:"primary"` + Shard uint `json:"shard"` + State string `json:"state"` + AllocationId interface{} `json:"allocation_id"` + RelocatingNode bool `json:"relocating_node"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_source.go b/vendor/gopkg.in/olivere/elastic.v5/search_source.go index 77b1c5093..be63b5cd9 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_source.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_source.go @@ -77,7 +77,7 @@ func (s *SearchSource) PostFilter(postFilter Query) *SearchSource { // Slice allows partitioning the documents in multiple slices. // It is e.g. used to slice a scroll operation, supported in // Elasticsearch 5.0 or later. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-scroll.html#sliced-scroll +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-request-scroll.html#sliced-scroll // for details. func (s *SearchSource) Slice(sliceQuery Query) *SearchSource { s.sliceQuery = sliceQuery @@ -129,8 +129,8 @@ func (s *SearchSource) TimeoutInMillis(timeoutInMillis int) *SearchSource { return s } -// TerminateAfter allows the request to stop after the given number -// of search hits are collected. +// TerminateAfter specifies the maximum number of documents to collect for +// each shard, upon reaching which the query execution will terminate early. func (s *SearchSource) TerminateAfter(terminateAfter int) *SearchSource { s.terminateAfter = &terminateAfter return s @@ -168,7 +168,7 @@ func (s *SearchSource) TrackScores(trackScores bool) *SearchSource { // SearchAfter allows a different form of pagination by using a live cursor, // using the results of the previous page to help the retrieval of the next. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-search-after.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-request-search-after.html func (s *SearchSource) SearchAfter(sortValues ...interface{}) *SearchSource { s.searchAfterSortValues = append(s.searchAfterSortValues, sortValues...) return s diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_source_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_source_test.go deleted file mode 100644 index a78991bf0..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_source_test.go +++ /dev/null @@ -1,295 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSearchSourceMatchAllQuery(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceNoStoredFields(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ).NoStoredFields() - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceStoredFields(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ).StoredFields("message", "tags") - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query":{"match_all":{}},"stored_fields":["message","tags"]}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceFetchSourceDisabled(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ).FetchSource(false) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_source":false,"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceFetchSourceByWildcards(t *testing.T) { - matchAllQ := NewMatchAllQuery() - fsc := NewFetchSourceContext(true).Include("obj1.*", "obj2.*").Exclude("*.description") - builder := NewSearchSource().Query(matchAllQ).FetchSourceContext(fsc) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_source":{"excludes":["*.description"],"includes":["obj1.*","obj2.*"]},"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceDocvalueFields(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ).DocvalueFields("test1", "test2") - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"docvalue_fields":["test1","test2"],"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceScriptFields(t *testing.T) { - matchAllQ := NewMatchAllQuery() - sf1 := NewScriptField("test1", NewScript("doc['my_field_name'].value * 2")) - sf2 := NewScriptField("test2", NewScript("doc['my_field_name'].value * factor").Param("factor", 3.1415927)) - builder := NewSearchSource().Query(matchAllQ).ScriptFields(sf1, sf2) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query":{"match_all":{}},"script_fields":{"test1":{"script":{"source":"doc['my_field_name'].value * 2"}},"test2":{"script":{"params":{"factor":3.1415927},"source":"doc['my_field_name'].value * factor"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourcePostFilter(t *testing.T) { - matchAllQ := NewMatchAllQuery() - pf := NewTermQuery("tag", "important") - builder := NewSearchSource().Query(matchAllQ).PostFilter(pf) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"post_filter":{"term":{"tag":"important"}},"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceHighlight(t *testing.T) { - matchAllQ := NewMatchAllQuery() - hl := NewHighlight().Field("content") - builder := NewSearchSource().Query(matchAllQ).Highlight(hl) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"highlight":{"fields":{"content":{}}},"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceRescoring(t *testing.T) { - matchAllQ := NewMatchAllQuery() - rescorerQuery := NewMatchPhraseQuery("field1", "the quick brown fox").Slop(2) - rescorer := NewQueryRescorer(rescorerQuery) - rescorer = rescorer.QueryWeight(0.7) - rescorer = rescorer.RescoreQueryWeight(1.2) - rescore := NewRescore().WindowSize(50).Rescorer(rescorer) - builder := NewSearchSource().Query(matchAllQ).Rescorer(rescore) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query":{"match_all":{}},"rescore":{"query":{"query_weight":0.7,"rescore_query":{"match_phrase":{"field1":{"query":"the quick brown fox","slop":2}}},"rescore_query_weight":1.2},"window_size":50}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceIndexBoost(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ).IndexBoost("index1", 1.4).IndexBoost("index2", 1.3) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"indices_boost":{"index1":1.4,"index2":1.3},"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceMixDifferentSorters(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ). - Sort("a", false). - SortWithInfo(SortInfo{Field: "b", Ascending: true}). - SortBy(NewScriptSort(NewScript("doc['field_name'].value * factor").Param("factor", 1.1), "number")) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query":{"match_all":{}},"sort":[{"a":{"order":"desc"}},{"b":{"order":"asc"}},{"_script":{"order":"asc","script":{"params":{"factor":1.1},"source":"doc['field_name'].value * factor"},"type":"number"}}]}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceInnerHits(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ). - InnerHit("comments", NewInnerHit().Type("comment").Query(NewMatchQuery("user", "olivere"))). - InnerHit("views", NewInnerHit().Path("view")) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"inner_hits":{"comments":{"type":{"comment":{"query":{"match":{"user":{"query":"olivere"}}}}}},"views":{"path":{"view":{}}}},"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceSearchAfter(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ).SearchAfter(1463538857, "tweet#654323") - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query":{"match_all":{}},"search_after":[1463538857,"tweet#654323"]}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceProfiledQuery(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ).Profile(true) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"profile":true,"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_suggester_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_suggester_test.go deleted file mode 100644 index 33bdc9275..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_suggester_test.go +++ /dev/null @@ -1,355 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestTermSuggester(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - tsName := "my-suggestions" - ts := NewTermSuggester(tsName) - ts = ts.Text("Goolang") - ts = ts.Field("message") - - searchResult, err := client.Search(). - Index(testIndexName). - Query(NewMatchAllQuery()). - Suggester(ts). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Suggest == nil { - t.Errorf("expected SearchResult.Suggest != nil; got nil") - } - mySuggestions, found := searchResult.Suggest[tsName] - if !found { - t.Errorf("expected to find SearchResult.Suggest[%s]; got false", tsName) - } - if mySuggestions == nil { - t.Errorf("expected SearchResult.Suggest[%s] != nil; got nil", tsName) - } - - if len(mySuggestions) != 1 { - t.Errorf("expected 1 suggestion; got %d", len(mySuggestions)) - } - mySuggestion := mySuggestions[0] - if mySuggestion.Text != "goolang" { - t.Errorf("expected Text = 'goolang'; got %s", mySuggestion.Text) - } - if mySuggestion.Offset != 0 { - t.Errorf("expected Offset = %d; got %d", 0, mySuggestion.Offset) - } - if mySuggestion.Length != 7 { - t.Errorf("expected Length = %d; got %d", 7, mySuggestion.Length) - } - if len(mySuggestion.Options) != 1 { - t.Errorf("expected 1 option; got %d", len(mySuggestion.Options)) - } - myOption := mySuggestion.Options[0] - if myOption.Text != "golang" { - t.Errorf("expected Text = 'golang'; got %s", myOption.Text) - } -} - -func TestPhraseSuggester(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - phraseSuggesterName := "my-suggestions" - ps := NewPhraseSuggester(phraseSuggesterName) - ps = ps.Text("Goolang") - ps = ps.Field("message") - - searchResult, err := client.Search(). - Index(testIndexName). - Query(NewMatchAllQuery()). - Suggester(ps). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Suggest == nil { - t.Errorf("expected SearchResult.Suggest != nil; got nil") - } - mySuggestions, found := searchResult.Suggest[phraseSuggesterName] - if !found { - t.Errorf("expected to find SearchResult.Suggest[%s]; got false", phraseSuggesterName) - } - if mySuggestions == nil { - t.Errorf("expected SearchResult.Suggest[%s] != nil; got nil", phraseSuggesterName) - } - - if len(mySuggestions) != 1 { - t.Errorf("expected 1 suggestion; got %d", len(mySuggestions)) - } - mySuggestion := mySuggestions[0] - if mySuggestion.Text != "Goolang" { - t.Errorf("expected Text = 'Goolang'; got %s", mySuggestion.Text) - } - if mySuggestion.Offset != 0 { - t.Errorf("expected Offset = %d; got %d", 0, mySuggestion.Offset) - } - if mySuggestion.Length != 7 { - t.Errorf("expected Length = %d; got %d", 7, mySuggestion.Length) - } - if want, have := 1, len(mySuggestion.Options); want != have { - t.Errorf("expected len(options) = %d; got %d", want, have) - } - if want, have := "golang", mySuggestion.Options[0].Text; want != have { - t.Errorf("expected options[0].Text = %q; got %q", want, have) - } - if score := mySuggestion.Options[0].Score; score <= 0.0 { - t.Errorf("expected options[0].Score > 0.0; got %v", score) - } -} - -func TestCompletionSuggester(t *testing.T) { - client := setupTestClientAndCreateIndex(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) - - tweet1 := tweet{ - User: "olivere", - Message: "Welcome to Golang and Elasticsearch.", - Suggest: NewSuggestField("Golang", "Elasticsearch"), - } - tweet2 := tweet{ - User: "olivere", - Message: "Another unrelated topic.", - Suggest: NewSuggestField("Another unrelated topic."), - } - tweet3 := tweet{ - User: "sandrae", - Message: "Cycling is fun.", - Suggest: NewSuggestField("Cycling is fun."), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - suggesterName := "my-suggestions" - cs := NewCompletionSuggester(suggesterName) - cs = cs.Text("Golang") - cs = cs.Field("suggest_field") - - searchResult, err := client.Search(). - Index(testIndexName). - Query(NewMatchAllQuery()). - Suggester(cs). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Suggest == nil { - t.Errorf("expected SearchResult.Suggest != nil; got nil") - } - mySuggestions, found := searchResult.Suggest[suggesterName] - if !found { - t.Errorf("expected to find SearchResult.Suggest[%s]; got false", suggesterName) - } - if mySuggestions == nil { - t.Errorf("expected SearchResult.Suggest[%s] != nil; got nil", suggesterName) - } - - if len(mySuggestions) != 1 { - t.Errorf("expected 1 suggestion; got %d", len(mySuggestions)) - } - mySuggestion := mySuggestions[0] - if mySuggestion.Text != "Golang" { - t.Errorf("expected Text = 'Golang'; got %s", mySuggestion.Text) - } - if mySuggestion.Offset != 0 { - t.Errorf("expected Offset = %d; got %d", 0, mySuggestion.Offset) - } - if mySuggestion.Length != 6 { - t.Errorf("expected Length = %d; got %d", 7, mySuggestion.Length) - } - if len(mySuggestion.Options) != 1 { - t.Errorf("expected 1 option; got %d", len(mySuggestion.Options)) - } - myOption := mySuggestion.Options[0] - if myOption.Text != "Golang" { - t.Errorf("expected Text = 'Golang'; got %s", myOption.Text) - } -} - -func TestContextSuggester(t *testing.T) { - client := setupTestClientAndCreateIndex(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) - - // TODO make a nice way of creating tweets, as currently the context fields are unsupported as part of the suggestion fields - tweet1 := ` - { - "user":"olivere", - "message":"Welcome to Golang and Elasticsearch.", - "retweets":0, - "created":"0001-01-01T00:00:00Z", - "suggest_field":{ - "input":[ - "Golang", - "Elasticsearch" - ], - "contexts":{ - "user_name": ["olivere"] - } - } - } - ` - tweet2 := ` - { - "user":"sandrae", - "message":"I like golfing", - "retweets":0, - "created":"0001-01-01T00:00:00Z", - "suggest_field":{ - "input":[ - "Golfing" - ], - "contexts":{ - "user_name": ["sandrae"] - } - } - } - ` - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyString(tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyString(tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - suggesterName := "my-suggestions" - cs := NewContextSuggester(suggesterName) - cs = cs.Prefix("Gol") - cs = cs.Field("suggest_field") - cs = cs.ContextQueries( - NewSuggesterCategoryQuery("user_name", "olivere"), - ) - - searchResult, err := client.Search(). - Index(testIndexName). - Suggester(cs). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Suggest == nil { - t.Errorf("expected SearchResult.Suggest != nil; got nil") - } - mySuggestions, found := searchResult.Suggest[suggesterName] - if !found { - t.Errorf("expected to find SearchResult.Suggest[%s]; got false", suggesterName) - } - if mySuggestions == nil { - t.Errorf("expected SearchResult.Suggest[%s] != nil; got nil", suggesterName) - } - - // sandra's tweet is not returned because of the user_name context - if len(mySuggestions) != 1 { - t.Errorf("expected 1 suggestion; got %d", len(mySuggestions)) - } - mySuggestion := mySuggestions[0] - if mySuggestion.Text != "Gol" { - t.Errorf("expected Text = 'Gol'; got %s", mySuggestion.Text) - } - if mySuggestion.Offset != 0 { - t.Errorf("expected Offset = %d; got %d", 0, mySuggestion.Offset) - } - if mySuggestion.Length != 3 { - t.Errorf("expected Length = %d; got %d", 3, mySuggestion.Length) - } - if len(mySuggestion.Options) != 1 { - t.Errorf("expected 1 option; got %d", len(mySuggestion.Options)) - } - myOption := mySuggestion.Options[0] - if myOption.Text != "Golang" { - t.Errorf("expected Text = 'Golang'; got %s", myOption.Text) - } - if myOption.Id != "1" { - t.Errorf("expected Id = '1'; got %s", myOption.Id) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_terms_lookup.go b/vendor/gopkg.in/olivere/elastic.v5/search_terms_lookup.go index 9a2456bdd..e59e15c12 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/search_terms_lookup.go +++ b/vendor/gopkg.in/olivere/elastic.v5/search_terms_lookup.go @@ -7,7 +7,7 @@ package elastic // TermsLookup encapsulates the parameters needed to fetch terms. // // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-terms-query.html#query-dsl-terms-lookup. +// https://www.elastic.co/guide/en/elasticsearch/reference/5.3/query-dsl-terms-query.html#query-dsl-terms-lookup. type TermsLookup struct { index string typ string diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_terms_lookup_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_terms_lookup_test.go deleted file mode 100644 index 369f72346..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_terms_lookup_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTermsLookup(t *testing.T) { - tl := NewTermsLookup().Index("users").Type("user").Id("2").Path("followers") - src, err := tl.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"id":"2","index":"users","path":"followers","type":"user"}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/search_test.go b/vendor/gopkg.in/olivere/elastic.v5/search_test.go deleted file mode 100644 index 586089aaa..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/search_test.go +++ /dev/null @@ -1,1320 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "reflect" - "testing" - "time" -) - -func TestSearchMatchAll(t *testing.T) { - //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents - searchResult, err := client.Search(). - Index(testIndexName). - Query(NewMatchAllQuery()). - Size(100). - Pretty(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if got, want := searchResult.Hits.TotalHits, int64(3); got != want { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", want, got) - } - if got, want := len(searchResult.Hits.Hits), 3; got != want { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", want, got) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} - -func TestSearchMatchAllWithRequestCacheDisabled(t *testing.T) { - //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents, with request cache disabled - searchResult, err := client.Search(). - Index(testIndexName). - Query(NewMatchAllQuery()). - Size(100). - Pretty(true). - RequestCache(false). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if got, want := searchResult.Hits.TotalHits, int64(3); got != want { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", want, got) - } - if got, want := len(searchResult.Hits.Hits), 3; got != want { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", want, got) - } -} - -func BenchmarkSearchMatchAll(b *testing.B) { - client := setupTestClientAndCreateIndexAndAddDocs(b) - - for n := 0; n < b.N; n++ { - // Match all should return all documents - all := NewMatchAllQuery() - searchResult, err := client.Search().Index(testIndexName).Query(all).Do(context.TODO()) - if err != nil { - b.Fatal(err) - } - if searchResult.Hits == nil { - b.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits == 0 { - b.Errorf("expected SearchResult.Hits.TotalHits > %d; got %d", 0, searchResult.Hits.TotalHits) - } - } -} - -func TestSearchResultTotalHits(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - - count, err := client.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - all := NewMatchAllQuery() - searchResult, err := client.Search().Index(testIndexName).Query(all).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - got := searchResult.TotalHits() - if got != count { - t.Fatalf("expected %d hits; got: %d", count, got) - } - - // No hits - searchResult = &SearchResult{} - got = searchResult.TotalHits() - if got != 0 { - t.Errorf("expected %d hits; got: %d", 0, got) - } -} - -func TestSearchResultWithProfiling(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - - all := NewMatchAllQuery() - searchResult, err := client.Search().Index(testIndexName).Query(all).Profile(true).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - if searchResult.Profile == nil { - t.Fatal("Profiled MatchAll query did not return profiling data with results") - } -} - -func TestSearchResultEach(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - - all := NewMatchAllQuery() - searchResult, err := client.Search().Index(testIndexName).Query(all).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Iterate over non-ptr type - var aTweet tweet - count := 0 - for _, item := range searchResult.Each(reflect.TypeOf(aTweet)) { - count++ - _, ok := item.(tweet) - if !ok { - t.Fatalf("expected hit to be serialized as tweet; got: %v", reflect.ValueOf(item)) - } - } - if count == 0 { - t.Errorf("expected to find some hits; got: %d", count) - } - - // Iterate over ptr-type - count = 0 - var aTweetPtr *tweet - for _, item := range searchResult.Each(reflect.TypeOf(aTweetPtr)) { - count++ - tw, ok := item.(*tweet) - if !ok { - t.Fatalf("expected hit to be serialized as tweet; got: %v", reflect.ValueOf(item)) - } - if tw == nil { - t.Fatal("expected hit to not be nil") - } - } - if count == 0 { - t.Errorf("expected to find some hits; got: %d", count) - } - - // Does not iterate when no hits are found - searchResult = &SearchResult{Hits: nil} - count = 0 - for _, item := range searchResult.Each(reflect.TypeOf(aTweet)) { - count++ - _ = item - } - if count != 0 { - t.Errorf("expected to not find any hits; got: %d", count) - } - searchResult = &SearchResult{Hits: &SearchHits{Hits: make([]*SearchHit, 0)}} - count = 0 - for _, item := range searchResult.Each(reflect.TypeOf(aTweet)) { - count++ - _ = item - } - if count != 0 { - t.Errorf("expected to not find any hits; got: %d", count) - } -} - -func TestSearchResultEachNoSource(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocsNoSource(t) - - all := NewMatchAllQuery() - searchResult, err := client.Search().Index(testNoSourceIndexName).Query(all).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Iterate over non-ptr type - var aTweet tweet - count := 0 - for _, item := range searchResult.Each(reflect.TypeOf(aTweet)) { - count++ - tw, ok := item.(tweet) - if !ok { - t.Fatalf("expected hit to be serialized as tweet; got: %v", reflect.ValueOf(item)) - } - - if tw.User != "" { - t.Fatalf("expected no _source hit to be empty tweet; got: %v", reflect.ValueOf(item)) - } - } - if count != 2 { - t.Errorf("expected to find 2 hits; got: %d", count) - } - - // Iterate over ptr-type - count = 0 - var aTweetPtr *tweet - for _, item := range searchResult.Each(reflect.TypeOf(aTweetPtr)) { - count++ - tw, ok := item.(*tweet) - if !ok { - t.Fatalf("expected hit to be serialized as tweet; got: %v", reflect.ValueOf(item)) - } - if tw != nil { - t.Fatal("expected hit to be nil") - } - } - if count != 2 { - t.Errorf("expected to find 2 hits; got: %d", count) - } -} - -func TestSearchSorting(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - searchResult, err := client.Search(). - Index(testIndexName). - Query(all). - Sort("created", false). - Timeout("1s"). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 3 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 3, len(searchResult.Hits.Hits)) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} - -func TestSearchSortingBySorters(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - searchResult, err := client.Search(). - Index(testIndexName). - Query(all). - SortBy(NewFieldSort("created").Desc(), NewScoreSort()). - Timeout("1s"). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 3 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 3, len(searchResult.Hits.Hits)) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} - -func TestSearchSpecificFields(t *testing.T) { - // client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - searchResult, err := client.Search(). - Index(testIndexName). - Query(all). - StoredFields("message"). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 3 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 3, len(searchResult.Hits.Hits)) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - if hit.Source != nil { - t.Fatalf("expected SearchResult.Hits.Hit.Source to be nil; got: %q", hit.Source) - } - if hit.Fields == nil { - t.Fatal("expected SearchResult.Hits.Hit.Fields to be != nil") - } - field, found := hit.Fields["message"] - if !found { - t.Errorf("expected SearchResult.Hits.Hit.Fields[%s] to be found", "message") - } - fields, ok := field.([]interface{}) - if !ok { - t.Errorf("expected []interface{}; got: %v", reflect.TypeOf(fields)) - } - if len(fields) != 1 { - t.Errorf("expected a field with 1 entry; got: %d", len(fields)) - } - message, ok := fields[0].(string) - if !ok { - t.Errorf("expected a string; got: %v", reflect.TypeOf(fields[0])) - } - if message == "" { - t.Errorf("expected a message; got: %q", message) - } - } -} - -func TestSearchExplain(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - // client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - searchResult, err := client.Search(). - Index(testIndexName). - Query(all). - Explain(true). - Timeout("1s"). - // Pretty(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 3 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 3, len(searchResult.Hits.Hits)) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - if hit.Explanation == nil { - t.Fatal("expected search explanation") - } - if hit.Explanation.Value <= 0.0 { - t.Errorf("expected explanation value to be > 0.0; got: %v", hit.Explanation.Value) - } - if hit.Explanation.Description == "" { - t.Errorf("expected explanation description != %q; got: %q", "", hit.Explanation.Description) - } - } -} - -func TestSearchSource(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Set up the request JSON manually to pass to the search service via Source() - source := map[string]interface{}{ - "query": map[string]interface{}{ - "match_all": map[string]interface{}{}, - }, - } - - searchResult, err := client.Search(). - Index(testIndexName). - Source(source). // sets the JSON request - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } -} - -func TestSearchSourceWithString(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - searchResult, err := client.Search(). - Index(testIndexName). - Source(`{"query":{"match_all":{}}}`). // sets the JSON request - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } -} - -func TestSearchRawString(t *testing.T) { - // client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - query := RawStringQuery(`{"match_all":{}}`) - searchResult, err := client.Search(). - Index(testIndexName). - Query(query). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } -} - -func TestSearchSearchSource(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - // Set up the search source manually and pass it to the search service via SearchSource() - ss := NewSearchSource().Query(NewMatchAllQuery()).From(0).Size(2) - - // One can use ss.Source() to get to the raw interface{} that will be used - // as the search request JSON by the SearchService. - - searchResult, err := client.Search(). - Index(testIndexName). - SearchSource(ss). // sets the SearchSource - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 2 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 2, len(searchResult.Hits.Hits)) - } -} - -func TestSearchInnerHitsOnHasChild(t *testing.T) { - // client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - ctx := context.Background() - - // Create join index - createIndex, err := client.CreateIndex(testJoinIndex).Body(testJoinMapping).Do(ctx) - if err != nil { - t.Fatal(err) - } - if createIndex == nil { - t.Errorf("expected result to be != nil; got: %v", createIndex) - } - - // Add documents - // See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/parent-join.html for example code. - doc1 := joinDoc{ - Message: "This is a question", - JoinField: &joinField{Name: "question"}, - } - _, err = client.Index().Index(testJoinIndex).Type("doc").Id("1").BodyJson(&doc1).Refresh("true").Do(ctx) - if err != nil { - t.Fatal(err) - } - doc2 := joinDoc{ - Message: "This is another question", - JoinField: "question", - } - _, err = client.Index().Index(testJoinIndex).Type("doc").Id("2").BodyJson(&doc2).Refresh("true").Do(ctx) - if err != nil { - t.Fatal(err) - } - doc3 := joinDoc{ - Message: "This is an answer", - JoinField: &joinField{ - Name: "answer", - Parent: "1", - }, - } - _, err = client.Index().Index(testJoinIndex).Type("doc").Id("3").BodyJson(&doc3).Routing("1").Refresh("true").Do(ctx) - if err != nil { - t.Fatal(err) - } - doc4 := joinDoc{ - Message: "This is another answer", - JoinField: &joinField{ - Name: "answer", - Parent: "1", - }, - } - _, err = client.Index().Index(testJoinIndex).Type("doc").Id("4").BodyJson(&doc4).Routing("1").Refresh("true").Do(ctx) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testJoinIndex).Do(ctx) - if err != nil { - t.Fatal(err) - } - - // Search for all documents that have an answer, and return those answers as inner hits - bq := NewBoolQuery() - bq = bq.Must(NewMatchAllQuery()) - bq = bq.Filter(NewHasChildQuery("answer", NewMatchAllQuery()). - InnerHit(NewInnerHit().Name("answers"))) - - searchResult, err := client.Search(). - Index(testJoinIndex). - Query(bq). - Pretty(true). - Do(ctx) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 1 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 2, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 1 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 2, len(searchResult.Hits.Hits)) - } - - hit := searchResult.Hits.Hits[0] - if want, have := "1", hit.Id; want != have { - t.Fatalf("expected tweet %q; got: %q", want, have) - } - if hit.InnerHits == nil { - t.Fatalf("expected inner hits; got: %v", hit.InnerHits) - } - if want, have := 1, len(hit.InnerHits); want != have { - t.Fatalf("expected %d inner hits; got: %d", want, have) - } - innerHits, found := hit.InnerHits["answers"] - if !found { - t.Fatalf("expected inner hits for name %q", "answers") - } - if innerHits == nil || innerHits.Hits == nil { - t.Fatal("expected inner hits != nil") - } - if want, have := 2, len(innerHits.Hits.Hits); want != have { - t.Fatalf("expected %d inner hits; got: %d", want, have) - } - if want, have := "3", innerHits.Hits.Hits[0].Id; want != have { - t.Fatalf("expected inner hit with id %q; got: %q", want, have) - } - if want, have := "4", innerHits.Hits.Hits[1].Id; want != have { - t.Fatalf("expected inner hit with id %q; got: %q", want, have) - } -} - -func TestSearchInnerHitsOnHasParent(t *testing.T) { - // client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - ctx := context.Background() - - // Create join index - createIndex, err := client.CreateIndex(testJoinIndex).Body(testJoinMapping).Do(ctx) - if err != nil { - t.Fatal(err) - } - if createIndex == nil { - t.Errorf("expected result to be != nil; got: %v", createIndex) - } - - // Add documents - // See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/parent-join.html for example code. - doc1 := joinDoc{ - Message: "This is a question", - JoinField: &joinField{Name: "question"}, - } - _, err = client.Index().Index(testJoinIndex).Type("doc").Id("1").BodyJson(&doc1).Refresh("true").Do(ctx) - if err != nil { - t.Fatal(err) - } - doc2 := joinDoc{ - Message: "This is another question", - JoinField: "question", - } - _, err = client.Index().Index(testJoinIndex).Type("doc").Id("2").BodyJson(&doc2).Refresh("true").Do(ctx) - if err != nil { - t.Fatal(err) - } - doc3 := joinDoc{ - Message: "This is an answer", - JoinField: &joinField{ - Name: "answer", - Parent: "1", - }, - } - _, err = client.Index().Index(testJoinIndex).Type("doc").Id("3").BodyJson(&doc3).Routing("1").Refresh("true").Do(ctx) - if err != nil { - t.Fatal(err) - } - doc4 := joinDoc{ - Message: "This is another answer", - JoinField: &joinField{ - Name: "answer", - Parent: "1", - }, - } - _, err = client.Index().Index(testJoinIndex).Type("doc").Id("4").BodyJson(&doc4).Routing("1").Refresh("true").Do(ctx) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testJoinIndex).Do(ctx) - if err != nil { - t.Fatal(err) - } - - // Search for all documents that have an answer, and return those answers as inner hits - bq := NewBoolQuery() - bq = bq.Must(NewMatchAllQuery()) - bq = bq.Filter(NewHasParentQuery("question", NewMatchAllQuery()). - InnerHit(NewInnerHit().Name("answers"))) - - searchResult, err := client.Search(). - Index(testJoinIndex). - Query(bq). - Pretty(true). - Do(ctx) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if want, have := int64(2), searchResult.Hits.TotalHits; want != have { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", want, have) - } - if want, have := 2, len(searchResult.Hits.Hits); want != have { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", want, have) - } - - hit := searchResult.Hits.Hits[0] - if want, have := "3", hit.Id; want != have { - t.Fatalf("expected tweet %q; got: %q", want, have) - } - if hit.InnerHits == nil { - t.Fatalf("expected inner hits; got: %v", hit.InnerHits) - } - if want, have := 1, len(hit.InnerHits); want != have { - t.Fatalf("expected %d inner hits; got: %d", want, have) - } - innerHits, found := hit.InnerHits["answers"] - if !found { - t.Fatalf("expected inner hits for name %q", "tweets") - } - if innerHits == nil || innerHits.Hits == nil { - t.Fatal("expected inner hits != nil") - } - if want, have := 1, len(innerHits.Hits.Hits); want != have { - t.Fatalf("expected %d inner hits; got: %d", want, have) - } - if want, have := "1", innerHits.Hits.Hits[0].Id; want != have { - t.Fatalf("expected inner hit with id %q; got: %q", want, have) - } - - hit = searchResult.Hits.Hits[1] - if want, have := "4", hit.Id; want != have { - t.Fatalf("expected tweet %q; got: %q", want, have) - } - if hit.InnerHits == nil { - t.Fatalf("expected inner hits; got: %v", hit.InnerHits) - } - if want, have := 1, len(hit.InnerHits); want != have { - t.Fatalf("expected %d inner hits; got: %d", want, have) - } - innerHits, found = hit.InnerHits["answers"] - if !found { - t.Fatalf("expected inner hits for name %q", "tweets") - } - if innerHits == nil || innerHits.Hits == nil { - t.Fatal("expected inner hits != nil") - } - if want, have := 1, len(innerHits.Hits.Hits); want != have { - t.Fatalf("expected %d inner hits; got: %d", want, have) - } - if want, have := "1", innerHits.Hits.Hits[0].Id; want != have { - t.Fatalf("expected inner hit with id %q; got: %q", want, have) - } -} - -func TestSearchBuildURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Indices []string - Types []string - Expected string - }{ - { - []string{}, - []string{}, - "/_search", - }, - { - []string{"index1"}, - []string{}, - "/index1/_search", - }, - { - []string{"index1", "index2"}, - []string{}, - "/index1%2Cindex2/_search", - }, - { - []string{}, - []string{"type1"}, - "/_all/type1/_search", - }, - { - []string{"index1"}, - []string{"type1"}, - "/index1/type1/_search", - }, - { - []string{"index1", "index2"}, - []string{"type1", "type2"}, - "/index1%2Cindex2/type1%2Ctype2/_search", - }, - { - []string{}, - []string{"type1", "type2"}, - "/_all/type1%2Ctype2/_search", - }, - } - - for i, test := range tests { - path, _, err := client.Search().Index(test.Indices...).Type(test.Types...).buildURL() - if err != nil { - t.Errorf("case #%d: %v", i+1, err) - continue - } - if path != test.Expected { - t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) - } - } -} - -func TestSearchFilterPath(t *testing.T) { - // client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents - all := NewMatchAllQuery() - searchResult, err := client.Search(). - Index(testIndexName). - Type("doc"). - Query(all). - FilterPath( - "took", - "hits.hits._id", - "hits.hits._source.user", - "hits.hits._source.message", - ). - Timeout("1s"). - Pretty(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Fatalf("expected SearchResult.Hits != nil; got nil") - } - // 0 because it was filtered out - if want, got := int64(0), searchResult.Hits.TotalHits; want != got { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", want, got) - } - if want, got := 3, len(searchResult.Hits.Hits); want != got { - t.Fatalf("expected len(SearchResult.Hits.Hits) = %d; got %d", want, got) - } - - for _, hit := range searchResult.Hits.Hits { - if want, got := "", hit.Index; want != got { - t.Fatalf("expected index %q, got %q", want, got) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - // user field - v, found := item["user"] - if !found { - t.Fatalf("expected SearchResult.Hits.Hit[%q] to be found", "user") - } - if v == "" { - t.Fatalf("expected user field, got %v (%T)", v, v) - } - // No retweets field - v, found = item["retweets"] - if found { - t.Fatalf("expected SearchResult.Hits.Hit[%q] to not be found, got %v", "retweets", v) - } - if v == "" { - t.Fatalf("expected user field, got %v (%T)", v, v) - } - } -} - -func TestSearchAfter(t *testing.T) { - // client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - searchResult, err := client.Search(). - Index(testIndexName). - Query(NewMatchAllQuery()). - SearchAfter("olivere"). - Sort("user", true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } - if want, got := 1, len(searchResult.Hits.Hits); want != got { - t.Fatalf("expected len(SearchResult.Hits.Hits) = %d; got: %d", want, got) - } - hit := searchResult.Hits.Hits[0] - if want, got := "3", hit.Id; want != got { - t.Fatalf("expected tweet %q; got: %q", want, got) - } -} - -func TestSearchResultWithFieldCollapsing(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) - - searchResult, err := client.Search(). - Index(testIndexName). - Type("doc"). - Query(NewMatchAllQuery()). - Collapse(NewCollapseBuilder("user")). - Pretty(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - if searchResult.Hits == nil { - t.Fatalf("expected SearchResult.Hits != nil; got nil") - } - if got := searchResult.Hits.TotalHits; got == 0 { - t.Fatalf("expected SearchResult.Hits.TotalHits > 0; got %d", got) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - if len(hit.Fields) == 0 { - t.Fatal("expected fields in SearchResult") - } - usersVal, ok := hit.Fields["user"] - if !ok { - t.Fatalf("expected %q field in fields of SearchResult", "user") - } - users, ok := usersVal.([]interface{}) - if !ok { - t.Fatalf("expected slice of strings in field of SearchResult, got %T", usersVal) - } - if len(users) != 1 { - t.Fatalf("expected 1 entry in users slice, got %d", len(users)) - } - } -} - -func TestSearchResultWithFieldCollapsingAndInnerHits(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) - - searchResult, err := client.Search(). - Index(testIndexName). - Type("doc"). - Query(NewMatchAllQuery()). - Collapse( - NewCollapseBuilder("user"). - InnerHit( - NewInnerHit().Name("last_tweets").Size(5).Sort("created", true), - ). - MaxConcurrentGroupRequests(4)). - Pretty(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - if searchResult.Hits == nil { - t.Fatalf("expected SearchResult.Hits != nil; got nil") - } - if got := searchResult.Hits.TotalHits; got == 0 { - t.Fatalf("expected SearchResult.Hits.TotalHits > 0; got %d", got) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - if len(hit.Fields) == 0 { - t.Fatal("expected fields in SearchResult") - } - usersVal, ok := hit.Fields["user"] - if !ok { - t.Fatalf("expected %q field in fields of SearchResult", "user") - } - users, ok := usersVal.([]interface{}) - if !ok { - t.Fatalf("expected slice of strings in field of SearchResult, got %T", usersVal) - } - if len(users) != 1 { - t.Fatalf("expected 1 entry in users slice, got %d", len(users)) - } - lastTweets, ok := hit.InnerHits["last_tweets"] - if !ok { - t.Fatalf("expected inner_hits named %q in SearchResult", "last_tweets") - } - if lastTweets == nil { - t.Fatal("expected inner_hits in SearchResult") - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/setup_test.go b/vendor/gopkg.in/olivere/elastic.v5/setup_test.go deleted file mode 100644 index 480ae5d20..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/setup_test.go +++ /dev/null @@ -1,445 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "fmt" - "log" - "math/rand" - "os" - "time" -) - -const ( - testIndexName = "elastic-test" - testIndexName2 = "elastic-test2" - testIndexName3 = "elastic-test3" - testMapping = ` -{ - "settings":{ - "number_of_shards":1, - "number_of_replicas":0 - }, - "mappings":{ - "doc":{ - "properties":{ - "user":{ - "type":"keyword" - }, - "message":{ - "type":"text", - "store": true, - "fielddata": true - }, - "tags":{ - "type":"keyword" - }, - "location":{ - "type":"geo_point" - }, - "suggest_field":{ - "type":"completion", - "contexts":[ - { - "name":"user_name", - "type":"category" - } - ] - } - } - } - } -} -` - - testNoSourceIndexName = "elastic-nosource-test" - testNoSourceMapping = ` -{ - "settings":{ - "number_of_shards":1, - "number_of_replicas":0 - }, - "mappings":{ - "doc":{ - "_source": { - "enabled": false - }, - "properties":{ - "user":{ - "type":"keyword" - }, - "message":{ - "type":"text", - "store": true, - "fielddata": true - }, - "tags":{ - "type":"keyword" - }, - "location":{ - "type":"geo_point" - }, - "suggest_field":{ - "type":"completion", - "contexts":[ - { - "name":"user_name", - "type":"category" - } - ] - } - } - } - } -} -` - - testJoinIndex = "elastic-joins" - testJoinMapping = ` - { - "settings":{ - "number_of_shards":1, - "number_of_replicas":0 - }, - "mappings":{ - "doc":{ - "properties":{ - "message":{ - "type":"text" - }, - "my_join_field": { - "type": "join", - "relations": { - "question": "answer" - } - } - } - } - } - } -` - - testOrderIndex = "elastic-orders" - testOrderMapping = ` -{ - "settings":{ - "number_of_shards":1, - "number_of_replicas":0 - }, - "mappings":{ - "doc":{ - "properties":{ - "article":{ - "type":"text" - }, - "manufacturer":{ - "type":"keyword" - }, - "price":{ - "type":"float" - }, - "time":{ - "type":"date", - "format": "YYYY-MM-dd" - } - } - } - } -} -` - - /* - testDoctypeIndex = "elastic-doctypes" - testDoctypeMapping = ` - { - "settings":{ - "number_of_shards":1, - "number_of_replicas":0 - }, - "mappings":{ - "doc":{ - "properties":{ - "message":{ - "type":"text", - "store": true, - "fielddata": true - } - } - } - } - } - ` - */ - - testQueryIndex = "elastic-queries" - testQueryMapping = ` -{ - "settings":{ - "number_of_shards":1, - "number_of_replicas":0 - }, - "mappings":{ - "doc":{ - "properties":{ - "message":{ - "type":"text", - "store": true, - "fielddata": true - }, - "query": { - "type": "percolator" - } - } - } - } -} -` -) - -type tweet struct { - User string `json:"user"` - Message string `json:"message"` - Retweets int `json:"retweets"` - Image string `json:"image,omitempty"` - Created time.Time `json:"created,omitempty"` - Tags []string `json:"tags,omitempty"` - Location string `json:"location,omitempty"` - Suggest *SuggestField `json:"suggest_field,omitempty"` -} - -func (t tweet) String() string { - return fmt.Sprintf("tweet{User:%q,Message:%q,Retweets:%d}", t.User, t.Message, t.Retweets) -} - -type comment struct { - User string `json:"user"` - Comment string `json:"comment"` - Created time.Time `json:"created,omitempty"` -} - -func (c comment) String() string { - return fmt.Sprintf("comment{User:%q,Comment:%q}", c.User, c.Comment) -} - -type joinDoc struct { - Message string `json:"message"` - JoinField interface{} `json:"my_join_field,omitempty"` -} - -type joinField struct { - Name string `json:"name"` - Parent string `json:"parent,omitempty"` -} - -type order struct { - Article string `json:"article"` - Manufacturer string `json:"manufacturer"` - Price float64 `json:"price"` - Time string `json:"time,omitempty"` -} - -func (o order) String() string { - return fmt.Sprintf("order{Article:%q,Manufacturer:%q,Price:%v,Time:%v}", o.Article, o.Manufacturer, o.Price, o.Time) -} - -// doctype is required for Percolate tests. -type doctype struct { - Message string `json:"message"` -} - -// queries is required for Percolate tests. -type queries struct { - Query string `json:"query"` -} - -func isTravis() bool { - return os.Getenv("TRAVIS") != "" -} - -func travisGoVersion() string { - return os.Getenv("TRAVIS_GO_VERSION") -} - -type logger interface { - Error(args ...interface{}) - Errorf(format string, args ...interface{}) - Fatal(args ...interface{}) - Fatalf(format string, args ...interface{}) - Fail() - FailNow() - Log(args ...interface{}) - Logf(format string, args ...interface{}) -} - -func setupTestClient(t logger, options ...ClientOptionFunc) (client *Client) { - var err error - - client, err = NewClient(options...) - if err != nil { - t.Fatal(err) - } - - client.DeleteIndex(testIndexName).Do(context.TODO()) - client.DeleteIndex(testIndexName2).Do(context.TODO()) - client.DeleteIndex(testIndexName3).Do(context.TODO()) - client.DeleteIndex(testOrderIndex).Do(context.TODO()) - client.DeleteIndex(testNoSourceIndexName).Do(context.TODO()) - //client.DeleteIndex(testDoctypeIndex).Do(context.TODO()) - client.DeleteIndex(testQueryIndex).Do(context.TODO()) - client.DeleteIndex(testJoinIndex).Do(context.TODO()) - - return client -} - -func setupTestClientAndCreateIndex(t logger, options ...ClientOptionFunc) *Client { - client := setupTestClient(t, options...) - - // Create index - createIndex, err := client.CreateIndex(testIndexName).Body(testMapping).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if createIndex == nil { - t.Errorf("expected result to be != nil; got: %v", createIndex) - } - - // Create second index - createIndex2, err := client.CreateIndex(testIndexName2).Body(testMapping).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if createIndex2 == nil { - t.Errorf("expected result to be != nil; got: %v", createIndex2) - } - - // Create no source index - createNoSourceIndex, err := client.CreateIndex(testNoSourceIndexName).Body(testNoSourceMapping).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if createNoSourceIndex == nil { - t.Errorf("expected result to be != nil; got: %v", createNoSourceIndex) - } - - // Create order index - createOrderIndex, err := client.CreateIndex(testOrderIndex).Body(testOrderMapping).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if createOrderIndex == nil { - t.Errorf("expected result to be != nil; got: %v", createOrderIndex) - } - - return client -} - -func setupTestClientAndCreateIndexAndLog(t logger, options ...ClientOptionFunc) *Client { - return setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) -} - -func setupTestClientAndCreateIndexAndAddDocs(t logger, options ...ClientOptionFunc) *Client { - client := setupTestClientAndCreateIndex(t, options...) - - // Add tweets - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - //comment1 := comment{User: "nico", Comment: "You bet."} - - _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("doc").Id("3").Routing("someroutingkey").BodyJson(&tweet3).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - /* - _, err = client.Index().Index(testIndexName).Type("comment").Id("1").Parent("3").BodyJson(&comment1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - */ - - // Add orders - var orders []order - orders = append(orders, order{Article: "Apple MacBook", Manufacturer: "Apple", Price: 1290, Time: "2015-01-18"}) - orders = append(orders, order{Article: "Paper", Manufacturer: "Canon", Price: 100, Time: "2015-03-01"}) - orders = append(orders, order{Article: "Apple iPad", Manufacturer: "Apple", Price: 499, Time: "2015-04-12"}) - orders = append(orders, order{Article: "Dell XPS 13", Manufacturer: "Dell", Price: 1600, Time: "2015-04-18"}) - orders = append(orders, order{Article: "Apple Watch", Manufacturer: "Apple", Price: 349, Time: "2015-04-29"}) - orders = append(orders, order{Article: "Samsung TV", Manufacturer: "Samsung", Price: 790, Time: "2015-05-03"}) - orders = append(orders, order{Article: "Hoodie", Manufacturer: "h&m", Price: 49, Time: "2015-06-03"}) - orders = append(orders, order{Article: "T-Shirt", Manufacturer: "h&m", Price: 19, Time: "2015-06-18"}) - for i, o := range orders { - id := fmt.Sprintf("%d", i) - _, err = client.Index().Index(testOrderIndex).Type("doc").Id(id).BodyJson(&o).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - } - - // Flush - _, err = client.Flush().Index(testIndexName, testOrderIndex).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - return client -} - -func setupTestClientAndCreateIndexAndAddDocsNoSource(t logger, options ...ClientOptionFunc) *Client { - client := setupTestClientAndCreateIndex(t, options...) - - // Add tweets - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - - _, err := client.Index().Index(testNoSourceIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testNoSourceIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - // Flush - _, err = client.Flush().Index(testNoSourceIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - - return client -} - -var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") - -func randomString(n int) string { - b := make([]rune, n) - for i := range b { - b[i] = letters[rand.Intn(len(letters))] - } - return string(b) -} - -type lexicographically struct { - strings []string -} - -func (l lexicographically) Len() int { - return len(l.strings) -} - -func (l lexicographically) Less(i, j int) bool { - return l.strings[i] < l.strings[j] -} - -func (l lexicographically) Swap(i, j int) { - l.strings[i], l.strings[j] = l.strings[j], l.strings[i] -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/snapshot_create.go b/vendor/gopkg.in/olivere/elastic.v5/snapshot_create.go index 1bbd2762e..245fdbff8 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/snapshot_create.go +++ b/vendor/gopkg.in/olivere/elastic.v5/snapshot_create.go @@ -11,10 +11,10 @@ import ( "net/url" "time" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) -// SnapshotCreateService is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.0/modules-snapshots.html. +// SnapshotCreateService is documented at https://www.elastic.co/guide/en/elasticsearch/reference/5.x/modules-snapshots.html. type SnapshotCreateService struct { client *Client pretty bool @@ -89,7 +89,7 @@ func (s *SnapshotCreateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -137,12 +137,7 @@ func (s *SnapshotCreateService) Do(ctx context.Context) (*SnapshotCreateResponse } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "PUT", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "PUT", path, params, body) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/snapshot_create_repository.go b/vendor/gopkg.in/olivere/elastic.v5/snapshot_create_repository.go index e7f6d5336..9fc0a32a6 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/snapshot_create_repository.go +++ b/vendor/gopkg.in/olivere/elastic.v5/snapshot_create_repository.go @@ -10,11 +10,11 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // SnapshotCreateRepositoryService creates a snapshot repository. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/modules-snapshots.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-snapshots.html // for details. type SnapshotCreateRepositoryService struct { client *Client @@ -112,7 +112,7 @@ func (s *SnapshotCreateRepositoryService) buildURL() (string, url.Values, error) // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -179,12 +179,7 @@ func (s *SnapshotCreateRepositoryService) Do(ctx context.Context) (*SnapshotCrea } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "PUT", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "PUT", path, params, body) if err != nil { return nil, err } @@ -199,7 +194,5 @@ func (s *SnapshotCreateRepositoryService) Do(ctx context.Context) (*SnapshotCrea // SnapshotCreateRepositoryResponse is the response of SnapshotCreateRepositoryService.Do. type SnapshotCreateRepositoryResponse struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` + Acknowledged bool `json:"acknowledged"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/snapshot_create_repository_test.go b/vendor/gopkg.in/olivere/elastic.v5/snapshot_create_repository_test.go deleted file mode 100644 index 2045c700d..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/snapshot_create_repository_test.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSnapshotPutRepositoryURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Repository string - Expected string - }{ - { - "repo", - "/_snapshot/repo", - }, - } - - for _, test := range tests { - path, _, err := client.SnapshotCreateRepository(test.Repository).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} - -func TestSnapshotPutRepositoryBody(t *testing.T) { - client := setupTestClient(t) - - service := client.SnapshotCreateRepository("my_backup") - service = service.Type("fs"). - Settings(map[string]interface{}{ - "location": "my_backup_location", - "compress": false, - }). - Setting("compress", true). - Setting("chunk_size", 16*1024*1024) - - src, err := service.buildBody() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"settings":{"chunk_size":16777216,"compress":true,"location":"my_backup_location"},"type":"fs"}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/snapshot_create_test.go b/vendor/gopkg.in/olivere/elastic.v5/snapshot_create_test.go deleted file mode 100644 index 74b009cfe..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/snapshot_create_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package elastic - -import ( - "net/url" - "reflect" - "testing" -) - -func TestSnapshotValidate(t *testing.T) { - var client *Client - - err := NewSnapshotCreateService(client).Validate() - got := err.Error() - expected := "missing required fields: [Repository Snapshot]" - if got != expected { - t.Errorf("expected %q; got: %q", expected, got) - } -} - -func TestSnapshotPutURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Repository string - Snapshot string - Pretty bool - MasterTimeout string - WaitForCompletion bool - ExpectedPath string - ExpectedParams url.Values - }{ - { - Repository: "repo", - Snapshot: "snapshot_of_sunday", - Pretty: true, - MasterTimeout: "60s", - WaitForCompletion: true, - ExpectedPath: "/_snapshot/repo/snapshot_of_sunday", - ExpectedParams: url.Values{ - "pretty": []string{"true"}, - "master_timeout": []string{"60s"}, - "wait_for_completion": []string{"true"}, - }, - }, - } - - for _, test := range tests { - path, params, err := client.SnapshotCreate(test.Repository, test.Snapshot). - Pretty(test.Pretty). - MasterTimeout(test.MasterTimeout). - WaitForCompletion(test.WaitForCompletion). - buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.ExpectedPath { - t.Errorf("expected %q; got: %q", test.ExpectedPath, path) - } - if !reflect.DeepEqual(params, test.ExpectedParams) { - t.Errorf("expected %q; got: %q", test.ExpectedParams, params) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/snapshot_delete_repository.go b/vendor/gopkg.in/olivere/elastic.v5/snapshot_delete_repository.go index ad3e49b0e..1f402fba5 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/snapshot_delete_repository.go +++ b/vendor/gopkg.in/olivere/elastic.v5/snapshot_delete_repository.go @@ -11,11 +11,11 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // SnapshotDeleteRepositoryService deletes a snapshot repository. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/modules-snapshots.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-snapshots.html // for details. type SnapshotDeleteRepositoryService struct { client *Client @@ -70,7 +70,7 @@ func (s *SnapshotDeleteRepositoryService) buildURL() (string, url.Values, error) // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -107,11 +107,7 @@ func (s *SnapshotDeleteRepositoryService) Do(ctx context.Context) (*SnapshotDele } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "DELETE", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "DELETE", path, params, nil) if err != nil { return nil, err } @@ -126,7 +122,5 @@ func (s *SnapshotDeleteRepositoryService) Do(ctx context.Context) (*SnapshotDele // SnapshotDeleteRepositoryResponse is the response of SnapshotDeleteRepositoryService.Do. type SnapshotDeleteRepositoryResponse struct { - Acknowledged bool `json:"acknowledged"` - ShardsAcknowledged bool `json:"shards_acknowledged"` - Index string `json:"index,omitempty"` + Acknowledged bool `json:"acknowledged"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/snapshot_delete_repository_test.go b/vendor/gopkg.in/olivere/elastic.v5/snapshot_delete_repository_test.go deleted file mode 100644 index aec793a60..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/snapshot_delete_repository_test.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestSnapshotDeleteRepositoryURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Repository []string - Expected string - }{ - { - []string{"repo1"}, - "/_snapshot/repo1", - }, - { - []string{"repo1", "repo2"}, - "/_snapshot/repo1%2Crepo2", - }, - } - - for _, test := range tests { - path, _, err := client.SnapshotDeleteRepository(test.Repository...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/snapshot_get_repository.go b/vendor/gopkg.in/olivere/elastic.v5/snapshot_get_repository.go index 2d24c5e4c..10b2d0b9c 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/snapshot_get_repository.go +++ b/vendor/gopkg.in/olivere/elastic.v5/snapshot_get_repository.go @@ -11,11 +11,11 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // SnapshotGetRepositoryService reads a snapshot repository. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/modules-snapshots.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-snapshots.html // for details. type SnapshotGetRepositoryService struct { client *Client @@ -76,7 +76,7 @@ func (s *SnapshotGetRepositoryService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.local != nil { params.Set("local", fmt.Sprintf("%v", *s.local)) @@ -106,11 +106,7 @@ func (s *SnapshotGetRepositoryService) Do(ctx context.Context) (SnapshotGetRepos } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/snapshot_get_repository_test.go b/vendor/gopkg.in/olivere/elastic.v5/snapshot_get_repository_test.go deleted file mode 100644 index 0dcd0bb90..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/snapshot_get_repository_test.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestSnapshotGetRepositoryURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Repository []string - Expected string - }{ - { - []string{}, - "/_snapshot", - }, - { - []string{"repo1"}, - "/_snapshot/repo1", - }, - { - []string{"repo1", "repo2"}, - "/_snapshot/repo1%2Crepo2", - }, - } - - for _, test := range tests { - path, _, err := client.SnapshotGetRepository(test.Repository...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/snapshot_verify_repository.go b/vendor/gopkg.in/olivere/elastic.v5/snapshot_verify_repository.go index 5494ab475..4e8c25a24 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/snapshot_verify_repository.go +++ b/vendor/gopkg.in/olivere/elastic.v5/snapshot_verify_repository.go @@ -10,11 +10,11 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // SnapshotVerifyRepositoryService verifies a snapshop repository. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/modules-snapshots.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-snapshots.html // for details. type SnapshotVerifyRepositoryService struct { client *Client @@ -68,7 +68,7 @@ func (s *SnapshotVerifyRepositoryService) buildURL() (string, url.Values, error) // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.masterTimeout != "" { params.Set("master_timeout", s.masterTimeout) @@ -105,11 +105,7 @@ func (s *SnapshotVerifyRepositoryService) Do(ctx context.Context) (*SnapshotVeri } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/snapshot_verify_repository_test.go b/vendor/gopkg.in/olivere/elastic.v5/snapshot_verify_repository_test.go deleted file mode 100644 index 9776782d2..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/snapshot_verify_repository_test.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestSnapshotVerifyRepositoryURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Repository string - Expected string - }{ - { - "repo", - "/_snapshot/repo/_verify", - }, - } - - for _, test := range tests { - path, _, err := client.SnapshotVerifyRepository(test.Repository).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/sort.go b/vendor/gopkg.in/olivere/elastic.v5/sort.go index 7e2b32183..fddbbb610 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/sort.go +++ b/vendor/gopkg.in/olivere/elastic.v5/sort.go @@ -9,7 +9,7 @@ import "errors" // -- Sorter -- // Sorter is an interface for sorting strategies, e.g. ScoreSort or FieldSort. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-sort.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-sort.html. type Sorter interface { Source() (interface{}, error) } @@ -27,7 +27,6 @@ type SortInfo struct { SortMode string NestedFilter Query NestedPath string - NestedSort *NestedSort // available in 6.1 or later } func (info SortInfo) Source() (interface{}, error) { @@ -59,13 +58,6 @@ func (info SortInfo) Source() (interface{}, error) { if info.NestedPath != "" { prop["nested_path"] = info.NestedPath } - if info.NestedSort != nil { - src, err := info.NestedSort.Source() - if err != nil { - return nil, err - } - prop["nested"] = src - } source := make(map[string]interface{}) source[info.Field] = prop return source, nil @@ -74,7 +66,7 @@ func (info SortInfo) Source() (interface{}, error) { // -- SortByDoc -- // SortByDoc sorts by the "_doc" field, as described in -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-scroll.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-scroll.html. // // Example: // ss := elastic.NewSearchSource() @@ -144,7 +136,6 @@ type FieldSort struct { sortMode *string nestedFilter Query nestedPath *string - nestedSort *NestedSort } // NewFieldSort creates a new FieldSort. @@ -216,13 +207,6 @@ func (s *FieldSort) NestedPath(nestedPath string) *FieldSort { return s } -// NestedSort is available starting with 6.1 and will replace NestedFilter -// and NestedPath. -func (s *FieldSort) NestedSort(nestedSort *NestedSort) *FieldSort { - s.nestedSort = nestedSort - return s -} - // Source returns the JSON-serializable data. func (s *FieldSort) Source() (interface{}, error) { source := make(map[string]interface{}) @@ -252,20 +236,13 @@ func (s *FieldSort) Source() (interface{}, error) { if s.nestedPath != nil { x["nested_path"] = *s.nestedPath } - if s.nestedSort != nil { - src, err := s.nestedSort.Source() - if err != nil { - return nil, err - } - x["nested"] = src - } return source, nil } // -- GeoDistanceSort -- // GeoDistanceSort allows for sorting by geographic distance. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-sort.html#_geo_distance_sorting. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-sort.html#_geo_distance_sorting. type GeoDistanceSort struct { Sorter fieldName string @@ -277,7 +254,6 @@ type GeoDistanceSort struct { sortMode *string nestedFilter Query nestedPath *string - nestedSort *NestedSort } // NewGeoDistanceSort creates a new sorter for geo distances. @@ -331,7 +307,7 @@ func (s *GeoDistanceSort) GeoHashes(geohashes ...string) *GeoDistanceSort { } // Unit specifies the distance unit to use. It defaults to km. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/common-options.html#distance-units +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/common-options.html#distance-units // for details. func (s *GeoDistanceSort) Unit(unit string) *GeoDistanceSort { s.unit = unit @@ -344,7 +320,7 @@ func (s *GeoDistanceSort) GeoDistance(geoDistance string) *GeoDistanceSort { } // DistanceType describes how to compute the distance, e.g. "arc" or "plane". -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-request-sort.html#geo-sorting +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-sort.html#geo-sorting // for details. func (s *GeoDistanceSort) DistanceType(distanceType string) *GeoDistanceSort { s.distanceType = &distanceType @@ -373,13 +349,6 @@ func (s *GeoDistanceSort) NestedPath(nestedPath string) *GeoDistanceSort { return s } -// NestedSort is available starting with 6.1 and will replace NestedFilter -// and NestedPath. -func (s *GeoDistanceSort) NestedSort(nestedSort *NestedSort) *GeoDistanceSort { - s.nestedSort = nestedSort - return s -} - // Source returns the JSON-serializable data. func (s *GeoDistanceSort) Source() (interface{}, error) { source := make(map[string]interface{}) @@ -421,20 +390,13 @@ func (s *GeoDistanceSort) Source() (interface{}, error) { if s.nestedPath != nil { x["nested_path"] = *s.nestedPath } - if s.nestedSort != nil { - src, err := s.nestedSort.Source() - if err != nil { - return nil, err - } - x["nested"] = src - } return source, nil } // -- ScriptSort -- // ScriptSort sorts by a custom script. See -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/modules-scripting.html#modules-scripting +// https://www.elastic.co/guide/en/elasticsearch/reference/5.6/modules-scripting.html#modules-scripting // for details about scripting. type ScriptSort struct { Sorter @@ -444,7 +406,6 @@ type ScriptSort struct { sortMode *string nestedFilter Query nestedPath *string - nestedSort *NestedSort } // NewScriptSort creates and initializes a new ScriptSort. @@ -503,13 +464,6 @@ func (s *ScriptSort) NestedPath(nestedPath string) *ScriptSort { return s } -// NestedSort is available starting with 6.1 and will replace NestedFilter -// and NestedPath. -func (s *ScriptSort) NestedSort(nestedSort *NestedSort) *ScriptSort { - s.nestedSort = nestedSort - return s -} - // Source returns the JSON-serializable data. func (s *ScriptSort) Source() (interface{}, error) { if s.script == nil { @@ -545,70 +499,5 @@ func (s *ScriptSort) Source() (interface{}, error) { if s.nestedPath != nil { x["nested_path"] = *s.nestedPath } - if s.nestedSort != nil { - src, err := s.nestedSort.Source() - if err != nil { - return nil, err - } - x["nested"] = src - } - return source, nil -} - -// -- NestedSort -- - -// NestedSort is used for fields that are inside a nested object. -// It takes a "path" argument and an optional nested filter that the -// nested objects should match with in order to be taken into account -// for sorting. -// -// NestedSort is available from 6.1 and replaces nestedFilter and nestedPath -// in the other sorters. -type NestedSort struct { - Sorter - path string - filter Query - nestedSort *NestedSort -} - -// NewNestedSort creates a new NestedSort. -func NewNestedSort(path string) *NestedSort { - return &NestedSort{path: path} -} - -// Filter sets the filter. -func (s *NestedSort) Filter(filter Query) *NestedSort { - s.filter = filter - return s -} - -// NestedSort embeds another level of nested sorting. -func (s *NestedSort) NestedSort(nestedSort *NestedSort) *NestedSort { - s.nestedSort = nestedSort - return s -} - -// Source returns the JSON-serializable data. -func (s *NestedSort) Source() (interface{}, error) { - source := make(map[string]interface{}) - - if s.path != "" { - source["path"] = s.path - } - if s.filter != nil { - src, err := s.filter.Source() - if err != nil { - return nil, err - } - source["filter"] = src - } - if s.nestedSort != nil { - src, err := s.nestedSort.Source() - if err != nil { - return nil, err - } - source["nested"] = src - } - return source, nil } diff --git a/vendor/gopkg.in/olivere/elastic.v5/sort_test.go b/vendor/gopkg.in/olivere/elastic.v5/sort_test.go deleted file mode 100644 index b54cbd98c..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/sort_test.go +++ /dev/null @@ -1,278 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSortInfo(t *testing.T) { - builder := SortInfo{Field: "grade", Ascending: false} - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"grade":{"order":"desc"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSortInfoComplex(t *testing.T) { - builder := SortInfo{ - Field: "price", - Ascending: false, - Missing: "_last", - SortMode: "avg", - NestedFilter: NewTermQuery("product.color", "blue"), - NestedPath: "variant", - } - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"price":{"missing":"_last","mode":"avg","nested_filter":{"term":{"product.color":"blue"}},"nested_path":"variant","order":"desc"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestScoreSort(t *testing.T) { - builder := NewScoreSort() - if builder.ascending != false { - t.Error("expected score sorter to be ascending by default") - } - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_score":{"order":"desc"}}` // ScoreSort is "desc" by default - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestScoreSortOrderAscending(t *testing.T) { - builder := NewScoreSort().Asc() - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_score":{"order":"asc"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestScoreSortOrderDescending(t *testing.T) { - builder := NewScoreSort().Desc() - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_score":{"order":"desc"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFieldSort(t *testing.T) { - builder := NewFieldSort("grade") - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"grade":{"order":"asc"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFieldSortOrderDesc(t *testing.T) { - builder := NewFieldSort("grade").Desc() - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"grade":{"order":"desc"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFieldSortComplex(t *testing.T) { - builder := NewFieldSort("price").Desc(). - SortMode("avg"). - Missing("_last"). - UnmappedType("product"). - NestedFilter(NewTermQuery("product.color", "blue")). - NestedPath("variant") - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"price":{"missing":"_last","mode":"avg","nested_filter":{"term":{"product.color":"blue"}},"nested_path":"variant","order":"desc","unmapped_type":"product"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoDistanceSort(t *testing.T) { - builder := NewGeoDistanceSort("pin.location"). - Point(-70, 40). - Order(true). - Unit("km"). - SortMode("min"). - GeoDistance("plane") - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_geo_distance":{"distance_type":"plane","mode":"min","order":"asc","pin.location":[{"lat":-70,"lon":40}],"unit":"km"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoDistanceSortOrderDesc(t *testing.T) { - builder := NewGeoDistanceSort("pin.location"). - Point(-70, 40). - Unit("km"). - SortMode("min"). - GeoDistance("arc"). - Desc() - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_geo_distance":{"distance_type":"arc","mode":"min","order":"desc","pin.location":[{"lat":-70,"lon":40}],"unit":"km"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} -func TestScriptSort(t *testing.T) { - builder := NewScriptSort(NewScript("doc['field_name'].value * factor").Param("factor", 1.1), "number").Order(true) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_script":{"order":"asc","script":{"params":{"factor":1.1},"source":"doc['field_name'].value * factor"},"type":"number"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestScriptSortOrderDesc(t *testing.T) { - builder := NewScriptSort(NewScript("doc['field_name'].value * factor").Param("factor", 1.1), "number").Desc() - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_script":{"order":"desc","script":{"params":{"factor":1.1},"source":"doc['field_name'].value * factor"},"type":"number"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestNestedSort(t *testing.T) { - builder := NewNestedSort("offer"). - Filter(NewTermQuery("offer.color", "blue")) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"filter":{"term":{"offer.color":"blue"}},"path":"offer"}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFieldSortWithNestedSort(t *testing.T) { - builder := NewFieldSort("offer.price"). - Asc(). - SortMode("avg"). - NestedSort( - NewNestedSort("offer").Filter(NewTermQuery("offer.color", "blue")), - ) - src, err := builder.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"offer.price":{"mode":"avg","nested":{"filter":{"term":{"offer.color":"blue"}},"path":"offer"},"order":"asc"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggest.go b/vendor/gopkg.in/olivere/elastic.v5/suggest.go new file mode 100644 index 000000000..7249abd5f --- /dev/null +++ b/vendor/gopkg.in/olivere/elastic.v5/suggest.go @@ -0,0 +1,158 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + "strings" + + "gopkg.in/olivere/elastic.v5/uritemplates" +) + +// SuggestService returns suggestions for text. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-suggesters.html. +type SuggestService struct { + client *Client + pretty bool + routing string + preference string + index []string + suggesters []Suggester +} + +// NewSuggestService creates a new instance of SuggestService. +func NewSuggestService(client *Client) *SuggestService { + builder := &SuggestService{ + client: client, + } + return builder +} + +// Index adds one or more indices to use for the suggestion request. +func (s *SuggestService) Index(index ...string) *SuggestService { + s.index = append(s.index, index...) + return s +} + +// Pretty asks Elasticsearch to return indented JSON. +func (s *SuggestService) Pretty(pretty bool) *SuggestService { + s.pretty = pretty + return s +} + +// Routing specifies the routing value. +func (s *SuggestService) Routing(routing string) *SuggestService { + s.routing = routing + return s +} + +// Preference specifies the node or shard the operation should be +// performed on (default: random). +func (s *SuggestService) Preference(preference string) *SuggestService { + s.preference = preference + return s +} + +// Suggester adds a suggester to the request. +func (s *SuggestService) Suggester(suggester Suggester) *SuggestService { + s.suggesters = append(s.suggesters, suggester) + return s +} + +// buildURL builds the URL for the operation. +func (s *SuggestService) buildURL() (string, url.Values, error) { + var err error + var path string + + if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_suggest", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else { + path = "/_suggest" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", fmt.Sprintf("%v", s.pretty)) + } + if s.routing != "" { + params.Set("routing", s.routing) + } + if s.preference != "" { + params.Set("preference", s.preference) + } + return path, params, nil +} + +// Do executes the request. +func (s *SuggestService) Do(ctx context.Context) (SuggestResult, error) { + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Set body + body := make(map[string]interface{}) + for _, s := range s.suggesters { + src, err := s.Source(false) + if err != nil { + return nil, err + } + body[s.Name()] = src + } + + // Get response + res, err := s.client.PerformRequest(ctx, "POST", path, params, body) + if err != nil { + return nil, err + } + + // There is a _shard object that cannot be deserialized. + // So we use json.RawMessage instead. + var suggestions map[string]*json.RawMessage + if err := s.client.decoder.Decode(res.Body, &suggestions); err != nil { + return nil, err + } + + ret := make(SuggestResult) + for name, result := range suggestions { + if name != "_shards" { + var sug []Suggestion + if err := s.client.decoder.Decode(*result, &sug); err != nil { + return nil, err + } + ret[name] = sug + } + } + + return ret, nil +} + +// SuggestResult is the outcome of SuggestService.Do. +type SuggestResult map[string][]Suggestion + +// Suggestion is a single suggester outcome. +type Suggestion struct { + Text string `json:"text"` + Offset int `json:"offset"` + Length int `json:"length"` + Options []suggestionOption `json:"options"` +} + +type suggestionOption struct { + Text string `json:"text"` + Score float64 `json:"score"` + Freq int `json:"freq"` + Payload interface{} `json:"payload"` + CollateMatch bool `json:"collate_match"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggest_field.go b/vendor/gopkg.in/olivere/elastic.v5/suggest_field.go index 8405a6f9e..8e15b4ec2 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/suggest_field.go +++ b/vendor/gopkg.in/olivere/elastic.v5/suggest_field.go @@ -67,7 +67,7 @@ func (f *SuggestField) MarshalJSON() ([]byte, error) { if err != nil { return nil, err } - source["contexts"] = src + source["context"] = src default: ctxq := make(map[string]interface{}) for _, query := range f.contextQueries { @@ -83,7 +83,7 @@ func (f *SuggestField) MarshalJSON() ([]byte, error) { ctxq[k] = v } } - source["contexts"] = ctxq + source["context"] = ctxq } return json.Marshal(source) diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggest_field_test.go b/vendor/gopkg.in/olivere/elastic.v5/suggest_field_test.go deleted file mode 100644 index 426875b2f..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/suggest_field_test.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSuggestField(t *testing.T) { - field := NewSuggestField(). - Input("Welcome to Golang and Elasticsearch.", "Golang and Elasticsearch"). - Weight(1). - ContextQuery( - NewSuggesterCategoryMapping("color").FieldName("color_field").DefaultValues("red", "green", "blue"), - NewSuggesterGeoMapping("location").Precision("5m").Neighbors(true).DefaultLocations(GeoPointFromLatLon(52.516275, 13.377704)), - ) - data, err := json.Marshal(field) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"contexts":{"color":{"default":["red","green","blue"],"path":"color_field","type":"category"},"location":{"default":{"lat":52.516275,"lon":13.377704},"neighbors":true,"precision":["5m"],"type":"geo"}},"input":["Welcome to Golang and Elasticsearch.","Golang and Elasticsearch"],"weight":1}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggester_completion.go b/vendor/gopkg.in/olivere/elastic.v5/suggester_completion.go index d2b4a326c..cf775c954 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/suggester_completion.go +++ b/vendor/gopkg.in/olivere/elastic.v5/suggester_completion.go @@ -22,9 +22,8 @@ type CompletionSuggester struct { contextQueries []SuggesterContextQuery payload interface{} - fuzzyOptions *FuzzyCompletionSuggesterOptions - regexOptions *RegexCompletionSuggesterOptions - skipDuplicates *bool + fuzzyOptions *FuzzyCompletionSuggesterOptions + regexOptions *RegexCompletionSuggesterOptions } // Creates a new completion suggester. @@ -65,14 +64,6 @@ func (q *CompletionSuggester) FuzzyOptions(options *FuzzyCompletionSuggesterOpti return q } -func (q *CompletionSuggester) Fuzziness(fuzziness interface{}) *CompletionSuggester { - if q.fuzzyOptions == nil { - q.fuzzyOptions = NewFuzzyCompletionSuggesterOptions() - } - q.fuzzyOptions = q.fuzzyOptions.EditDistance(fuzziness) - return q -} - func (q *CompletionSuggester) Regex(regex string) *CompletionSuggester { q.regex = regex return q @@ -89,11 +80,6 @@ func (q *CompletionSuggester) RegexOptions(options *RegexCompletionSuggesterOpti return q } -func (q *CompletionSuggester) SkipDuplicates(skipDuplicates bool) *CompletionSuggester { - q.skipDuplicates = &skipDuplicates - return q -} - func (q *CompletionSuggester) Field(field string) *CompletionSuggester { q.field = field return q @@ -171,7 +157,7 @@ func (q *CompletionSuggester) Source(includeName bool) (interface{}, error) { if err != nil { return nil, err } - suggester["contexts"] = src + suggester["context"] = src default: ctxq := make(map[string]interface{}) for _, query := range q.contextQueries { @@ -209,10 +195,6 @@ func (q *CompletionSuggester) Source(includeName bool) (interface{}, error) { suggester["regex"] = src } - if q.skipDuplicates != nil { - suggester["skip_duplicates"] = *q.skipDuplicates - } - // TODO(oe) Add completion-suggester specific parameters here if !includeName { diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggester_completion_fuzzy.go b/vendor/gopkg.in/olivere/elastic.v5/suggester_completion_fuzzy.go new file mode 100644 index 000000000..eccd1a020 --- /dev/null +++ b/vendor/gopkg.in/olivere/elastic.v5/suggester_completion_fuzzy.go @@ -0,0 +1,181 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// FuzzyCompletionSuggester is a CompletionSuggester that allows fuzzy +// completion. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-suggesters-completion.html +// for details, and +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-suggesters-completion.html#fuzzy +// for details about the fuzzy completion suggester. +// +// @Deprecated Use CompletionSuggester with FuzzyOptions instead. +type FuzzyCompletionSuggester struct { + Suggester + name string + text string + field string + analyzer string + size *int + shardSize *int + contextQueries []SuggesterContextQuery + + fuzziness interface{} + fuzzyTranspositions *bool + fuzzyMinLength *int + fuzzyPrefixLength *int + unicodeAware *bool +} + +// Fuzziness defines the fuzziness which is used in FuzzyCompletionSuggester. +type Fuzziness struct { +} + +// Creates a new completion suggester. +func NewFuzzyCompletionSuggester(name string) *FuzzyCompletionSuggester { + return &FuzzyCompletionSuggester{ + name: name, + contextQueries: make([]SuggesterContextQuery, 0), + } +} + +func (q *FuzzyCompletionSuggester) Name() string { + return q.name +} + +func (q *FuzzyCompletionSuggester) Text(text string) *FuzzyCompletionSuggester { + q.text = text + return q +} + +func (q *FuzzyCompletionSuggester) Field(field string) *FuzzyCompletionSuggester { + q.field = field + return q +} + +func (q *FuzzyCompletionSuggester) Analyzer(analyzer string) *FuzzyCompletionSuggester { + q.analyzer = analyzer + return q +} + +func (q *FuzzyCompletionSuggester) Size(size int) *FuzzyCompletionSuggester { + q.size = &size + return q +} + +func (q *FuzzyCompletionSuggester) ShardSize(shardSize int) *FuzzyCompletionSuggester { + q.shardSize = &shardSize + return q +} + +func (q *FuzzyCompletionSuggester) ContextQuery(query SuggesterContextQuery) *FuzzyCompletionSuggester { + q.contextQueries = append(q.contextQueries, query) + return q +} + +func (q *FuzzyCompletionSuggester) ContextQueries(queries ...SuggesterContextQuery) *FuzzyCompletionSuggester { + q.contextQueries = append(q.contextQueries, queries...) + return q +} + +// Fuzziness defines the strategy used to describe what "fuzzy" actually +// means for the suggester, e.g. 1, 2, "0", "1..2", ">4", or "AUTO". +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/common-options.html#fuzziness +// for a detailed description. +func (q *FuzzyCompletionSuggester) Fuzziness(fuzziness interface{}) *FuzzyCompletionSuggester { + q.fuzziness = fuzziness + return q +} + +func (q *FuzzyCompletionSuggester) FuzzyTranspositions(fuzzyTranspositions bool) *FuzzyCompletionSuggester { + q.fuzzyTranspositions = &fuzzyTranspositions + return q +} + +func (q *FuzzyCompletionSuggester) FuzzyMinLength(minLength int) *FuzzyCompletionSuggester { + q.fuzzyMinLength = &minLength + return q +} + +func (q *FuzzyCompletionSuggester) FuzzyPrefixLength(prefixLength int) *FuzzyCompletionSuggester { + q.fuzzyPrefixLength = &prefixLength + return q +} + +func (q *FuzzyCompletionSuggester) UnicodeAware(unicodeAware bool) *FuzzyCompletionSuggester { + q.unicodeAware = &unicodeAware + return q +} + +// Creates the source for the completion suggester. +func (q *FuzzyCompletionSuggester) Source(includeName bool) (interface{}, error) { + cs := &completionSuggesterRequest{} + + if q.text != "" { + cs.Text = q.text + } + + suggester := make(map[string]interface{}) + cs.Completion = suggester + + if q.analyzer != "" { + suggester["analyzer"] = q.analyzer + } + if q.field != "" { + suggester["field"] = q.field + } + if q.size != nil { + suggester["size"] = *q.size + } + if q.shardSize != nil { + suggester["shard_size"] = *q.shardSize + } + switch len(q.contextQueries) { + case 0: + case 1: + src, err := q.contextQueries[0].Source() + if err != nil { + return nil, err + } + suggester["context"] = src + default: + var ctxq []interface{} + for _, query := range q.contextQueries { + src, err := query.Source() + if err != nil { + return nil, err + } + ctxq = append(ctxq, src) + } + suggester["context"] = ctxq + } + + // Fuzzy Completion Suggester fields + fuzzy := make(map[string]interface{}) + suggester["fuzzy"] = fuzzy + if q.fuzziness != nil { + fuzzy["fuzziness"] = q.fuzziness + } + if q.fuzzyTranspositions != nil { + fuzzy["transpositions"] = *q.fuzzyTranspositions + } + if q.fuzzyMinLength != nil { + fuzzy["min_length"] = *q.fuzzyMinLength + } + if q.fuzzyPrefixLength != nil { + fuzzy["prefix_length"] = *q.fuzzyPrefixLength + } + if q.unicodeAware != nil { + fuzzy["unicode_aware"] = *q.unicodeAware + } + + if !includeName { + return cs, nil + } + + source := make(map[string]interface{}) + source[q.name] = cs + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggester_completion_test.go b/vendor/gopkg.in/olivere/elastic.v5/suggester_completion_test.go deleted file mode 100644 index adbf58657..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/suggester_completion_test.go +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestCompletionSuggesterSource(t *testing.T) { - s := NewCompletionSuggester("song-suggest"). - Text("n"). - Field("suggest") - src, err := s.Source(true) - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"song-suggest":{"text":"n","completion":{"field":"suggest"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestCompletionSuggesterPrefixSource(t *testing.T) { - s := NewCompletionSuggester("song-suggest"). - Prefix("nir"). - Field("suggest") - src, err := s.Source(true) - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"song-suggest":{"prefix":"nir","completion":{"field":"suggest"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestCompletionSuggesterPrefixWithFuzzySource(t *testing.T) { - s := NewCompletionSuggester("song-suggest"). - Prefix("nor"). - Field("suggest"). - FuzzyOptions(NewFuzzyCompletionSuggesterOptions().EditDistance(2)) - src, err := s.Source(true) - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"song-suggest":{"prefix":"nor","completion":{"field":"suggest","fuzzy":{"fuzziness":2}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestCompletionSuggesterRegexSource(t *testing.T) { - s := NewCompletionSuggester("song-suggest"). - Regex("n[ever|i]r"). - Field("suggest") - src, err := s.Source(true) - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"song-suggest":{"regex":"n[ever|i]r","completion":{"field":"suggest"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestCompletionSuggesterSourceWithMultipleContexts(t *testing.T) { - s := NewCompletionSuggester("song-suggest"). - Text("n"). - Field("suggest"). - ContextQueries( - NewSuggesterCategoryQuery("artist", "Sting"), - NewSuggesterCategoryQuery("label", "BMG"), - ) - src, err := s.Source(true) - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"song-suggest":{"text":"n","completion":{"contexts":{"artist":[{"context":"Sting"}],"label":[{"context":"BMG"}]},"field":"suggest"}}}` - if got != expected { - t.Errorf("expected %s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggester_context.go b/vendor/gopkg.in/olivere/elastic.v5/suggester_context.go index 12877c1a6..ade099151 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/suggester_context.go +++ b/vendor/gopkg.in/olivere/elastic.v5/suggester_context.go @@ -13,7 +13,7 @@ type SuggesterContextQuery interface { } // ContextSuggester is a fast suggester for e.g. type-ahead completion that supports filtering and boosting based on contexts. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/suggester-context.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/current/suggester-context.html // for more details. type ContextSuggester struct { Suggester @@ -94,7 +94,7 @@ func (q *ContextSuggester) Source(includeName bool) (interface{}, error) { if err != nil { return nil, err } - suggester["contexts"] = src + suggester["context"] = src default: ctxq := make(map[string]interface{}) for _, query := range q.contextQueries { diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggester_context_category.go b/vendor/gopkg.in/olivere/elastic.v5/suggester_context_category.go index 9c50651fa..2d63fe8fb 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/suggester_context_category.go +++ b/vendor/gopkg.in/olivere/elastic.v5/suggester_context_category.go @@ -7,7 +7,7 @@ package elastic // -- SuggesterCategoryMapping -- // SuggesterCategoryMapping provides a mapping for a category context in a suggester. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/suggester-context.html#_category_mapping. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/suggester-context.html#_category_mapping. type SuggesterCategoryMapping struct { name string fieldName string @@ -59,7 +59,7 @@ func (q *SuggesterCategoryMapping) Source() (interface{}, error) { // -- SuggesterCategoryQuery -- // SuggesterCategoryQuery provides querying a category context in a suggester. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/suggester-context.html#_category_query. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/suggester-context.html#_category_query. type SuggesterCategoryQuery struct { name string values map[string]*int diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggester_context_category_test.go b/vendor/gopkg.in/olivere/elastic.v5/suggester_context_category_test.go deleted file mode 100644 index 46acd725e..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/suggester_context_category_test.go +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSuggesterCategoryMapping(t *testing.T) { - q := NewSuggesterCategoryMapping("color").DefaultValues("red") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"color":{"default":"red","type":"category"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSuggesterCategoryMappingWithTwoDefaultValues(t *testing.T) { - q := NewSuggesterCategoryMapping("color").DefaultValues("red", "orange") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"color":{"default":["red","orange"],"type":"category"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSuggesterCategoryMappingWithFieldName(t *testing.T) { - q := NewSuggesterCategoryMapping("color"). - DefaultValues("red", "orange"). - FieldName("color_field") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"color":{"default":["red","orange"],"path":"color_field","type":"category"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSuggesterCategoryQuery(t *testing.T) { - q := NewSuggesterCategoryQuery("color", "red") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"color":[{"context":"red"}]}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSuggesterCategoryQueryWithTwoValues(t *testing.T) { - q := NewSuggesterCategoryQuery("color", "red", "yellow") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expectedOutcomes := []string{ - `{"color":[{"context":"red"},{"context":"yellow"}]}`, - `{"color":[{"context":"yellow"},{"context":"red"}]}`, - } - var match bool - for _, expected := range expectedOutcomes { - if got == expected { - match = true - break - } - } - if !match { - t.Errorf("expected any of %v\n,got:\n%s", expectedOutcomes, got) - } -} - -func TestSuggesterCategoryQueryWithBoost(t *testing.T) { - q := NewSuggesterCategoryQuery("color", "red") - q.ValueWithBoost("yellow", 4) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expectedOutcomes := []string{ - `{"color":[{"context":"red"},{"boost":4,"context":"yellow"}]}`, - `{"color":[{"boost":4,"context":"yellow"},{"context":"red"}]}`, - } - var match bool - for _, expected := range expectedOutcomes { - if got == expected { - match = true - break - } - } - if !match { - t.Errorf("expected any of %v\n,got:\n%v", expectedOutcomes, got) - } -} - -func TestSuggesterCategoryQueryWithoutBoost(t *testing.T) { - q := NewSuggesterCategoryQuery("color", "red") - q.Value("yellow") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expectedOutcomes := []string{ - `{"color":[{"context":"red"},{"context":"yellow"}]}`, - `{"color":[{"context":"yellow"},{"context":"red"}]}`, - } - var match bool - for _, expected := range expectedOutcomes { - if got == expected { - match = true - break - } - } - if !match { - t.Errorf("expected any of %v\n,got:\n%s", expectedOutcomes, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggester_context_geo.go b/vendor/gopkg.in/olivere/elastic.v5/suggester_context_geo.go index 3fea63feb..6815bfe73 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/suggester_context_geo.go +++ b/vendor/gopkg.in/olivere/elastic.v5/suggester_context_geo.go @@ -7,7 +7,7 @@ package elastic // -- SuggesterGeoMapping -- // SuggesterGeoMapping provides a mapping for a geolocation context in a suggester. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/suggester-context.html#_geo_location_mapping. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/suggester-context.html#_geo_location_mapping. type SuggesterGeoMapping struct { name string defaultLocations []*GeoPoint @@ -80,7 +80,7 @@ func (q *SuggesterGeoMapping) Source() (interface{}, error) { // -- SuggesterGeoQuery -- // SuggesterGeoQuery provides querying a geolocation context in a suggester. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/suggester-context.html#_geo_location_query +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/suggester-context.html#_geo_location_query type SuggesterGeoQuery struct { name string location *GeoPoint diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggester_context_geo_test.go b/vendor/gopkg.in/olivere/elastic.v5/suggester_context_geo_test.go deleted file mode 100644 index b1ab2f495..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/suggester_context_geo_test.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSuggesterGeoMapping(t *testing.T) { - q := NewSuggesterGeoMapping("location"). - Precision("1km", "5m"). - Neighbors(true). - FieldName("pin"). - DefaultLocations(GeoPointFromLatLon(0.0, 0.0)) - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"location":{"default":{"lat":0,"lon":0},"neighbors":true,"path":"pin","precision":["1km","5m"],"type":"geo"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSuggesterGeoQuery(t *testing.T) { - q := NewSuggesterGeoQuery("location", GeoPointFromLatLon(11.5, 62.71)).Precision("1km") - src, err := q.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"location":{"precision":"1km","value":{"lat":11.5,"lon":62.71}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggester_context_test.go b/vendor/gopkg.in/olivere/elastic.v5/suggester_context_test.go deleted file mode 100644 index 045ccb2f4..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/suggester_context_test.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestContextSuggesterSource(t *testing.T) { - s := NewContextSuggester("place_suggestion"). - Prefix("tim"). - Field("suggest") - src, err := s.Source(true) - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"place_suggestion":{"prefix":"tim","completion":{"field":"suggest"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestContextSuggesterSourceWithMultipleContexts(t *testing.T) { - s := NewContextSuggester("place_suggestion"). - Prefix("tim"). - Field("suggest"). - ContextQueries( - NewSuggesterCategoryQuery("place_type", "cafe", "restaurants"), - ) - src, err := s.Source(true) - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - // Due to the randomization of dictionary key, we could actually have two different valid expected outcomes - expected := `{"place_suggestion":{"prefix":"tim","completion":{"contexts":{"place_type":[{"context":"cafe"},{"context":"restaurants"}]},"field":"suggest"}}}` - if got != expected { - expected := `{"place_suggestion":{"prefix":"tim","completion":{"contexts":{"place_type":[{"context":"restaurants"},{"context":"cafe"}]},"field":"suggest"}}}` - if got != expected { - t.Errorf("expected %s\n,got:\n%s", expected, got) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggester_phrase.go b/vendor/gopkg.in/olivere/elastic.v5/suggester_phrase.go index 2f6b6a326..f75e1ddc1 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/suggester_phrase.go +++ b/vendor/gopkg.in/olivere/elastic.v5/suggester_phrase.go @@ -7,7 +7,7 @@ package elastic // PhraseSuggester provides an API to access word alternatives // on a per token basis within a certain string distance. // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-suggesters-phrase.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-suggesters-phrase.html. type PhraseSuggester struct { Suggester name string @@ -213,7 +213,7 @@ func (q *PhraseSuggester) Source(includeName bool) (interface{}, error) { if err != nil { return nil, err } - suggester["contexts"] = src + suggester["context"] = src default: var ctxq []interface{} for _, query := range q.contextQueries { @@ -223,7 +223,7 @@ func (q *PhraseSuggester) Source(includeName bool) (interface{}, error) { } ctxq = append(ctxq, src) } - suggester["contexts"] = ctxq + suggester["context"] = ctxq } // Phase-specified parameters @@ -312,7 +312,7 @@ type SmoothingModel interface { } // StupidBackoffSmoothingModel implements a stupid backoff smoothing model. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-suggesters-phrase.html#_smoothing_models +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-suggesters-phrase.html#_smoothing_models // for details about smoothing models. type StupidBackoffSmoothingModel struct { discount float64 @@ -337,7 +337,7 @@ func (sm *StupidBackoffSmoothingModel) Source() (interface{}, error) { // -- // LaplaceSmoothingModel implements a laplace smoothing model. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-suggesters-phrase.html#_smoothing_models +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-suggesters-phrase.html#_smoothing_models // for details about smoothing models. type LaplaceSmoothingModel struct { alpha float64 @@ -363,7 +363,7 @@ func (sm *LaplaceSmoothingModel) Source() (interface{}, error) { // LinearInterpolationSmoothingModel implements a linear interpolation // smoothing model. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-suggesters-phrase.html#_smoothing_models +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-suggesters-phrase.html#_smoothing_models // for details about smoothing models. type LinearInterpolationSmoothingModel struct { trigramLamda float64 @@ -399,7 +399,7 @@ type CandidateGenerator interface { } // DirectCandidateGenerator implements a direct candidate generator. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-suggesters-phrase.html#_smoothing_models +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-suggesters-phrase.html#_smoothing_models // for details about smoothing models. type DirectCandidateGenerator struct { field string diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggester_phrase_test.go b/vendor/gopkg.in/olivere/elastic.v5/suggester_phrase_test.go deleted file mode 100644 index 63dde686e..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/suggester_phrase_test.go +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestPhraseSuggesterSource(t *testing.T) { - s := NewPhraseSuggester("name"). - Text("Xor the Got-Jewel"). - Analyzer("body"). - Field("bigram"). - Size(1). - RealWordErrorLikelihood(0.95). - MaxErrors(0.5). - GramSize(2). - Highlight("<em>", "</em>") - src, err := s.Source(true) - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"name":{"text":"Xor the Got-Jewel","phrase":{"analyzer":"body","field":"bigram","gram_size":2,"highlight":{"post_tag":"\u003c/em\u003e","pre_tag":"\u003cem\u003e"},"max_errors":0.5,"real_word_error_likelihood":0.95,"size":1}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPhraseSuggesterSourceWithContextQuery(t *testing.T) { - geomapQ := NewSuggesterGeoMapping("location"). - Precision("1km", "5m"). - Neighbors(true). - FieldName("pin"). - DefaultLocations(GeoPointFromLatLon(0.0, 0.0)) - - s := NewPhraseSuggester("name"). - Text("Xor the Got-Jewel"). - Analyzer("body"). - Field("bigram"). - Size(1). - RealWordErrorLikelihood(0.95). - MaxErrors(0.5). - GramSize(2). - Highlight("<em>", "</em>"). - ContextQuery(geomapQ) - src, err := s.Source(true) - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"name":{"text":"Xor the Got-Jewel","phrase":{"analyzer":"body","contexts":{"location":{"default":{"lat":0,"lon":0},"neighbors":true,"path":"pin","precision":["1km","5m"],"type":"geo"}},"field":"bigram","gram_size":2,"highlight":{"post_tag":"\u003c/em\u003e","pre_tag":"\u003cem\u003e"},"max_errors":0.5,"real_word_error_likelihood":0.95,"size":1}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPhraseSuggesterComplexSource(t *testing.T) { - g1 := NewDirectCandidateGenerator("body"). - SuggestMode("always"). - MinWordLength(1) - - g2 := NewDirectCandidateGenerator("reverse"). - SuggestMode("always"). - MinWordLength(1). - PreFilter("reverse"). - PostFilter("reverse") - - s := NewPhraseSuggester("simple_phrase"). - Text("Xor the Got-Jewel"). - Analyzer("body"). - Field("bigram"). - Size(4). - RealWordErrorLikelihood(0.95). - Confidence(2.0). - GramSize(2). - CandidateGenerators(g1, g2). - CollateQuery(`"match":{"{{field_name}}" : "{{suggestion}}"}`). - CollateParams(map[string]interface{}{"field_name": "title"}). - CollatePreference("_primary"). - CollatePrune(true) - src, err := s.Source(true) - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"simple_phrase":{"text":"Xor the Got-Jewel","phrase":{"analyzer":"body","collate":{"params":{"field_name":"title"},"preference":"_primary","prune":true,"query":"\"match\":{\"{{field_name}}\" : \"{{suggestion}}\"}"},"confidence":2,"direct_generator":[{"field":"body","min_word_length":1,"suggest_mode":"always"},{"field":"reverse","min_word_length":1,"post_filter":"reverse","pre_filter":"reverse","suggest_mode":"always"}],"field":"bigram","gram_size":2,"real_word_error_likelihood":0.95,"size":4}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPhraseStupidBackoffSmoothingModel(t *testing.T) { - s := NewStupidBackoffSmoothingModel(0.42) - src, err := s.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - // The source does NOT include the smoothing model type! - expected := `{"discount":0.42}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } - if s.Type() != "stupid_backoff" { - t.Errorf("expected %q, got: %q", "stupid_backoff", s.Type()) - } -} - -func TestPhraseLaplaceSmoothingModel(t *testing.T) { - s := NewLaplaceSmoothingModel(0.63) - src, err := s.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - // The source does NOT include the smoothing model type! - expected := `{"alpha":0.63}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } - if s.Type() != "laplace" { - t.Errorf("expected %q, got: %q", "laplace", s.Type()) - } -} - -func TestLinearInterpolationSmoothingModel(t *testing.T) { - s := NewLinearInterpolationSmoothingModel(0.3, 0.2, 0.05) - src, err := s.Source() - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - // The source does NOT include the smoothing model type! - expected := `{"bigram_lambda":0.2,"trigram_lambda":0.3,"unigram_lambda":0.05}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } - if s.Type() != "linear_interpolation" { - t.Errorf("expected %q, got: %q", "linear_interpolation", s.Type()) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggester_term.go b/vendor/gopkg.in/olivere/elastic.v5/suggester_term.go index 69e1531f6..9c199f69d 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/suggester_term.go +++ b/vendor/gopkg.in/olivere/elastic.v5/suggester_term.go @@ -6,7 +6,7 @@ package elastic // TermSuggester suggests terms based on edit distance. // For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/6.0/search-suggesters-term.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-suggesters-term.html. type TermSuggester struct { Suggester name string @@ -178,7 +178,7 @@ func (q *TermSuggester) Source(includeName bool) (interface{}, error) { if err != nil { return nil, err } - suggester["contexts"] = src + suggester["context"] = src default: ctxq := make([]interface{}, len(q.contextQueries)) for i, query := range q.contextQueries { @@ -188,7 +188,7 @@ func (q *TermSuggester) Source(includeName bool) (interface{}, error) { } ctxq[i] = src } - suggester["contexts"] = ctxq + suggester["context"] = ctxq } // Specific to term suggester diff --git a/vendor/gopkg.in/olivere/elastic.v5/suggester_term_test.go b/vendor/gopkg.in/olivere/elastic.v5/suggester_term_test.go deleted file mode 100644 index d3250f69a..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/suggester_term_test.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTermSuggesterSource(t *testing.T) { - s := NewTermSuggester("name"). - Text("n"). - Field("suggest") - src, err := s.Source(true) - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"name":{"text":"n","term":{"field":"suggest"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermSuggesterWithPrefixLengthSource(t *testing.T) { - s := NewTermSuggester("name"). - Text("n"). - Field("suggest"). - PrefixLength(0) - src, err := s.Source(true) - if err != nil { - t.Fatal(err) - } - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"name":{"text":"n","term":{"field":"suggest","prefix_length":0}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/tasks_cancel.go b/vendor/gopkg.in/olivere/elastic.v5/tasks_cancel.go index 84f8aec35..2c74fd87e 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/tasks_cancel.go +++ b/vendor/gopkg.in/olivere/elastic.v5/tasks_cancel.go @@ -10,7 +10,7 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // TasksCancelService can cancel long-running tasks. @@ -95,7 +95,7 @@ func (s *TasksCancelService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if len(s.actions) > 0 { params.Set("actions", strings.Join(s.actions, ",")) @@ -131,11 +131,7 @@ func (s *TasksCancelService) Do(ctx context.Context) (*TasksListResponse, error) } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/tasks_cancel_test.go b/vendor/gopkg.in/olivere/elastic.v5/tasks_cancel_test.go deleted file mode 100644 index c9d863394..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/tasks_cancel_test.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestTasksCancelBuildURL(t *testing.T) { - client := setupTestClient(t) - - // Cancel all - got, _, err := client.TasksCancel().buildURL() - if err != nil { - t.Fatal(err) - } - want := "/_tasks/_cancel" - if got != want { - t.Errorf("want %q; got %q", want, got) - } - - // Cancel specific task - got, _, err = client.TasksCancel().TaskId(42).buildURL() - if err != nil { - t.Fatal(err) - } - want = "/_tasks/42/_cancel" - if got != want { - t.Errorf("want %q; got %q", want, got) - } -} - -/* -func TestTasksCancel(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if esversion < "2.3.0" { - t.Skipf("Elasticsearch %v does not support Tasks Management API yet", esversion) - } - res, err := client.TasksCancel("1").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("response is nil") - } -} -*/ diff --git a/vendor/gopkg.in/olivere/elastic.v5/tasks_get_task.go b/vendor/gopkg.in/olivere/elastic.v5/tasks_get_task.go index 5f63726e4..5368169ec 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/tasks_get_task.go +++ b/vendor/gopkg.in/olivere/elastic.v5/tasks_get_task.go @@ -5,7 +5,7 @@ import ( "fmt" "net/url" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // TasksGetTaskService retrieves the state of a task in the cluster. It is part of the Task Management API @@ -85,11 +85,7 @@ func (s *TasksGetTaskService) Do(ctx context.Context) (*TasksGetTaskResponse, er } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/tasks_get_task_test.go b/vendor/gopkg.in/olivere/elastic.v5/tasks_get_task_test.go deleted file mode 100644 index a4da49c74..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/tasks_get_task_test.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestTasksGetTaskBuildURL(t *testing.T) { - client := setupTestClient(t) - - // Get specific task - got, _, err := client.TasksGetTask().TaskId("123").buildURL() - if err != nil { - t.Fatal(err) - } - want := "/_tasks/123" - if got != want { - t.Errorf("want %q; got %q", want, got) - } -} - -/* -func TestTasksGetTask(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if esversion < "2.3.0" { - t.Skipf("Elasticsearch %v does not support Tasks Management API yet", esversion) - } - res, err := client.TasksGetTask().TaskId("123").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("response is nil") - } -} -*/ diff --git a/vendor/gopkg.in/olivere/elastic.v5/tasks_list.go b/vendor/gopkg.in/olivere/elastic.v5/tasks_list.go index 54299d961..6cad558af 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/tasks_list.go +++ b/vendor/gopkg.in/olivere/elastic.v5/tasks_list.go @@ -10,12 +10,12 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // TasksListService retrieves the list of currently executing tasks // on one ore more nodes in the cluster. It is part of the Task Management API -// documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.0/tasks.html. +// documented at https://www.elastic.co/guide/en/elasticsearch/reference/5.6/tasks.html. // // It is supported as of Elasticsearch 2.3.0. type TasksListService struct { @@ -115,7 +115,7 @@ func (s *TasksListService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if len(s.actions) > 0 { params.Set("actions", strings.Join(s.actions, ",")) @@ -160,11 +160,7 @@ func (s *TasksListService) Do(ctx context.Context) (*TasksListResponse, error) { } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/tasks_list_test.go b/vendor/gopkg.in/olivere/elastic.v5/tasks_list_test.go deleted file mode 100644 index 9ecabcd68..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/tasks_list_test.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" -) - -func TestTasksListBuildURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - TaskId []string - Expected string - }{ - { - []string{}, - "/_tasks", - }, - { - []string{"42"}, - "/_tasks/42", - }, - { - []string{"42", "37"}, - "/_tasks/42%2C37", - }, - } - - for i, test := range tests { - path, _, err := client.TasksList().TaskId(test.TaskId...).buildURL() - if err != nil { - t.Errorf("case #%d: %v", i+1, err) - continue - } - if path != test.Expected { - t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) - } - } -} - -func TestTasksList(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if esversion < "2.3.0" { - t.Skipf("Elasticsearch %v does not support Tasks Management API yet", esversion) - } - - res, err := client.TasksList().Pretty(true).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("response is nil") - } - if len(res.Nodes) == 0 { - t.Fatalf("expected at least 1 node; got: %d", len(res.Nodes)) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/termvectors.go b/vendor/gopkg.in/olivere/elastic.v5/termvectors.go index 5943ad14f..6bbcf8f3b 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/termvectors.go +++ b/vendor/gopkg.in/olivere/elastic.v5/termvectors.go @@ -10,14 +10,14 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // TermvectorsService returns information and statistics on terms in the // fields of a particular document. The document could be stored in the // index or artificially provided by the user. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-termvectors.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-termvectors.html // for documentation. type TermvectorsService struct { client *Client @@ -169,7 +169,7 @@ func (s *TermvectorsService) Version(version interface{}) *TermvectorsService { return s } -// VersionType specifies a version type ("internal", "external", or "external_gte"). +// VersionType specifies a version type ("internal", "external", "external_gte", or "force"). func (s *TermvectorsService) VersionType(versionType string) *TermvectorsService { s.versionType = versionType return s @@ -217,7 +217,7 @@ func (s *TermvectorsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if s.dfs != nil { params.Set("dfs", fmt.Sprintf("%v", *s.dfs)) @@ -316,12 +316,7 @@ func (s *TermvectorsService) Do(ctx context.Context) (*TermvectorsResponse, erro } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "GET", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "GET", path, params, body) if err != nil { return nil, err } @@ -338,7 +333,7 @@ func (s *TermvectorsService) Do(ctx context.Context) (*TermvectorsResponse, erro // TermvectorsFilterSettings adds additional filters to a Termsvector request. // It allows to filter terms based on their tf-idf scores. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-termvectors.html#_terms_filtering +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-termvectors.html#_terms_filtering // for more information. type TermvectorsFilterSettings struct { maxNumTerms *int64 diff --git a/vendor/gopkg.in/olivere/elastic.v5/termvectors_test.go b/vendor/gopkg.in/olivere/elastic.v5/termvectors_test.go deleted file mode 100644 index 0391f2b0a..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/termvectors_test.go +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "testing" - "time" -) - -func TestTermVectorsBuildURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Index string - Type string - Id string - Expected string - }{ - { - "twitter", - "doc", - "", - "/twitter/doc/_termvectors", - }, - { - "twitter", - "doc", - "1", - "/twitter/doc/1/_termvectors", - }, - } - - for _, test := range tests { - builder := client.TermVectors(test.Index, test.Type) - if test.Id != "" { - builder = builder.Id(test.Id) - } - path, _, err := builder.buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} - -func TestTermVectorsWithId(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - - // Add a document - indexResult, err := client.Index(). - Index(testIndexName). - Type("doc"). - Id("1"). - BodyJson(&tweet1). - Refresh("true"). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if indexResult == nil { - t.Errorf("expected result to be != nil; got: %v", indexResult) - } - - // TermVectors by specifying ID - field := "Message" - result, err := client.TermVectors(testIndexName, "doc"). - Id("1"). - Fields(field). - FieldStatistics(true). - TermStatistics(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if result == nil { - t.Fatal("expected to return information and statistics") - } - if !result.Found { - t.Errorf("expected found to be %v; got: %v", true, result.Found) - } -} - -func TestTermVectorsWithDoc(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - // Travis lags sometimes - if isTravis() { - time.Sleep(2 * time.Second) - } - - // TermVectors by specifying Doc - var doc = map[string]interface{}{ - "fullname": "John Doe", - "text": "twitter test test test", - } - var perFieldAnalyzer = map[string]string{ - "fullname": "keyword", - } - - result, err := client.TermVectors(testIndexName, "doc"). - Doc(doc). - PerFieldAnalyzer(perFieldAnalyzer). - FieldStatistics(true). - TermStatistics(true). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if result == nil { - t.Fatal("expected to return information and statistics") - } - if !result.Found { - t.Errorf("expected found to be %v; got: %v", true, result.Found) - } -} - -func TestTermVectorsWithFilter(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - // Travis lags sometimes - if isTravis() { - time.Sleep(2 * time.Second) - } - - // TermVectors by specifying Doc - var doc = map[string]interface{}{ - "fullname": "John Doe", - "text": "twitter test test test", - } - var perFieldAnalyzer = map[string]string{ - "fullname": "keyword", - } - - result, err := client.TermVectors(testIndexName, "doc"). - Doc(doc). - PerFieldAnalyzer(perFieldAnalyzer). - FieldStatistics(true). - TermStatistics(true). - Filter(NewTermvectorsFilterSettings().MinTermFreq(1)). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if result == nil { - t.Fatal("expected to return information and statistics") - } - if !result.Found { - t.Errorf("expected found to be %v; got: %v", true, result.Found) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/update.go b/vendor/gopkg.in/olivere/elastic.v5/update.go index 5507fae4c..1718bc585 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/update.go +++ b/vendor/gopkg.in/olivere/elastic.v5/update.go @@ -10,11 +10,11 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // UpdateService updates a document in Elasticsearch. -// See https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-update.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/docs-update.html // for details. type UpdateService struct { client *Client @@ -105,7 +105,7 @@ func (b *UpdateService) Version(version int64) *UpdateService { return b } -// VersionType is e.g. "internal". +// VersionType is one of "internal" or "force". func (b *UpdateService) VersionType(versionType string) *UpdateService { b.versionType = versionType return b @@ -293,12 +293,7 @@ func (b *UpdateService) Do(ctx context.Context) (*UpdateResponse, error) { } // Get response - res, err := b.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - }) + res, err := b.client.PerformRequest(ctx, "POST", path, params, body) if err != nil { return nil, err } @@ -313,15 +308,12 @@ func (b *UpdateService) Do(ctx context.Context) (*UpdateResponse, error) { // UpdateResponse is the result of updating a document in Elasticsearch. type UpdateResponse struct { - Index string `json:"_index,omitempty"` - Type string `json:"_type,omitempty"` - Id string `json:"_id,omitempty"` - Version int64 `json:"_version,omitempty"` + Index string `json:"_index"` + Type string `json:"_type"` + Id string `json:"_id"` + Version int `json:"_version"` + Shards *shardsInfo `json:"_shards"` Result string `json:"result,omitempty"` - Shards *shardsInfo `json:"_shards,omitempty"` - SeqNo int64 `json:"_seq_no,omitempty"` - PrimaryTerm int64 `json:"_primary_term,omitempty"` - Status int `json:"status,omitempty"` ForcedRefresh bool `json:"forced_refresh,omitempty"` GetResult *GetResult `json:"get,omitempty"` } diff --git a/vendor/gopkg.in/olivere/elastic.v5/update_by_query.go b/vendor/gopkg.in/olivere/elastic.v5/update_by_query.go index 953d67388..505e1e834 100644 --- a/vendor/gopkg.in/olivere/elastic.v5/update_by_query.go +++ b/vendor/gopkg.in/olivere/elastic.v5/update_by_query.go @@ -10,7 +10,7 @@ import ( "net/url" "strings" - "github.com/olivere/elastic/uritemplates" + "gopkg.in/olivere/elastic.v5/uritemplates" ) // UpdateByQueryService is documented at https://www.elastic.co/guide/en/elasticsearch/plugins/master/plugins-reindex.html. @@ -447,7 +447,7 @@ func (s *UpdateByQueryService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "true") + params.Set("pretty", "1") } if len(s.xSource) > 0 { params.Set("_source", strings.Join(s.xSource, ",")) @@ -636,12 +636,7 @@ func (s *UpdateByQueryService) Do(ctx context.Context) (*BulkIndexByScrollRespon } // Get HTTP response - res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ - Method: "POST", - Path: path, - Params: params, - Body: body, - }) + res, err := s.client.PerformRequest(ctx, "POST", path, params, body) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v5/update_by_query_test.go b/vendor/gopkg.in/olivere/elastic.v5/update_by_query_test.go deleted file mode 100644 index fde924dd5..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/update_by_query_test.go +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "testing" -) - -func TestUpdateByQueryBuildURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Indices []string - Types []string - Expected string - ExpectErr bool - }{ - { - []string{}, - []string{}, - "", - true, - }, - { - []string{"index1"}, - []string{}, - "/index1/_update_by_query", - false, - }, - { - []string{"index1", "index2"}, - []string{}, - "/index1%2Cindex2/_update_by_query", - false, - }, - { - []string{}, - []string{"type1"}, - "", - true, - }, - { - []string{"index1"}, - []string{"type1"}, - "/index1/type1/_update_by_query", - false, - }, - { - []string{"index1", "index2"}, - []string{"type1", "type2"}, - "/index1%2Cindex2/type1%2Ctype2/_update_by_query", - false, - }, - } - - for i, test := range tests { - builder := client.UpdateByQuery().Index(test.Indices...).Type(test.Types...) - err := builder.Validate() - if err != nil { - if !test.ExpectErr { - t.Errorf("case #%d: %v", i+1, err) - continue - } - } else { - // err == nil - if test.ExpectErr { - t.Errorf("case #%d: expected error", i+1) - continue - } - path, _, _ := builder.buildURL() - if path != test.Expected { - t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) - } - } - } -} - -func TestUpdateByQueryBodyWithQuery(t *testing.T) { - client := setupTestClient(t) - out, err := client.UpdateByQuery().Query(NewTermQuery("user", "olivere")).getBody() - if err != nil { - t.Fatal(err) - } - b, err := json.Marshal(out) - if err != nil { - t.Fatal(err) - } - got := string(b) - want := `{"query":{"term":{"user":"olivere"}}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestUpdateByQueryBodyWithQueryAndScript(t *testing.T) { - client := setupTestClient(t) - out, err := client.UpdateByQuery(). - Query(NewTermQuery("user", "olivere")). - Script(NewScriptInline("ctx._source.likes++")). - getBody() - if err != nil { - t.Fatal(err) - } - b, err := json.Marshal(out) - if err != nil { - t.Fatal(err) - } - got := string(b) - want := `{"query":{"term":{"user":"olivere"}},"script":{"source":"ctx._source.likes++"}}` - if got != want { - t.Fatalf("\ngot %s\nwant %s", got, want) - } -} - -func TestUpdateByQuery(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if esversion < "2.3.0" { - t.Skipf("Elasticsearch %v does not support update-by-query yet", esversion) - } - - sourceCount, err := client.Count(testIndexName).Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if sourceCount <= 0 { - t.Fatalf("expected more than %d documents; got: %d", 0, sourceCount) - } - - res, err := client.UpdateByQuery(testIndexName).ProceedOnVersionConflict().Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("response is nil") - } - if res.Updated != sourceCount { - t.Fatalf("expected %d; got: %d", sourceCount, res.Updated) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/update_integration_test.go b/vendor/gopkg.in/olivere/elastic.v5/update_integration_test.go deleted file mode 100644 index f36925298..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/update_integration_test.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "testing" -) - -func TestUpdateWithScript(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) - - // Get original - getRes, err := client.Get().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - var original tweet - if err := json.Unmarshal(*getRes.Source, &original); err != nil { - t.Fatal(err) - } - - // Update with script - updRes, err := client.Update().Index(testIndexName).Type("doc").Id("1"). - Script( - NewScript(`ctx._source.message = "Updated message text."`).Lang("painless"), - ). - Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - if updRes == nil { - t.Fatal("response is nil") - } - if want, have := "updated", updRes.Result; want != have { - t.Fatalf("want Result = %q, have %v", want, have) - } - - // Get new version - getRes, err = client.Get().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) - if err != nil { - t.Fatal(err) - } - var updated tweet - if err := json.Unmarshal(*getRes.Source, &updated); err != nil { - t.Fatal(err) - } - - if want, have := original.User, updated.User; want != have { - t.Fatalf("want User = %q, have %v", want, have) - } - if want, have := "Updated message text.", updated.Message; want != have { - t.Fatalf("want Message = %q, have %v", want, have) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/update_test.go b/vendor/gopkg.in/olivere/elastic.v5/update_test.go deleted file mode 100644 index 1f04cedd6..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/update_test.go +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "context" - "encoding/json" - "net/url" - "testing" -) - -func TestUpdateViaScript(t *testing.T) { - client := setupTestClient(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) - - update := client.Update(). - Index("test").Type("type1").Id("1"). - Script(NewScript("ctx._source.tags += tag").Params(map[string]interface{}{"tag": "blue"}).Lang("groovy")) - path, params, err := update.url() - if err != nil { - t.Fatalf("expected to return URL, got: %v", err) - } - expectedPath := `/test/type1/1/_update` - if expectedPath != path { - t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) - } - expectedParams := url.Values{} - if expectedParams.Encode() != params.Encode() { - t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) - } - body, err := update.body() - if err != nil { - t.Fatalf("expected to return body, got: %v", err) - } - data, err := json.Marshal(body) - if err != nil { - t.Fatalf("expected to marshal body as JSON, got: %v", err) - } - got := string(data) - expected := `{"script":{"lang":"groovy","params":{"tag":"blue"},"source":"ctx._source.tags += tag"}}` - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } -} - -func TestUpdateViaScriptId(t *testing.T) { - client := setupTestClient(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) - - scriptParams := map[string]interface{}{ - "pageViewEvent": map[string]interface{}{ - "url": "foo.com/bar", - "response": 404, - "time": "2014-01-01 12:32", - }, - } - script := NewScriptStored("my_web_session_summariser").Params(scriptParams) - - update := client.Update(). - Index("sessions").Type("session").Id("dh3sgudg8gsrgl"). - Script(script). - ScriptedUpsert(true). - Upsert(map[string]interface{}{}) - path, params, err := update.url() - if err != nil { - t.Fatalf("expected to return URL, got: %v", err) - } - expectedPath := `/sessions/session/dh3sgudg8gsrgl/_update` - if expectedPath != path { - t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) - } - expectedParams := url.Values{} - if expectedParams.Encode() != params.Encode() { - t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) - } - body, err := update.body() - if err != nil { - t.Fatalf("expected to return body, got: %v", err) - } - data, err := json.Marshal(body) - if err != nil { - t.Fatalf("expected to marshal body as JSON, got: %v", err) - } - got := string(data) - expected := `{"script":{"id":"my_web_session_summariser","params":{"pageViewEvent":{"response":404,"time":"2014-01-01 12:32","url":"foo.com/bar"}}},"scripted_upsert":true,"upsert":{}}` - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } -} - -func TestUpdateViaScriptAndUpsert(t *testing.T) { - client := setupTestClient(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) - - update := client.Update(). - Index("test").Type("type1").Id("1"). - Script(NewScript("ctx._source.counter += count").Params(map[string]interface{}{"count": 4})). - Upsert(map[string]interface{}{"counter": 1}) - path, params, err := update.url() - if err != nil { - t.Fatalf("expected to return URL, got: %v", err) - } - expectedPath := `/test/type1/1/_update` - if expectedPath != path { - t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) - } - expectedParams := url.Values{} - if expectedParams.Encode() != params.Encode() { - t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) - } - body, err := update.body() - if err != nil { - t.Fatalf("expected to return body, got: %v", err) - } - data, err := json.Marshal(body) - if err != nil { - t.Fatalf("expected to marshal body as JSON, got: %v", err) - } - got := string(data) - expected := `{"script":{"params":{"count":4},"source":"ctx._source.counter += count"},"upsert":{"counter":1}}` - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } -} - -func TestUpdateViaDoc(t *testing.T) { - client := setupTestClient(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) - - update := client.Update(). - Index("test").Type("type1").Id("1"). - Doc(map[string]interface{}{"name": "new_name"}). - DetectNoop(true) - path, params, err := update.url() - if err != nil { - t.Fatalf("expected to return URL, got: %v", err) - } - expectedPath := `/test/type1/1/_update` - if expectedPath != path { - t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) - } - expectedParams := url.Values{} - if expectedParams.Encode() != params.Encode() { - t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) - } - body, err := update.body() - if err != nil { - t.Fatalf("expected to return body, got: %v", err) - } - data, err := json.Marshal(body) - if err != nil { - t.Fatalf("expected to marshal body as JSON, got: %v", err) - } - got := string(data) - expected := `{"detect_noop":true,"doc":{"name":"new_name"}}` - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } -} - -func TestUpdateViaDocAndUpsert(t *testing.T) { - client := setupTestClient(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) - - update := client.Update(). - Index("test").Type("type1").Id("1"). - Doc(map[string]interface{}{"name": "new_name"}). - DocAsUpsert(true). - Timeout("1s"). - Refresh("true") - path, params, err := update.url() - if err != nil { - t.Fatalf("expected to return URL, got: %v", err) - } - expectedPath := `/test/type1/1/_update` - if expectedPath != path { - t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) - } - expectedParams := url.Values{"refresh": []string{"true"}, "timeout": []string{"1s"}} - if expectedParams.Encode() != params.Encode() { - t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) - } - body, err := update.body() - if err != nil { - t.Fatalf("expected to return body, got: %v", err) - } - data, err := json.Marshal(body) - if err != nil { - t.Fatalf("expected to marshal body as JSON, got: %v", err) - } - got := string(data) - expected := `{"doc":{"name":"new_name"},"doc_as_upsert":true}` - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } -} - -func TestUpdateViaDocAndUpsertAndFetchSource(t *testing.T) { - client := setupTestClient(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) - - update := client.Update(). - Index("test").Type("type1").Id("1"). - Doc(map[string]interface{}{"name": "new_name"}). - DocAsUpsert(true). - Timeout("1s"). - Refresh("true"). - FetchSource(true) - path, params, err := update.url() - if err != nil { - t.Fatalf("expected to return URL, got: %v", err) - } - expectedPath := `/test/type1/1/_update` - if expectedPath != path { - t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) - } - expectedParams := url.Values{ - "refresh": []string{"true"}, - "timeout": []string{"1s"}, - } - if expectedParams.Encode() != params.Encode() { - t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) - } - body, err := update.body() - if err != nil { - t.Fatalf("expected to return body, got: %v", err) - } - data, err := json.Marshal(body) - if err != nil { - t.Fatalf("expected to marshal body as JSON, got: %v", err) - } - got := string(data) - expected := `{"_source":true,"doc":{"name":"new_name"},"doc_as_upsert":true}` - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } -} - -func TestUpdateAndFetchSource(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) - - res, err := client.Update(). - Index(testIndexName).Type("doc").Id("1"). - Doc(map[string]interface{}{"user": "sandrae"}). - DetectNoop(true). - FetchSource(true). - Do(context.Background()) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected response != nil") - } - if res.GetResult == nil { - t.Fatal("expected GetResult != nil") - } - data, err := json.Marshal(res.GetResult.Source) - if err != nil { - t.Fatalf("expected to marshal body as JSON, got: %v", err) - } - got := string(data) - expected := `{"user":"sandrae","message":"Welcome to Golang and Elasticsearch.","retweets":0,"created":"0001-01-01T00:00:00Z"}` - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/uritemplates/utils_test.go b/vendor/gopkg.in/olivere/elastic.v5/uritemplates/utils_test.go deleted file mode 100644 index 633949b6f..000000000 --- a/vendor/gopkg.in/olivere/elastic.v5/uritemplates/utils_test.go +++ /dev/null @@ -1,105 +0,0 @@ -package uritemplates - -import ( - "testing" -) - -type ExpandTest struct { - in string - expansions map[string]string - want string -} - -var expandTests = []ExpandTest{ - // #0: no expansions - { - "http://www.golang.org/", - map[string]string{}, - "http://www.golang.org/", - }, - // #1: one expansion, no escaping - { - "http://www.golang.org/{bucket}/delete", - map[string]string{ - "bucket": "red", - }, - "http://www.golang.org/red/delete", - }, - // #2: one expansion, with hex escapes - { - "http://www.golang.org/{bucket}/delete", - map[string]string{ - "bucket": "red/blue", - }, - "http://www.golang.org/red%2Fblue/delete", - }, - // #3: one expansion, with space - { - "http://www.golang.org/{bucket}/delete", - map[string]string{ - "bucket": "red or blue", - }, - "http://www.golang.org/red%20or%20blue/delete", - }, - // #4: expansion not found - { - "http://www.golang.org/{object}/delete", - map[string]string{ - "bucket": "red or blue", - }, - "http://www.golang.org//delete", - }, - // #5: multiple expansions - { - "http://www.golang.org/{one}/{two}/{three}/get", - map[string]string{ - "one": "ONE", - "two": "TWO", - "three": "THREE", - }, - "http://www.golang.org/ONE/TWO/THREE/get", - }, - // #6: utf-8 characters - { - "http://www.golang.org/{bucket}/get", - map[string]string{ - "bucket": "£100", - }, - "http://www.golang.org/%C2%A3100/get", - }, - // #7: punctuations - { - "http://www.golang.org/{bucket}/get", - map[string]string{ - "bucket": `/\@:,.*~`, - }, - "http://www.golang.org/%2F%5C%40%3A%2C.%2A~/get", - }, - // #8: mis-matched brackets - { - "http://www.golang.org/{bucket/get", - map[string]string{ - "bucket": "red", - }, - "", - }, - // #9: "+" prefix for suppressing escape - // See also: http://tools.ietf.org/html/rfc6570#section-3.2.3 - { - "http://www.golang.org/{+topic}", - map[string]string{ - "topic": "/topics/myproject/mytopic", - }, - // The double slashes here look weird, but it's intentional - "http://www.golang.org//topics/myproject/mytopic", - }, -} - -func TestExpand(t *testing.T) { - for i, test := range expandTests { - got, _ := Expand(test.in, test.expansions) - if got != test.want { - t.Errorf("got %q expected %q in test %d", got, test.want, i) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v5/validate.go b/vendor/gopkg.in/olivere/elastic.v5/validate.go new file mode 100644 index 000000000..69a43cdd9 --- /dev/null +++ b/vendor/gopkg.in/olivere/elastic.v5/validate.go @@ -0,0 +1,280 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "gopkg.in/olivere/elastic.v5/uritemplates" +) + +// ValidateService allows a user to validate a potentially +// expensive query without executing it. +// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-validate.html. +type ValidateService struct { + client *Client + pretty bool + index []string + typ []string + q string + explain *bool + rewrite *bool + allShards *bool + lenient *bool + analyzer string + df string + analyzeWildcard *bool + defaultOperator string + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string + bodyJson interface{} + bodyString string +} + +// NewValidateService creates a new ValidateService. +func NewValidateService(client *Client) *ValidateService { + return &ValidateService{ + client: client, + } +} + +// Index sets the names of the indices to use for search. +func (s *ValidateService) Index(index ...string) *ValidateService { + s.index = append(s.index, index...) + return s +} + +// Types adds search restrictions for a list of types. +func (s *ValidateService) Type(typ ...string) *ValidateService { + s.typ = append(s.typ, typ...) + return s +} + +// Lenient specifies whether format-based query failures +// (such as providing text to a numeric field) should be ignored. +func (s *ValidateService) Lenient(lenient bool) *ValidateService { + s.lenient = &lenient + return s +} + +// Query in the Lucene query string syntax. +func (s *ValidateService) Q(q string) *ValidateService { + s.q = q + return s +} + +// An explain parameter can be specified to get more detailed information about why a query failed. +func (s *ValidateService) Explain(explain *bool) *ValidateService { + s.explain = explain + return s +} + +// Provide a more detailed explanation showing the actual Lucene query that will be executed. +func (s *ValidateService) Rewrite(rewrite *bool) *ValidateService { + s.rewrite = rewrite + return s +} + +// Execute validation on all shards instead of one random shard per index. +func (s *ValidateService) AllShards(allShards *bool) *ValidateService { + s.allShards = allShards + return s +} + +// AnalyzeWildcard specifies whether wildcards and prefix queries +// in the query string query should be analyzed (default: false). +func (s *ValidateService) AnalyzeWildcard(analyzeWildcard bool) *ValidateService { + s.analyzeWildcard = &analyzeWildcard + return s +} + +// Analyzer is the analyzer for the query string query. +func (s *ValidateService) Analyzer(analyzer string) *ValidateService { + s.analyzer = analyzer + return s +} + +// Df is the default field for query string query (default: _all). +func (s *ValidateService) Df(df string) *ValidateService { + s.df = df + return s +} + +// DefaultOperator is the default operator for query string query (AND or OR). +func (s *ValidateService) DefaultOperator(defaultOperator string) *ValidateService { + s.defaultOperator = defaultOperator + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *ValidateService) Pretty(pretty bool) *ValidateService { + s.pretty = pretty + return s +} + +// Query sets a query definition using the Query DSL. +func (s *ValidateService) Query(query Query) *ValidateService { + src, err := query.Source() + if err != nil { + // Do nothing in case of an error + return s + } + body := make(map[string]interface{}) + body["query"] = src + s.bodyJson = body + return s +} + +// IgnoreUnavailable indicates whether the specified concrete indices +// should be ignored when unavailable (missing or closed). +func (s *ValidateService) IgnoreUnavailable(ignoreUnavailable bool) *ValidateService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. (This includes `_all` string +// or when no indices have been specified). +func (s *ValidateService) AllowNoIndices(allowNoIndices bool) *ValidateService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *ValidateService) ExpandWildcards(expandWildcards string) *ValidateService { + s.expandWildcards = expandWildcards + return s +} + +// BodyJson sets the query definition using the Query DSL. +func (s *ValidateService) BodyJson(body interface{}) *ValidateService { + s.bodyJson = body + return s +} + +// BodyString sets the query definition using the Query DSL as a string. +func (s *ValidateService) BodyString(body string) *ValidateService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *ValidateService) buildURL() (string, url.Values, error) { + var err error + var path string + // Build URL + if len(s.index) > 0 && len(s.typ) > 0 { + path, err = uritemplates.Expand("/{index}/{type}/_validate/query", map[string]string{ + "index": strings.Join(s.index, ","), + "type": strings.Join(s.typ, ","), + }) + } else if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_validate/query", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else { + path, err = uritemplates.Expand("/_validate/query", map[string]string{ + "type": strings.Join(s.typ, ","), + }) + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.explain != nil { + params.Set("explain", fmt.Sprintf("%v", *s.explain)) + } + if s.rewrite != nil { + params.Set("rewrite", fmt.Sprintf("%v", *s.rewrite)) + } + if s.allShards != nil { + params.Set("all_shards", fmt.Sprintf("%v", *s.allShards)) + } + if s.defaultOperator != "" { + params.Set("default_operator", s.defaultOperator) + } + if s.lenient != nil { + params.Set("lenient", fmt.Sprintf("%v", *s.lenient)) + } + if s.q != "" { + params.Set("q", s.q) + } + if s.analyzeWildcard != nil { + params.Set("analyze_wildcard", fmt.Sprintf("%v", *s.analyzeWildcard)) + } + if s.analyzer != "" { + params.Set("analyzer", s.analyzer) + } + if s.df != "" { + params.Set("df", s.df) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *ValidateService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *ValidateService) Do(ctx context.Context) (*ValidateResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else { + body = s.bodyString + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, "GET", path, params, body) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(ValidateResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// ValidateResponse is the response of ValidateService.Do. +type ValidateResponse struct { + Valid bool `json:"valid"` + Shards map[string]interface{} `json:"_shards"` + Explanations []interface{} `json:"explanations"` +} |