From 147e77e366bb4bdc090d89e086182b4e7a24fe08 Mon Sep 17 00:00:00 2001 From: Prudhvi Godithi Date: Tue, 3 Sep 2024 11:00:09 -0700 Subject: [PATCH] Update termsQuery (#546) Signed-off-by: Prudhvi Godithi --- CHANGELOG.md | 1 + spec/schemas/_common.query_dsl.yaml | 26 +++- tests/default/_core/search/query/terms.yaml | 146 ++++++++++++++++++ .../default/_core/search/query/terms_set.yaml | 66 ++++++++ 4 files changed, 233 insertions(+), 6 deletions(-) create mode 100644 tests/default/_core/search/query/terms.yaml create mode 100644 tests/default/_core/search/query/terms_set.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md index df5df8e9..92794d09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -84,6 +84,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Added `AwarenessAttributeStats` to `/_cluster/health` ([#534](https://github.com/opensearch-project/opensearch-api-specification/pull/534)) - Added `cache_reserved_in_bytes` to `ClusterFileSystem` ([#534](https://github.com/opensearch-project/opensearch-api-specification/pull/534)) - Added `cluster_manager` to `ClusterNodeCount` ([#534](https://github.com/opensearch-project/opensearch-api-specification/pull/534)) +- Added support for `query` with `terms` in `_search` ([#546](https://github.com/opensearch-project/opensearch-api-specification/pull/546)). ### Changed diff --git a/spec/schemas/_common.query_dsl.yaml b/spec/schemas/_common.query_dsl.yaml index 6633c043..bb2c44c7 100644 --- a/spec/schemas/_common.query_dsl.yaml +++ b/spec/schemas/_common.query_dsl.yaml @@ -280,6 +280,23 @@ components: type: number _name: type: string + Terms: + oneOf: + - type: array + items: + type: string + - type: object + properties: + index: + $ref: '_common.yaml#/components/schemas/IndexName' + id: + $ref: '_common.yaml#/components/schemas/Id' + path: + $ref: '_common.yaml#/components/schemas/Field' + routing: + $ref: '_common.yaml#/components/schemas/Routing' + additionalProperties: true + description: Object for fetching terms. BoostingQuery: allOf: - $ref: '#/components/schemas/QueryBase' @@ -1857,9 +1874,9 @@ components: required: - value TermsQuery: - allOf: + anyOf: - $ref: '#/components/schemas/QueryBase' - - type: object + - $ref: '#/components/schemas/Terms' TermsSetQuery: allOf: - $ref: '#/components/schemas/QueryBase' @@ -1870,10 +1887,7 @@ components: minimum_should_match_script: $ref: '_common.yaml#/components/schemas/Script' terms: - description: Array of terms you wish to find in the provided field. - type: array - items: - type: string + $ref: '#/components/schemas/Terms' required: - terms TextExpansionQuery: diff --git a/tests/default/_core/search/query/terms.yaml b/tests/default/_core/search/query/terms.yaml new file mode 100644 index 00000000..b4837590 --- /dev/null +++ b/tests/default/_core/search/query/terms.yaml @@ -0,0 +1,146 @@ +$schema: ../../../../../json_schemas/test_story.schema.yaml + +description: Comprehensive test suite for TermsQuery, including array of terms and term lookup. +version: '>= 1.2' + +prologues: + - path: /movies + method: PUT + request: + payload: + mappings: + properties: + title: + type: text + genre: + type: keyword + director_id: + type: keyword + status: [200] + + - path: /movies/_doc + method: POST + parameters: + refresh: true + request: + payload: + title: The Lion King + genre: animation + status: [201] + + - path: /movies/_doc + method: POST + parameters: + refresh: true + request: + payload: + title: Beauty and the Beast + genre: adventure + status: [201] + + - path: /games + method: PUT + request: + payload: + mappings: + properties: + title: + type: text + genre: + type: keyword + developer_id: + type: keyword + status: [200] + + - path: /games/_doc + method: POST + parameters: + refresh: true + request: + payload: + title: Monopoly + genre: RPG + status: [201] + + - path: /games/_doc + method: POST + parameters: + refresh: true + request: + payload: + title: Cyberpunk 2077 + genre: RPG + status: [201] + +epilogues: + - path: /movies + method: DELETE + status: [200, 404] + + - path: /games + method: DELETE + status: [200, 404] + +chapters: + - synopsis: Search using TermsQuery with an array of terms. + path: /{index}/_search + parameters: + index: movies + method: GET + request: + payload: + query: + terms: + genre: + - adventure + - animation + response: + status: 200 + payload: + timed_out: false + hits: + total: + value: 2 + relation: eq + hits: + - _index: movies + _score: 1 + _source: + title: The Lion King + genre: animation + - _index: movies + _score: 1 + _source: + title: Beauty and the Beast + genre: adventure + + - synopsis: Search using TermsQuery with an array of terms in the games index. + path: /{index}/_search + parameters: + index: games + method: GET + request: + payload: + query: + terms: + genre: + - RPG + response: + status: 200 + payload: + timed_out: false + hits: + total: + value: 2 + relation: eq + hits: + - _index: games + _score: 1 + _source: + title: Monopoly + genre: RPG + - _index: games + _score: 1 + _source: + title: Cyberpunk 2077 + genre: RPG diff --git a/tests/default/_core/search/query/terms_set.yaml b/tests/default/_core/search/query/terms_set.yaml new file mode 100644 index 00000000..28d453c2 --- /dev/null +++ b/tests/default/_core/search/query/terms_set.yaml @@ -0,0 +1,66 @@ +$schema: ../../../../../json_schemas/test_story.schema.yaml + +description: Test TermsSetQuery functionality with complex example using movies. +version: '>= 1.2' + +prologues: + - path: /movies + method: PUT + request: + payload: + mappings: + properties: + title: + type: keyword + genres: + type: keyword + min_required_genres: + type: integer + + - path: /movies/_doc/1 + method: POST + parameters: + refresh: true + request: + payload: + title: The Lion King + genres: [Adventure, Animation, Family] + min_required_genres: 2 + status: [201] + + - path: /movies/_doc/2 + method: POST + parameters: + refresh: true + request: + payload: + title: Beauty and the Beast + genres: [Animation, Family, Musical] + min_required_genres: 2 + status: [201] + +epilogues: + - path: /movies + method: DELETE + status: [200, 404] + +chapters: + - synopsis: Search using TermsSetQuery with terms array and minimum_should_match_field. + path: /{index}/_search + parameters: + index: movies + method: POST + request: + payload: + query: + terms_set: + genres: + terms: [Adventure, Animation, Family] + minimum_should_match_field: min_required_genres + response: + status: 200 + payload: + timed_out: false + hits: + total: + value: 2