Skip to content

Instantly share code, notes, and snippets.

@nik9000
Created December 29, 2020 19:51
Show Gist options
  • Save nik9000/3cc956d1bc420f3b7c5734ef99aeded0 to your computer and use it in GitHub Desktop.
Save nik9000/3cc956d1bc420f3b7c5734ef99aeded0 to your computer and use it in GitHub Desktop.
diff --git a/modules/parent-join/src/yamlRestTest/resources/rest-api-spec/test/50_order_by.yml b/modules/parent-join/src/yamlRestTest/resources/rest-api-spec/test/50_order_by.yml
new file mode 100644
index 0000000000000..f730d3f9e1261
--- /dev/null
+++ b/modules/parent-join/src/yamlRestTest/resources/rest-api-spec/test/50_order_by.yml
@@ -0,0 +1,229 @@
+---
+"order by sub agg containing join":
+ - do:
+ indices.create:
+ index: test_1
+ body:
+ settings:
+ number_of_shards: 1
+ number_of_replicas: 0
+ mappings:
+ properties:
+ name:
+ type: keyword
+ join:
+ type: join
+ relations:
+ animal: feature
+
+ - do:
+ bulk:
+ index: test_1
+ refresh: true
+ body: |
+ { "index": {"_id": "sheep"} }
+ { "name": "sheep", "join": {"name": "animal"} }
+ { "index": {"_id": "cow"} }
+ { "name": "cow", "join": {"name": "animal"} }
+ { "index": {"_id": "pig"} }
+ { "name": "pig", "join": {"name": "animal"} }
+ { "index": {"routing": "sheep"} }
+ { "join": {"name": "feature", "parent": "sheep"}, "tag": "danger", "number": 1 }
+ { "index": {"routing": "sheep"} }
+ { "join": {"name": "feature", "parent": "sheep"}, "tag": "fluffiness", "number": 10 }
+ { "index": {"routing": "cow"} }
+ { "join": {"name": "feature", "parent": "cow"}, "tag": "danger", "number": 3 }
+ { "index": {"routing": "cow"} }
+ { "join": {"name": "feature", "parent": "cow"}, "tag": "fluffiness", "number": 1 }
+ { "index": {"routing": "pig"} }
+ { "join": {"name": "feature", "parent": "pig"}, "tag": "danger", "number": 100 }
+ { "index": {"routing": "pig"} }
+ { "join": {"name": "feature", "parent": "pig"}, "tag": "fluffiness", "number": 1 }
+
+ - do:
+ search:
+ index: test_1
+ body:
+ size: 0
+ aggs:
+ name:
+ terms:
+ size: 1
+ shard_size: 1
+ field: name
+ order:
+ - "children>max_number": desc
+ aggs:
+ children:
+ children:
+ type: feature
+ aggs:
+ max_number:
+ max:
+ field: number
+ - length: { aggregations.name.buckets: 1 }
+ - match: { aggregations.name.buckets.0.key: pig }
+ - match: { aggregations.name.buckets.0.doc_count: 1 }
+ - match: { aggregations.name.buckets.0.children.max_number.value: 100.0 }
+
+---
+"order by sub agg containing join and nested":
+ - do:
+ indices.create:
+ index: test_1
+ body:
+ settings:
+ number_of_shards: 1
+ number_of_replicas: 0
+ mappings:
+ properties:
+ name:
+ type: keyword
+ join:
+ type: join
+ relations:
+ animal: feature
+ nested:
+ type: nested
+ properties:
+ number:
+ type: long
+
+ - do:
+ bulk:
+ index: test_1
+ refresh: true
+ body: |
+ { "index": {"_id": "sheep"} }
+ { "name": "sheep", "join": {"name": "animal"} }
+ { "index": {"_id": "cow"} }
+ { "name": "cow", "join": {"name": "animal"} }
+ { "index": {"_id": "pig"} }
+ { "name": "pig", "join": {"name": "animal"} }
+ { "index": {"routing": "sheep"} }
+ { "join": {"name": "feature", "parent": "sheep"}, "tag": "danger", "nested": [{"number": 1}] }
+ { "index": {"routing": "sheep"} }
+ { "join": {"name": "feature", "parent": "sheep"}, "tag": "fluffiness", "nested": [{"number": 10}] }
+ { "index": {"routing": "cow"} }
+ { "join": {"name": "feature", "parent": "cow"}, "tag": "danger", "nested": [{"number": 3}] }
+ { "index": {"routing": "cow"} }
+ { "join": {"name": "feature", "parent": "cow"}, "tag": "fluffiness", "nested": [{"number": 1}] }
+ { "index": {"routing": "pig"} }
+ { "join": {"name": "feature", "parent": "pig"}, "tag": "danger", "nested": [{"number": 100}, {"number": 1}] }
+ { "index": {"routing": "pig"} }
+ { "join": {"name": "feature", "parent": "pig"}, "tag": "fluffiness", "nested": [{"number": 1}] }
+
+ - do:
+ search:
+ index: test_1
+ body:
+ size: 0
+ aggs:
+ name:
+ terms:
+ size: 1
+ shard_size: 1
+ field: name
+ order:
+ - "children>nested>max_number": desc
+ aggs:
+ children:
+ children:
+ type: feature
+ aggs:
+ nested:
+ nested:
+ path: nested
+ aggs:
+ max_number:
+ max:
+ field: nested.number
+ - length: { aggregations.name.buckets: 1 }
+ - match: { aggregations.name.buckets.0.key: pig }
+ - match: { aggregations.name.buckets.0.doc_count: 1 }
+ - match: { aggregations.name.buckets.0.children.nested.max_number.value: 100.0 }
+
+---
+"order by sub agg containing join and nested and filter":
+ - do:
+ indices.create:
+ index: test_1
+ body:
+ settings:
+ number_of_shards: 1
+ number_of_replicas: 0
+ mappings:
+ properties:
+ name:
+ type: keyword
+ join:
+ type: join
+ relations:
+ animal: feature
+ nested:
+ type: nested
+ properties:
+ code:
+ type:
+ keyword
+ number:
+ type: long
+
+ - do:
+ bulk:
+ index: test_1
+ refresh: true
+ body: |
+ { "index": {"_id": "sheep"} }
+ { "name": "sheep", "join": {"name": "animal"} }
+ { "index": {"_id": "cow"} }
+ { "name": "cow", "join": {"name": "animal"} }
+ { "index": {"_id": "pig"} }
+ { "name": "pig", "join": {"name": "animal"} }
+ { "index": {"routing": "sheep"} }
+ { "join": {"name": "feature", "parent": "sheep"}, "tag": "danger", "nested": [{"code": "mighty", "number": 1}, {"code": "meek", "number": 100}] }
+ { "index": {"routing": "sheep"} }
+ { "join": {"name": "feature", "parent": "sheep"}, "tag": "fluffiness", "nested": [{"code": "mighty", "number": 10}, {"code": "meek", "number": 10}] }
+ { "index": {"routing": "cow"} }
+ { "join": {"name": "feature", "parent": "cow"}, "tag": "danger", "nested": [{"code": "mighty", "number": 3}, {"code": "meek", "number": 3}] }
+ { "index": {"routing": "cow"} }
+ { "join": {"name": "feature", "parent": "cow"}, "tag": "fluffiness", "nested": [{"code": "mighty", "number": 1}, {"code": "meek", "number": 1}] }
+ { "index": {"routing": "pig"} }
+ { "join": {"name": "feature", "parent": "pig"}, "tag": "danger", "nested": [{"code": "mighty", "number": 100}, {"code": "meek", "number": 1}] }
+ { "index": {"routing": "pig"} }
+ { "join": {"name": "feature", "parent": "pig"}, "tag": "fluffiness", "nested": [{"code": "mighty", "number": 1}, {"code": "meek", "number": 1}] }
+
+ - do:
+ search:
+ index: test_1
+ body:
+ size: 0
+ aggs:
+ name:
+ terms:
+ size: 1
+ shard_size: 1
+ field: name
+ order:
+ - "children>nested>filter>max_number": desc
+ aggs:
+ children:
+ children:
+ type: feature
+ aggs:
+ nested:
+ nested:
+ path: nested
+ aggs:
+ filter:
+ filter:
+ match:
+ nested.code: mighty
+ aggs:
+ max_number:
+ max:
+ field: nested.number
+ - length: { aggregations.name.buckets: 1 }
+ - match: { aggregations.name.buckets.0.key: pig }
+ - match: { aggregations.name.buckets.0.doc_count: 1 }
+ - match: { aggregations.name.buckets.0.children.nested.filter.max_number.value: 100.0 }
diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/search.aggregation/20_terms.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/search.aggregation/20_terms.yml
index adf812537e43f..13c047a3b818e 100644
--- a/rest-api-spec/src/main/resources/rest-api-spec/test/search.aggregation/20_terms.yml
+++ b/rest-api-spec/src/main/resources/rest-api-spec/test/search.aggregation/20_terms.yml
@@ -1069,3 +1069,151 @@ setup:
- match: { aggregations.str_terms.buckets.2.key: pig }
- match: { aggregations.str_terms.buckets.2.doc_count: 0 }
- match: { aggregations.str_terms.buckets.2.max_number.value: null }
+
+---
+"order by sub agg":
+ - do:
+ bulk:
+ index: test_1
+ refresh: true
+ body: |
+ { "index": {} }
+ { "str": "sheep", "number": 1 }
+ { "index": {} }
+ { "str": "sheep", "number": 3 }
+ { "index": {} }
+ { "str": "cow", "number": 7 }
+ { "index": {} }
+ { "str": "pig", "number": 1 }
+
+ - do:
+ search:
+ index: test_1
+ body:
+ size: 0
+ aggs:
+ str_terms:
+ terms:
+ size: 1
+ shard_size: 1
+ field: str
+ order:
+ - max_number: desc
+ aggs:
+ max_number:
+ max:
+ field: number
+ - length: { aggregations.str_terms.buckets: 1 }
+ - match: { aggregations.str_terms.buckets.0.key: cow }
+ - match: { aggregations.str_terms.buckets.0.doc_count: 1 }
+ - match: { aggregations.str_terms.buckets.0.max_number.value: 7.0 }
+
+---
+"order by sub agg containing nested":
+ - do:
+ indices.put_mapping:
+ index: test_1
+ body:
+ properties:
+ nested:
+ type: nested
+ properties:
+ tag:
+ type: keyword
+ number:
+ type: long
+
+ - do:
+ bulk:
+ index: test_1
+ refresh: true
+ body: |
+ { "index": {} }
+ { "str": "sheep", "nested": [{"tag": "danger", "number": 1}, {"tag": "fluffiness", "number": 10}] }
+ { "index": {} }
+ { "str": "cow", "nested": [{"tag": "danger", "number": 3}, {"tag": "fluffiness", "number": 1}] }
+ { "index": {} }
+ { "str": "pig", "nested": [{"tag": "danger", "number": 100}, {"tag": "fluffiness", "number": 1}] }
+
+ - do:
+ search:
+ index: test_1
+ body:
+ size: 0
+ aggs:
+ str_terms:
+ terms:
+ size: 1
+ shard_size: 1
+ field: str
+ order:
+ - "nested>max_number": desc
+ aggs:
+ nested:
+ nested:
+ path: nested
+ aggs:
+ max_number:
+ max:
+ field: nested.number
+ - length: { aggregations.str_terms.buckets: 1 }
+ - match: { aggregations.str_terms.buckets.0.key: pig }
+ - match: { aggregations.str_terms.buckets.0.doc_count: 1 }
+ - match: { aggregations.str_terms.buckets.0.nested.max_number.value: 100.0 }
+
+---
+"order by sub agg containing filter":
+ - do:
+ indices.put_mapping:
+ index: test_1
+ body:
+ properties:
+ nested:
+ type: nested
+ properties:
+ tag:
+ type: keyword
+ number:
+ type: long
+
+ - do:
+ bulk:
+ index: test_1
+ refresh: true
+ body: |
+ { "index": {} }
+ { "str": "sheep", "number": 1 }
+ { "index": {} }
+ { "str": "sheep", "number": 3 }
+ { "index": {} }
+ { "str": "cow", "number": 7 }
+ { "index": {} }
+ { "str": "pig", "number": 100 }
+
+ - do:
+ search:
+ index: test_1
+ body:
+ size: 0
+ aggs:
+ str_terms:
+ terms:
+ size: 1
+ shard_size: 1
+ field: str
+ order:
+ - "filter>max_number": desc
+ aggs:
+ filter:
+ filter:
+ range:
+ number:
+ lt: 10
+ aggs:
+ max_number:
+ max:
+ field: number
+ - length: { aggregations.str_terms.buckets: 1 }
+ - match: { aggregations.str_terms.buckets.0.key: cow }
+ - match: { aggregations.str_terms.buckets.0.doc_count: 1 }
+ - match: { aggregations.str_terms.buckets.0.filter.max_number.value: 7.0 }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment