Bläddra i källkod

[Docs] Consoleify multi-search and search-template docs (#23047)

Relates #23001
Tanguy Leroux 8 år sedan
förälder
incheckning
477d1aa8bf

+ 0 - 2
docs/build.gradle

@@ -131,11 +131,9 @@ buildRestTests.expectedUnconvertedCandidates = [
   'reference/query-dsl/function-score-query.asciidoc',
   'reference/query-dsl/function-score-query.asciidoc',
   'reference/query-dsl/geo-shape-query.asciidoc',
   'reference/query-dsl/geo-shape-query.asciidoc',
   'reference/search/field-stats.asciidoc',
   'reference/search/field-stats.asciidoc',
-  'reference/search/multi-search.asciidoc',
   'reference/search/profile.asciidoc',
   'reference/search/profile.asciidoc',
   'reference/search/request/highlighting.asciidoc',
   'reference/search/request/highlighting.asciidoc',
   'reference/search/request/inner-hits.asciidoc',
   'reference/search/request/inner-hits.asciidoc',
-  'reference/search/search-template.asciidoc',
 ]
 ]
 
 
 integTest {
 integTest {

+ 61 - 21
docs/reference/search/multi-search.asciidoc

@@ -15,6 +15,7 @@ body\n
 header\n
 header\n
 body\n
 body\n
 --------------------------------------------------
 --------------------------------------------------
+// NOTCONSOLE
 
 
 The header part includes which index / indices to search on, optional
 The header part includes which index / indices to search on, optional
 (mapping) types to search on, the `search_type`, `preference`, and
 (mapping) types to search on, the `search_type`, `preference`, and
@@ -34,9 +35,14 @@ $ cat requests
 {"query" : {"match_all" : {}}}
 {"query" : {"match_all" : {}}}
 {"search_type" : "dfs_query_then_fetch"}
 {"search_type" : "dfs_query_then_fetch"}
 {"query" : {"match_all" : {}}}
 {"query" : {"match_all" : {}}}
+--------------------------------------------------
+// NOTCONSOLE
 
 
-$ curl -XGET localhost:9200/_msearch --data-binary "@requests"; echo
+[source,js]
+--------------------------------------------------
+$ curl -H "Content-Type: application/x-ndjson" -XGET localhost:9200/_msearch --data-binary "@requests"; echo
 --------------------------------------------------
 --------------------------------------------------
+// NOTCONSOLE
 
 
 Note, the above includes an example of an empty header (can also be just
 Note, the above includes an example of an empty header (can also be just
 without any content) which is supported as well.
 without any content) which is supported as well.
@@ -53,20 +59,20 @@ default unless explicitly defined otherwise in the header. For example:
 
 
 [source,js]
 [source,js]
 --------------------------------------------------
 --------------------------------------------------
-$ cat requests
+GET twitter/_msearch
 {}
 {}
 {"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
 {"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
 {}
 {}
 {"query" : {"match_all" : {}}}
 {"query" : {"match_all" : {}}}
-{"index" : "test2"}
+{"index" : "twitter2"}
 {"query" : {"match_all" : {}}}
 {"query" : {"match_all" : {}}}
-
-$ curl -XGET localhost:9200/test/_msearch --data-binary @requests; echo
 --------------------------------------------------
 --------------------------------------------------
+// CONSOLE
+// TEST[setup:twitter]
 
 
-The above will execute the search against the `test` index for all the
+The above will execute the search against the `twitter` index for all the
 requests that don't define an index, and the last one will be executed
 requests that don't define an index, and the last one will be executed
-against the `test2` index.
+against the `twitter2` index.
 
 
 The `search_type` can be set in a similar manner to globally apply to
 The `search_type` can be set in a similar manner to globally apply to
 all search requests.
 all search requests.
@@ -90,26 +96,60 @@ also provides support for templates. Submit them like follows:
 
 
 [source,js]
 [source,js]
 -----------------------------------------------
 -----------------------------------------------
-$ cat requests
-{"index" : "main"}
+GET _msearch/template
+{"index" : "twitter"}
+{ "inline" : "{ \"query\": { \"match\": { \"message\" : \"{{keywords}}\" } } } }", "params": { "query_type": "match", "keywords": "some message" } }
+{"index" : "twitter"}
 { "inline" : "{ \"query\": { \"match_{{template}}\": {} } }", "params": { "template": "all" } }
 { "inline" : "{ \"query\": { \"match_{{template}}\": {} } }", "params": { "template": "all" } }
-{"index" : "main"}
-{ "inline" : "{ \"query\": { \"match_{{template}}\": {} } }", "params": { "template": "all" } }
-
-$ curl -XGET localhost:9200/_msearch/template --data-binary @requests; echo
 -----------------------------------------------
 -----------------------------------------------
+// CONSOLE
+// TEST[setup:twitter]
 
 
-for inline templates. Alternatively for stored templates:
+for inline templates.
+
+You can also create search templates:
+
+[source,js]
+------------------------------------------
+POST /_search/template/my_template_1
+{
+    "template": {
+        "query": {
+            "match": {
+                "message": "{{query_string}}"
+            }
+        }
+    }
+}
+------------------------------------------
+// CONSOLE
+// TEST[setup:twitter]
+
+[source,js]
+------------------------------------------
+POST /_search/template/my_template_2
+{
+    "template": {
+        "query": {
+            "term": {
+                "{{field}}": "{{value}}"
+            }
+        }
+    }
+}
+------------------------------------------
+// CONSOLE
+// TEST[continued]
+
+and later use them in a _msearch:
 
 
 [source,js]
 [source,js]
 -----------------------------------------------
 -----------------------------------------------
-$ cat requests
+GET _msearch/template
 {"index" : "main"}
 {"index" : "main"}
-{ "template": { "id": "template1" },"params": { "q": "foo" } }
+{ "id": "my_template_1", "params": { "query_string": "some message" } }
 {"index" : "main"}
 {"index" : "main"}
-{ "template": { "id": "template2" },"params": { "q": "bar" } }
-
-$ curl -XGET localhost:9200/_msearch/template --data-binary @requests; echo
+{ "id": "my_template_2", "params": { "field": "user", "value": "test" } }
 ----------------------------------------------
 ----------------------------------------------
-
-
+// CONSOLE
+// TEST[continued]

+ 99 - 55
docs/reference/search/search-template.asciidoc

@@ -6,20 +6,21 @@ before they are executed and fill existing templates with template parameters.
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-GET /_search/template
+GET _search/template
 {
 {
     "inline" : {
     "inline" : {
       "query": { "match" : { "{{my_field}}" : "{{my_value}}" } },
       "query": { "match" : { "{{my_field}}" : "{{my_value}}" } },
       "size" : "{{my_size}}"
       "size" : "{{my_size}}"
     },
     },
     "params" : {
     "params" : {
-        "my_field" : "foo",
-        "my_value" : "bar",
+        "my_field" : "message",
+        "my_value" : "some message",
         "my_size" : 5
         "my_size" : 5
     }
     }
 }
 }
 ------------------------------------------
 ------------------------------------------
-
+// CONSOLE
+// TEST[setup:twitter]
 
 
 For more information on how Mustache templating and what kind of templating you
 For more information on how Mustache templating and what kind of templating you
 can do with it check out the http://mustache.github.io/mustache.5.html[online
 can do with it check out the http://mustache.github.io/mustache.5.html[online
@@ -38,12 +39,12 @@ disable scripts per language, source and operation as described in
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-GET /_search/template
+GET _search/template
 {
 {
     "inline": {
     "inline": {
         "query": {
         "query": {
-            "match": {
-                "title": "{{query_string}}"
+            "term": {
+                "message": "{{query_string}}"
             }
             }
         }
         }
     },
     },
@@ -52,6 +53,8 @@ GET /_search/template
     }
     }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// CONSOLE
+// TEST[setup:twitter]
 
 
 [float]
 [float]
 ===== Converting parameters to JSON
 ===== Converting parameters to JSON
@@ -61,14 +64,17 @@ like maps and array to their JSON representation:
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-GET /_search/template
+GET _search/template
 {
 {
-  "inline": "{ \"query\": { \"terms\": { \"status\": {{#toJson}}status{{/toJson}} }}}",
+  "inline": "{ \"query\": { \"terms\": {{#toJson}}statuses{{/toJson}} }}",
   "params": {
   "params": {
-    "status": [ "pending", "published" ]
+    "statuses" : {
+        "status": [ "pending", "published" ]
+    }
   }
   }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// CONSOLE
 
 
 which is rendered as:
 which is rendered as:
 
 
@@ -85,21 +91,24 @@ which is rendered as:
   }
   }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// NOTCONSOLE
 
 
 A more complex example substitutes an array of JSON objects:
 A more complex example substitutes an array of JSON objects:
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
+GET _search/template
 {
 {
     "inline": "{\"query\":{\"bool\":{\"must\": {{#toJson}}clauses{{/toJson}} }}}",
     "inline": "{\"query\":{\"bool\":{\"must\": {{#toJson}}clauses{{/toJson}} }}}",
     "params": {
     "params": {
         "clauses": [
         "clauses": [
-            { "term": "foo" },
-            { "term": "bar" }
+            { "term": { "user" : "foo" } },
+            { "term": { "user" : "bar" } }
         ]
         ]
    }
    }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// CONSOLE
 
 
 which is rendered as:
 which is rendered as:
 
 
@@ -110,17 +119,21 @@ which is rendered as:
       "bool" : {
       "bool" : {
         "must" : [
         "must" : [
           {
           {
-            "term" : "foo"
+            "term" : {
+                "user" : "foo"
+            }
           },
           },
           {
           {
-            "term" : "bar"
+            "term" : {
+                "user" : "bar"
+            }
           }
           }
         ]
         ]
       }
       }
     }
     }
 }
 }
 ------------------------------------------
 ------------------------------------------
-
+// NOTCONSOLE
 
 
 [float]
 [float]
 ===== Concatenating array of values
 ===== Concatenating array of values
@@ -130,7 +143,7 @@ values of an array as a comma delimited string:
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-GET /_search/template
+GET _search/template
 {
 {
   "inline": {
   "inline": {
     "query": {
     "query": {
@@ -144,6 +157,7 @@ GET /_search/template
   }
   }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// CONSOLE
 
 
 which is rendered as:
 which is rendered as:
 
 
@@ -157,12 +171,13 @@ which is rendered as:
     }
     }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// NOTCONSOLE
 
 
 The function also accepts a custom delimiter:
 The function also accepts a custom delimiter:
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-GET /_search/template
+GET _search/template
 {
 {
   "inline": {
   "inline": {
     "query": {
     "query": {
@@ -184,6 +199,7 @@ GET /_search/template
   }
   }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// CONSOLE
 
 
 which is rendered as:
 which is rendered as:
 
 
@@ -202,7 +218,7 @@ which is rendered as:
 }
 }
 
 
 ------------------------------------------
 ------------------------------------------
-
+// NOTCONSOLE
 
 
 [float]
 [float]
 ===== Default values
 ===== Default values
@@ -225,6 +241,7 @@ A default value is written as `{{var}}{{^var}}default{{/var}}` for instance:
   "params": { ... }
   "params": { ... }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// NOTCONSOLE
 
 
 When `params` is `{ "start": 10, "end": 15 }` this query would be rendered as:
 When `params` is `{ "start": 10, "end": 15 }` this query would be rendered as:
 
 
@@ -239,6 +256,7 @@ When `params` is `{ "start": 10, "end": 15 }` this query would be rendered as:
   }
   }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// NOTCONSOLE
 
 
 But when `params` is `{ "start": 10 }` this query would use the default value
 But when `params` is `{ "start": 10 }` this query would use the default value
 for `end`:
 for `end`:
@@ -254,7 +272,7 @@ for `end`:
     }
     }
 }
 }
 ------------------------------------------
 ------------------------------------------
