Browse Source

[DOCS] Add multi-level nested query example to nested query docs (#46986)

James Rodewig 6 years ago
parent
commit
07761530c1
1 changed files with 162 additions and 4 deletions
  1. 162 4
      docs/reference/query-dsl/nested-query.asciidoc

+ 162 - 4
docs/reference/query-dsl/nested-query.asciidoc

@@ -23,7 +23,7 @@ mapping. For example:
 ----
 PUT /my_index
 {
-    "mappings": {
+    "mappings" : {
         "properties" : {
             "obj1" : {
                 "type" : "nested"
@@ -33,7 +33,6 @@ PUT /my_index
 }
 
 ----
-// TESTSETUP
 
 [[nested-query-ex-query]]
 ===== Example query
@@ -42,7 +41,7 @@ PUT /my_index
 ----
 GET /my_index/_search
 {
-    "query": {
+    "query":  {
         "nested" : {
             "path" : "obj1",
             "query" : {
@@ -58,6 +57,7 @@ GET /my_index/_search
     }
 }
 ----
+// TEST[continued]
 
 [[nested-top-level-params]]
 ==== Top-level parameters for `nested`
@@ -78,6 +78,8 @@ such as `obj1.name`.
 Multi-level nesting is automatically supported, and detected, resulting in an
 inner nested query to automatically match the relevant nesting level, rather
 than root, if it exists within another nested query.
+
+See <<multi-level-nested-query-ex>> for an example.
 --
 
 `score_mode`::
@@ -114,4 +116,160 @@ If `false`, {es} returns an error if the `path` is an unmapped field.
 
 You can use this parameter to query multiple indices that may not contain the
 field `path`.
---
+--
+
+[[nested-query-notes]]
+==== Notes
+
+[[multi-level-nested-query-ex]]
+===== Multi-level nested queries
+
+To see how multi-level nested queries work,
+first you need an index that has nested fields.
+The following request defines mappings for the `drivers` index
+with nested `make` and `model` fields.
+
+[source,console]
+----
+PUT /drivers
+{
+    "mappings" : {
+        "properties" : {
+            "driver" : {
+                "type" : "nested",
+                "properties" : {
+                    "last_name" : {
+                        "type" : "text"
+                    },
+                    "vehicle" : {
+                        "type" : "nested",
+                        "properties" : {
+                            "make" : {
+                                "type" : "text"
+                            },
+                            "model" : {
+                                "type" : "text"
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+----
+
+Next, index some documents to the `drivers` index.
+
+[source,console]
+----
+PUT /drivers/_doc/1
+{
+  "driver" : {
+        "last_name" : "McQueen",
+        "vehicle" : [
+            {
+                "make" : "Powell Motors",
+                "model" : "Canyonero"
+            },
+            {
+                "make" : "Miller-Meteor",
+                "model" : "Ecto-1"
+            }
+        ]
+    }
+}
+
+PUT /drivers/_doc/2?refresh
+{
+  "driver" : {
+        "last_name" : "Hudson",
+        "vehicle" : [
+            {
+                "make" : "Mifune",
+                "model" : "Mach Five"
+            },
+            {
+                "make" : "Miller-Meteor",
+                "model" : "Ecto-1"
+            }
+        ]
+    }
+}
+----
+// TEST[continued]
+
+You can now use a multi-level nested query
+to match documents based on the `make` and `model` fields.
+
+[source,console]
+----
+GET /drivers/_search
+{
+    "query" : {
+        "nested" : {
+            "path" : "driver",
+            "query" : {
+                "nested" : {
+                    "path" :  "driver.vehicle",
+                    "query" :  {
+                        "bool" : {
+                            "must" : [
+                                { "match" : { "driver.vehicle.make" : "Powell Motors" } },
+                                { "match" : { "driver.vehicle.model" : "Canyonero" } }
+                            ]
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+----
+// TEST[continued]
+
+The search request returns the following response:
+
+[source,console-result]
+----
+{
+  "took" : 5,
+  "timed_out" : false,
+  "_shards" : {
+    "total" : 1,
+    "successful" : 1,
+    "skipped" : 0,
+    "failed" : 0
+  },
+  "hits" : {
+    "total" : {
+      "value" : 1,
+      "relation" : "eq"
+    },
+    "max_score" : 3.7349272,
+    "hits" : [
+      {
+        "_index" : "drivers",
+        "_id" : "1",
+        "_score" : 3.7349272,
+        "_source" : {
+          "driver" : {
+            "last_name" : "McQueen",
+            "vehicle" : [
+              {
+                "make" : "Powell Motors",
+                "model" : "Canyonero"
+              },
+              {
+                "make" : "Miller-Meteor",
+                "model" : "Ecto-1"
+              }
+            ]
+          }
+        }
+      }
+    ]
+  }
+}
+----
+// TESTRESPONSE[s/"took" : 5/"took": $body.took/]