From f98d5b6261a847b0de4407a665fd007372d97558 Mon Sep 17 00:00:00 2001 From: Jim Ferenczi Date: Tue, 20 Sep 2016 09:18:08 +0200 Subject: [PATCH] Add CONSOLE tests for snippets in get and bulk API docs (#20473) * Add CONSOLE tests for snippets in get and bulk API docs This change adds tests for the snippets in the get and bulk API documentation. --- docs/reference/docs/bulk.asciidoc | 86 +++++++++++++++++++++++++++++-- docs/reference/docs/get.asciidoc | 48 +++++++++++------ 2 files changed, 115 insertions(+), 19 deletions(-) diff --git a/docs/reference/docs/bulk.asciidoc b/docs/reference/docs/bulk.asciidoc index 104653b2481..407272a79ed 100644 --- a/docs/reference/docs/bulk.asciidoc +++ b/docs/reference/docs/bulk.asciidoc @@ -66,17 +66,92 @@ example of a correct sequence of bulk commands: [source,js] -------------------------------------------------- +POST _bulk { "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } } { "field1" : "value1" } { "delete" : { "_index" : "test", "_type" : "type1", "_id" : "2" } } { "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } } { "field1" : "value3" } -{ "update" : {"_id" : "1", "_type" : "type1", "_index" : "index1"} } +{ "update" : {"_id" : "1", "_type" : "type1", "_index" : "test"} } { "doc" : {"field2" : "value2"} } -------------------------------------------------- +// CONSOLE -In the above example `doc` for the `update` action is a partial -document, that will be merged with the already stored document. +The result of this bulk operation is: + +[source,js] +-------------------------------------------------- +{ + "took": 30, + "errors": false, + "items": [ + { + "index": { + "_index": "test", + "_type": "type1", + "_id": "1", + "_version": 1, + "result": "created", + "_shards": { + "total": 2, + "successful": 1, + "failed": 0 + }, + "created": true, + "status": 201 + } + }, + { + "delete": { + "found": false, + "_index": "test", + "_type": "type1", + "_id": "2", + "_version": 1, + "result": "not_found", + "_shards": { + "total": 2, + "successful": 1, + "failed": 0 + }, + "status": 404 + } + }, + { + "create": { + "_index": "test", + "_type": "type1", + "_id": "3", + "_version": 1, + "result": "created", + "_shards": { + "total": 2, + "successful": 1, + "failed": 0 + }, + "created": true, + "status": 201 + } + }, + { + "update": { + "_index": "test", + "_type": "type1", + "_id": "1", + "_version": 2, + "result": "updated", + "_shards": { + "total": 2, + "successful": 1, + "failed": 0 + }, + "status": 200 + } + } + ] +} +-------------------------------------------------- +// TESTRESPONSE[s/"took": 30/"took": $body.took/ s/"index_uuid": .../"index_uuid": $body.items.3.update.error.index_uuid/] The endpoints are `/_bulk`, `/{index}/_bulk`, and `{index}/{type}/_bulk`. When the index or the index/type are provided, they will be used by @@ -155,10 +230,11 @@ times an update should be retried in the case of a version conflict. The `update` action payload, supports the following options: `doc` (partial document), `upsert`, `doc_as_upsert`, `script`, `params` (for script), `lang` (for script) and `_source`. See update documentation for details on -the options. Curl example with update actions: +the options. Example with update actions: [source,js] -------------------------------------------------- +POST _bulk { "update" : {"_id" : "1", "_type" : "type1", "_index" : "index1", "_retry_on_conflict" : 3} } { "doc" : {"field" : "value"} } { "update" : { "_id" : "0", "_type" : "type1", "_index" : "index1", "_retry_on_conflict" : 3} } @@ -170,6 +246,8 @@ the options. Curl example with update actions: { "update" : {"_id" : "4", "_type" : "type1", "_index" : "index1"} } { "doc" : {"field" : "value"}, "_source": true} -------------------------------------------------- +// CONSOLE +// TEST[continued] [float] [[bulk-security]] diff --git a/docs/reference/docs/get.asciidoc b/docs/reference/docs/get.asciidoc index ea398b46a53..bc6ff9f1a22 100644 --- a/docs/reference/docs/get.asciidoc +++ b/docs/reference/docs/get.asciidoc @@ -3,12 +3,14 @@ The get API allows to get a typed JSON document from the index based on its id. The following example gets a JSON document from an index called -twitter, under a type called tweet, with id valued 1: +twitter, under a type called tweet, with id valued 0: [source,js] -------------------------------------------------- -curl -XGET 'http://localhost:9200/twitter/tweet/1' +GET twitter/tweet/0 -------------------------------------------------- +// CONSOLE +// TEST[setup:twitter] The result of the above get operation is: @@ -17,16 +19,18 @@ The result of the above get operation is: { "_index" : "twitter", "_type" : "tweet", - "_id" : "1", + "_id" : "0", "_version" : 1, "found": true, "_source" : { "user" : "kimchy", - "postDate" : "2009-11-15T14:12:12", + "date" : "2009-11-15T14:12:12", + "likes": 0, "message" : "trying out Elasticsearch" } } -------------------------------------------------- +// TESTRESPONSE The above result includes the `_index`, `_type`, `_id` and `_version` of the document we wish to retrieve, including the actual `_source` @@ -38,8 +42,10 @@ The API also allows to check for the existence of a document using [source,js] -------------------------------------------------- -curl -XHEAD -i 'http://localhost:9200/twitter/tweet/1' +HEAD twitter/tweet/0 -------------------------------------------------- +// CONSOLE +// TEST[setup:twitter] [float] [[realtime]] @@ -70,8 +76,10 @@ You can turn off `_source` retrieval by using the `_source` parameter: [source,js] -------------------------------------------------- -curl -XGET 'http://localhost:9200/twitter/tweet/1?_source=false' +GET twitter/tweet/0?_source=false -------------------------------------------------- +// CONSOLE +// TEST[setup:twitter] If you only need one or two fields from the complete `_source`, you can use the `_source_include` & `_source_exclude` parameters to include or filter out that parts you need. This can be especially helpful @@ -80,16 +88,19 @@ of fields or wildcard expressions. Example: [source,js] -------------------------------------------------- -curl -XGET 'http://localhost:9200/twitter/tweet/1?_source_include=*.id&_source_exclude=entities' +GET twitter/tweet/0?_source_include=*.id&_source_exclude=entities -------------------------------------------------- +// CONSOLE +// TEST[setup:twitter] If you only want to specify includes, you can use a shorter notation: [source,js] -------------------------------------------------- -curl -XGET 'http://localhost:9200/twitter/tweet/1?_source=*.id,retweeted' +GET twitter/tweet/0?_source=*.id,retweeted -------------------------------------------------- - +// CONSOLE +// TEST[setup:twitter] [float] [[get-stored-fields]] @@ -227,24 +238,29 @@ without any additional content around it. For example: [source,js] -------------------------------------------------- -curl -XGET 'http://localhost:9200/twitter/tweet/1/_source' +GET twitter/tweet/1/_source -------------------------------------------------- +// CONSOLE +// TEST[continued] You can also use the same source filtering parameters to control which parts of the `_source` will be returned: [source,js] -------------------------------------------------- -curl -XGET 'http://localhost:9200/twitter/tweet/1/_source?_source_include=*.id&_source_exclude=entities' +GET twitter/tweet/1/_source?_source_include=*.id&_source_exclude=entities' -------------------------------------------------- +// CONSOLE +// TEST[continued] Note, there is also a HEAD variant for the _source endpoint to efficiently test for document _source existence. An existing document will not have a _source if it is disabled in the <>. -Curl example: [source,js] -------------------------------------------------- -curl -XHEAD -i 'http://localhost:9200/twitter/tweet/1/_source' +HEAD twitter/tweet/1/_source -------------------------------------------------- +// CONSOLE +// TEST[continued] [float] [[get-routing]] @@ -255,10 +271,12 @@ a document, the routing value should also be provided. For example: [source,js] -------------------------------------------------- -curl -XGET 'http://localhost:9200/twitter/tweet/1?routing=kimchy' +GET twitter/tweet/2?routing=user1 -------------------------------------------------- +// CONSOLE +// TEST[continued] -The above will get a tweet with id 1, but will be routed based on the +The above will get a tweet with id 2, but will be routed based on the user. Note, issuing a get without the correct routing, will cause the document not to be fetched.