-
+// NOTCONSOLE
 
 
 [float]
 [float]
 ===== Conditional clauses
 ===== Conditional clauses
@@ -277,6 +295,7 @@ The `params` would look like:
     }
     }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// NOTCONSOLE
 <1> All three of these elements are optional.
 <1> All three of these elements are optional.
 
 
 We could write the query as:
 We could write the query as:
@@ -310,6 +329,7 @@ We could write the query as:
   }
   }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// NOTCONSOLE
 <1> Fill in the value of param `text`
 <1> Fill in the value of param `text`
 <2> Include the `range` filter only if `line_no` is specified
 <2> Include the `range` filter only if `line_no` is specified
 <3> Include the `gte` clause only if `line_no.start` is specified
 <3> Include the `gte` clause only if `line_no.start` is specified
@@ -330,7 +350,7 @@ via the REST API, should be written as a string:
 --------------------
 --------------------
 "inline": "{\"query\":{\"bool\":{\"must\":{\"match\":{\"line\":\"{{text}}\"}},\"filter\":{{{#line_no}}\"range\":{\"line_no\":{{{#start}}\"gte\":\"{{start}}\"{{#end}},{{/end}}{{/start}}{{#end}}\"lte\":\"{{end}}\"{{/end}}}}{{/line_no}}}}}}"
 "inline": "{\"query\":{\"bool\":{\"must\":{\"match\":{\"line\":\"{{text}}\"}},\"filter\":{{{#line_no}}\"range\":{\"line_no\":{{{#start}}\"gte\":\"{{start}}\"{{#end}},{{/end}}{{/start}}{{#end}}\"lte\":\"{{end}}\"{{/end}}}}{{/line_no}}}}}}"
 --------------------
 --------------------
