Browse Source

[DOCS] Moved the template query documentation into search section

Alexander Reelsen 11 years ago
parent
commit
4fc461a97c

+ 1 - 197
docs/reference/query-dsl/queries/template-query.asciidoc

@@ -96,201 +96,5 @@ which is then turned into:
 ------------------------------------------
 
 There is also a dedicated `template` endpoint, which allows you to specify the template query directly.
-You can use the `/_search/template` endpoint for that.
-
-[source,js]
-------------------------------------------
-GET /_search/template
-{
-    "template" : {
-      "query": { "match" : { "{{my_field}}" : "{{my_value}}" } },
-      "size" : {{my_size}}
-    },
-    "params" : {
-        "my_field" : "foo",
-        "my_value" : "bar",
-        "my_size" : 5
-    }
-}
-------------------------------------------
-
-
-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
-documentation of the mustache project].
-
-[float]
-==== More template examples
-
-[float]
-===== Filling in a query string with a single value
-
-[source,js]
-------------------------------------------
-GET /_search/template
-{
-    "template": {
-        "query": {
-            "match": {
-                "title": "{{query_string}}"
-            }
-        }
-    },
-    "params": {
-        "query_string": "search for these words"
-    }
-}
-------------------------------------------
-
-[float]
-===== Passing an array of strings
-
-[source,js]
-------------------------------------------
-GET /_search/template
-{
-  "template": {
-    "query": {
-      "terms": {
-        "status": [
-          "{{#status}}",
-          "{{.}}",
-          "{{/status}}"
-        ]
-      }
-    }
-  },
-  "params": {
-    "status": [ "pending", "published" ]
-  }
-}
-------------------------------------------
-
-which is rendered as:
-
-[source,js]
-------------------------------------------
-{
-"query": {
-  "terms": {
-    "status": [ "pending", "published" ]
-  }
-}
-------------------------------------------
-
-[float]
-===== Default values
-
-A default value is written as `{{var}}{{^var}}default{{/var}}` for instance:
-
-[source,js]
-------------------------------------------
-{
-  "template": {
-    "query": {
-      "range": {
-        "line_no": {
-          "gte": "{{start}}",
-          "lte": "{{end}}{{^end}}20{{/end}}"
-        }
-      }
-    }
-  },
-  "params": { ... }
-}
-------------------------------------------
-
-When `params` is `{ "start": 10, "end": 15 }` this query would be rendered as:
-
-[source,js]
-------------------------------------------
-{
-    "range": {
-        "line_no": {
-            "gte": "10",
-            "lte": "15"
-        }
-  }
-}
-------------------------------------------
-
-But when `params` is `{ "start": 10 }` this query would use the default value
-for `end`:
-
-[source,js]
-------------------------------------------
-{
-    "range": {
-        "line_no": {
-            "gte": "10",
-            "lte": "20"
-        }
-    }
-}
-------------------------------------------
-
-[float]
-===== Conditional clauses
-
-Conditional clauses cannot be expressed using the JSON form of the template.
-Instead, the template *must* be passed as a string.  For instance, let's say
-we wanted to run a `match` query on the `line` field, and optionally wanted
-to filter by line numbers, where `start` and `end` are optional.
-
-The `params` would look like:
-[source,js]
-------------------------------------------
-{
-    "params": {
-        "text":      "words to search for",
-        "line_no": { <1>
-            "start": 10, <1>
-            "end":   20  <1>
-        }
-    }
-}
-------------------------------------------
-<1> All three of these elements are optional.
-
-We could write the query as:
-
-[source,js]
-------------------------------------------
-{
-    "filtered": {
-      "query": {
-        "match": {
-          "line": "{{text}}" <1>
-        }
-      },
-      "filter": {
-        {{#line_no}} <2>
-          "range": {
-            "line_no": {
-              {{#start}} <3>
-                "gte": "{{start}}" <4>
-                {{#end}},{{/end}} <5>
-              {{/start}} <3>
-              {{#end}} <6>
-                "lte": "{{end}}" <7>
-              {{/end}} </6>
-            }
-          }
-        {{/line_no}} <2>
-      }
-    }
-}
-------------------------------------------
-<1> Fill in the value of param `text`
-<2> Include the `range` filter only if `line_no` is specified
-<3> Include the `gte` clause only if `line_no.start` is specified
-<4> Fill in the value of param `line_no.start`
-<5> Add a comma after the `gte` clause only if `line_no.start`
-    AND `line_no.end` are specified
-<6> Include the `lte` clause only if `line_no.end` is specified
-<7> Fill in the value of param `line_no.end`
-
-As written above, this template is not valid JSON because it includes the
-_section_ markers like `{{#line_no}}`.  For this reason, the template
-can only be written as a string.
+You can use the `/_search/template` endpoint for that. Please see <<search-template>> for more details.
 

+ 2 - 0
docs/reference/search.asciidoc

@@ -81,6 +81,8 @@ include::search/uri-request.asciidoc[]
 
 include::search/request-body.asciidoc[]
 
+include::search/search-template.asciidoc[]
+
 include::search/facets.asciidoc[]
 
 include::search/aggregations.asciidoc[]

+ 206 - 0
docs/reference/search/search-template.asciidoc

@@ -0,0 +1,206 @@
+[[search-template]]
+== Search Template
+
+coming[1.1.0]
+
+Using a query template allows to use the mustache language to pre render search requests,
+before they are executed and fill existing templates with template parameters.
+
+You can use the `/_search/template` endpoint for that.
+
+[source,js]
+------------------------------------------
+GET /_search/template
+{
+    "template" : {
+      "query": { "match" : { "{{my_field}}" : "{{my_value}}" } },
+      "size" : {{my_size}}
+    },
+    "params" : {
+        "my_field" : "foo",
+        "my_value" : "bar",
+        "my_size" : 5
+    }
+}
+------------------------------------------
+
+
+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
+documentation of the mustache project].
+
+[float]
+==== More template examples
+
+[float]
+===== Filling in a query string with a single value
+
+[source,js]
+------------------------------------------
+GET /_search/template
+{
+    "template": {
+        "query": {
+            "match": {
+                "title": "{{query_string}}"
+            }
+        }
+    },
+    "params": {
+        "query_string": "search for these words"
+    }
+}
+------------------------------------------
+
+[float]
+===== Passing an array of strings
+
+[source,js]
+------------------------------------------
+GET /_search/template
+{
+  "template": {
+    "query": {
+      "terms": {
+        "status": [
+          "{{#status}}",
+          "{{.}}",
+          "{{/status}}"
+        ]
+      }
+    }
+  },
+  "params": {
+    "status": [ "pending", "published" ]
+  }
+}
+------------------------------------------
+
+which is rendered as:
+
+[source,js]
+------------------------------------------
+{
+"query": {
+  "terms": {
+    "status": [ "pending", "published" ]
+  }
+}
+------------------------------------------
+
+[float]
+===== Default values
+
+A default value is written as `{{var}}{{^var}}default{{/var}}` for instance:
+
+[source,js]
+------------------------------------------
+{
+  "template": {
+    "query": {
+      "range": {
+        "line_no": {
+          "gte": "{{start}}",
+          "lte": "{{end}}{{^end}}20{{/end}}"
+        }
+      }
+    }
+  },
+  "params": { ... }
+}
+------------------------------------------
+
+When `params` is `{ "start": 10, "end": 15 }` this query would be rendered as:
+
+[source,js]
+------------------------------------------
+{
+    "range": {
+        "line_no": {
+            "gte": "10",
+            "lte": "15"
+        }
+  }
+}
+------------------------------------------
+
+But when `params` is `{ "start": 10 }` this query would use the default value
+for `end`:
+
+[source,js]
+------------------------------------------
+{
+    "range": {
+        "line_no": {
+            "gte": "10",
+            "lte": "20"
+        }
+    }
+}
+------------------------------------------
+
+[float]
+===== Conditional clauses
+
+Conditional clauses cannot be expressed using the JSON form of the template.
+Instead, the template *must* be passed as a string.  For instance, let's say
+we wanted to run a `match` query on the `line` field, and optionally wanted
+to filter by line numbers, where `start` and `end` are optional.
+
+The `params` would look like:
+[source,js]
+------------------------------------------
+{
+    "params": {
+        "text":      "words to search for",
+        "line_no": { <1>
+            "start": 10, <1>
+            "end":   20  <1>
+        }
+    }
+}
+------------------------------------------
+<1> All three of these elements are optional.
+
+We could write the query as:
+
+[source,js]
+------------------------------------------
+{
+    "filtered": {
+      "query": {
+        "match": {
+          "line": "{{text}}" <1>
+        }
+      },
+      "filter": {
+        {{#line_no}} <2>
+          "range": {
+            "line_no": {
+              {{#start}} <3>
+                "gte": "{{start}}" <4>
+                {{#end}},{{/end}} <5>
+              {{/start}} <3>
+              {{#end}} <6>
+                "lte": "{{end}}" <7>
+              {{/end}} </6>
+            }
+          }
+        {{/line_no}} <2>
+      }
+    }
+}
+------------------------------------------
+<1> Fill in the value of param `text`
+<2> Include the `range` filter only if `line_no` is specified
+<3> Include the `gte` clause only if `line_no.start` is specified
+<4> Fill in the value of param `line_no.start`
+<5> Add a comma after the `gte` clause only if `line_no.start`
+    AND `line_no.end` are specified
+<6> Include the `lte` clause only if `line_no.end` is specified
+<7> Fill in the value of param `line_no.end`
+
+As written above, this template is not valid JSON because it includes the
+_section_ markers like `{{#line_no}}`.  For this reason, the template
+can only be written as a string.
+