-
+// NOTCONSOLE
 ==================================
 ==================================
 
 
 
 
@@ -344,7 +364,7 @@ As an example, it is useful to encode a URL:
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-GET /_render/template
+GET _render/template
 {
 {
     "inline" : {
     "inline" : {
         "query" : {
         "query" : {
@@ -388,7 +408,7 @@ In order to execute the stored template, reference it by it's name under the `te
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-GET /_search/template
+GET _search/template
 {
 {
     "file": "storedTemplate", <1>
     "file": "storedTemplate", <1>
     "params": {
     "params": {
@@ -396,6 +416,8 @@ GET /_search/template
     }
     }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// CONSOLE
+// TEST[catch:request]
 
 
 <1> Name of the query template in `config/scripts/`, i.e., `storedTemplate.mustache`.
 <1> Name of the query template in `config/scripts/`, i.e., `storedTemplate.mustache`.
 
 
@@ -404,7 +426,7 @@ There are REST APIs to manage these indexed templates.
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-POST /_search/template/<templatename>
+POST _search/template/<templatename>
 {
 {
     "template": {
     "template": {
         "query": {
         "query": {
@@ -415,49 +437,69 @@ POST /_search/template/<templatename>
     }
     }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// CONSOLE
+// TEST[continued]
+
+//////////////////////////
+
+We want to be sure that the template has been created,
+because we'll use it later.
+
+[source,js]
+--------------------------------------------------
+{
+    "acknowledged" : true
+}
+--------------------------------------------------
+// TESTRESPONSE
+
+//////////////////////////
 
 
 This template can be retrieved by
 This template can be retrieved by
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-GET /_search/template/<templatename>
+GET _search/template/<templatename>
 ------------------------------------------
 ------------------------------------------
+// CONSOLE
+// TEST[continued]
 
 
 which is rendered as:
 which is rendered as:
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
 {
 {
-    "template": {
-        "query": {
-            "match": {
-                "title": "{{query_string}}"
-            }
-        }
-    }
+    "_id" : "<templatename>",
+    "lang" : "mustache",
+    "found" : true,
+    "template" : "{\"query\":{\"match\":{\"title\":\"{{query_string}}\"}}}"
 }
 }
 ------------------------------------------
 ------------------------------------------
+//TESTRESPONSE
 
 
 This template can be deleted by
 This template can be deleted by
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-DELETE /_search/template/<templatename>
+DELETE _search/template/<templatename>
 ------------------------------------------
 ------------------------------------------
+// CONSOLE
+// TEST[catch:missing]
 
 
 To use an indexed template at search time use:
 To use an indexed template at search time use:
 
 
-
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-GET /_search/template
+GET _search/template
 {
 {
-    "id": "templateName", <1>
+    "id": "<templateName>", <1>
     "params": {
     "params": {
         "query_string": "search for these words"
         "query_string": "search for these words"
     }
     }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// CONSOLE
+// TEST[catch:missing]
 <1> Name of the query template stored in the `.scripts` index.
 <1> Name of the query template stored in the `.scripts` index.
 
 
 [float]
 [float]
@@ -467,24 +509,17 @@ A template can be rendered in a response with given parameters using
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-GET /_render/template
+GET _render/template
 {
 {
-  "inline": {
-    "query": {
-      "terms": {
-        "status": [
-          "{{#status}}",
-          "{{.}}",
-          "{{/status}}"
-        ]
-      }
-    }
-  },
+  "inline": "{ \"query\": { \"terms\": {{#toJson}}statuses{{/toJson}} }}",
   "params": {
   "params": {
-    "status": [ "pending", "published" ]
+    "statuses" : {
+        "status": [ "pending", "published" ]
+    }
   }
   }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// CONSOLE
 
 
 This call will return the rendered template:
 This call will return the rendered template:
 
 
@@ -503,6 +538,7 @@ This call will return the rendered template:
   }
   }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// TESTRESPONSE
 <1> `status` array has been populated with values from the `params` object.
 <1> `status` array has been populated with values from the `params` object.
 
 
 File and indexed templates can also be rendered by replacing `inline` with
 File and indexed templates can also be rendered by replacing `inline` with
@@ -510,7 +546,7 @@ File and indexed templates can also be rendered by replacing `inline` with
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-GET /_render/template
+GET _render/template
 {
 {
   "file": "my_template",
   "file": "my_template",
   "params": {
   "params": {
@@ -518,18 +554,21 @@ GET /_render/template
   }
   }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// CONSOLE
+// TEST[catch:request]
 
 
 Pre-registered templates can also be rendered using
 Pre-registered templates can also be rendered using
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-GET /_render/template/<template_name>
+GET _render/template/<template_name>
 {
 {
   "params": {
   "params": {
     "..."
     "..."
   }
   }
 }
 }
 ------------------------------------------
 ------------------------------------------
+// NOTCONSOLE
 
 
 [float]
 [float]
 ===== Explain
 ===== Explain
@@ -538,7 +577,7 @@ You can use `explain` parameter when running a template:
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-GET /_search/template
+GET _search/template
 {
 {
   "file": "my_template",
   "file": "my_template",
   "params": {
   "params": {
@@ -547,7 +586,8 @@ GET /_search/template
   "explain": true
   "explain": true
 }
 }
 ------------------------------------------
 ------------------------------------------
-
+// CONSOLE
+// TEST[catch:request]
 
 
 [float]
 [float]
 ===== Profiling
 ===== Profiling
@@ -556,7 +596,7 @@ You can use `profile` parameter when running a template:
 
 
 [source,js]
 [source,js]
 ------------------------------------------
 ------------------------------------------
-GET /_search/template
+GET _search/template
 {
 {
   "file": "my_template",
   "file": "my_template",
   "params": {
   "params": {
@@ -565,7 +605,8 @@ GET /_search/template
   "profile": true
   "profile": true
 }
 }
 ------------------------------------------
 ------------------------------------------
-
+// CONSOLE
+// TEST[catch:request]
 
 
 [[multi-search-template]]
 [[multi-search-template]]
 == Multi Search Template
 == Multi Search Template
@@ -583,6 +624,7 @@ body\n
 header\n
 header\n
 body\n
 body\n
 --------------------------------------------------
 --------------------------------------------------
+// NOTCONSOLE
 
 
 The header part supports the same `index`, `types`, `search_type`,
 The header part supports the same `index`, `types`, `search_type`,
 `preference`, and `routing` options as the usual Multi Search API.
 `preference`, and `routing` options as the usual Multi Search API.
@@ -602,8 +644,10 @@ $ cat requests
 {"types": "users"}
 {"types": "users"}
 {"file": "template_2", "params": {"field_name": "fullname", "field_value": "john smith" }} <3>
 {"file": "template_2", "params": {"field_name": "fullname", "field_value": "john smith" }} <3>
 
 
-$ curl -XGET localhost:9200/_msearch/template --data-binary "@requests"; echo
+$ curl -H "Content-Type: application/x-ndjson" -XGET localhost:9200/_msearch/template --data-binary "@requests"; echo
 --------------------------------------------------
 --------------------------------------------------
+// NOTCONSOLE
+// Not converting to console because this shows how curl works
 <1> Inline search template request
 <1> Inline search template request
 
 
 <2> Search template request based on a stored template
 <2> Search template request based on a stored template