Skip to content

Commit

Permalink
Fixed query DSL match that supports a field name and value (#405)
Browse files Browse the repository at this point in the history
* Fixed query DSL `match` that supports a field name and value.

Signed-off-by: dblock <[email protected]>
  • Loading branch information
dblock authored Jul 11, 2024
1 parent 610b6b5 commit 667091c
Show file tree
Hide file tree
Showing 6 changed files with 233 additions and 2 deletions.
1 change: 1 addition & 0 deletions .cspell
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ termvectors
tfidf
tokenfilters
translog
tubone
unigrams
unmatch
untriaged
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
- Fixed `/{index}/_dangling` that can return `nodes` and `cluster_name` ([#391](https://github.com/opensearch-project/opensearch-api-specification/pull/391))
- Fixed `Metadata` schema ([#399](https://github.com/opensearch-project/opensearch-api-specification/pull/399))
- Fixed `/_data_stream` health status and required fields ([#401](https://github.com/opensearch-project/opensearch-api-specification/pull/401))
- Fixed query DSL `match` that supports a field name and value ([#405](https://github.com/opensearch-project/opensearch-api-specification/pull/405))

### Security

Expand Down
4 changes: 3 additions & 1 deletion spec/schemas/_common.query_dsl.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,9 @@ components:
The provided text is analyzed before matching.
type: object
additionalProperties:
$ref: '#/components/schemas/MatchQuery'
anyOf:
- $ref: '#/components/schemas/MatchQuery'
- true
minProperties: 1
maxProperties: 1
match_all:
Expand Down
204 changes: 204 additions & 0 deletions tests/_core/reindex.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
$schema: ../../json_schemas/test_story.schema.yaml

description: Test reindex.
epilogues:
- path: /movies
method: DELETE
status: [200, 404]
- path: /films
method: DELETE
status: [200, 404]
- path: /videos
method: DELETE
status: [200, 404]
- path: /_ingest/pipeline/transform-and-count
method: DELETE
status: [200, 404]
prologues:
- path: /_ingest/pipeline/transform-and-count
method: PUT
request_body:
payload:
description: |
Splits the `title`` field into a `words` list.
Computes the length of the title field and stores it in a new `length` field.
Removes the `year` field.
processors:
- split:
field: title
separator: '\s+'
target_field: words
- script:
lang: painless
source: 'ctx.length = ctx.words.length'
- remove:
field: year
- path: /{index}/_doc
method: POST
parameters:
index: movies
refresh: true
request_body:
payload:
title: Beauty and the Beast
year: 91
status: [201]
chapters:
- synopsis: Reindex from movies to films.
path: /_reindex
method: POST
request_body:
payload:
source:
index: movies
dest:
index: films
response:
status: 200
payload:
total: 1
- synopsis: Reindex a subset of documents (match).
path: /_reindex
method: POST
request_body:
payload:
source:
index: movies
query:
match:
title: Beauty and the Beast
dest:
index: films
response:
status: 200
payload:
total: 1
- synopsis: Reindex a subset of documents (no match).
path: /_reindex
method: POST
request_body:
payload:
source:
index: movies
query:
match:
title: Does not Exist
dest:
index: films
response:
status: 200
payload:
total: 0
- synopsis: Combine two indexes.
path: /_reindex
method: POST
request_body:
payload:
source:
index:
- movies
- films
dest:
index: videos
response:
status: 200
payload:
total: 1
- synopsis: Reindex only unique documents.
path: /_reindex
method: POST
request_body:
payload:
conflicts: proceed
source:
index: movies
dest:
index: videos
op_type: create
response:
status: 200
payload:
total: 1
- synopsis: Transform documents during reindex.
path: /_reindex
method: POST
request_body:
payload:
source:
index: movies
dest:
index: videos
script:
lang: painless
source: ctx._source.year += 1900
response:
status: 200
payload:
total: 1
- synopsis: Transform documents using a pipeline.
path: /_reindex
method: POST
request_body:
payload:
source:
index: movies
dest:
index: videos
pipeline: transform-and-count
response:
status: 200
- synopsis: Refresh the index.
path: /{index}/_refresh
method: POST
parameters:
index: videos
- synopsis: Get all videos.
path: /{index}/_search
method: POST
parameters:
index: videos
request_body:
payload:
query:
match_all: {}
response:
status: 200
payload:
hits:
hits:
- _index: videos
_source:
words:
- Beauty
- and
- the
- Beast
length: 4
title: Beauty and the Beast
- synopsis: Update documents in the current index.
path: /{index}/_update_by_query
method: POST
parameters:
index: videos
response:
status: 200
payload:
updated: 1
- synopsis: Reindex from movies to films with all options.
path: /_reindex
method: POST
parameters:
max_docs: 1
slices: 1
request_body:
payload:
source:
index: movies
size: 1
dest:
index: films
version_type: internal
response:
status: 200
payload:
total: 1
23 changes: 23 additions & 0 deletions tests/_core/search.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,29 @@ chapters:
director: Bennett Miller
title: Moneyball
year: 2011
- synopsis: Search with a match query object.
path: /{index}/_search
parameters:
index: movies
method: POST
request_body:
payload:
size: 1
query:
match:
director:
query: Bennett Miller
- synopsis: Search with a match query field.
path: /{index}/_search
parameters:
index: movies
method: POST
request_body:
payload:
size: 1
query:
match:
director: Bennett Miller
- synopsis: Search with multi_match query.
path: /{index}/_search
parameters:
Expand Down
2 changes: 1 addition & 1 deletion tools/src/_utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { type OpenAPIV3 } from 'openapi-types'
import { type ValidationError } from 'types'

export function is_ref<O extends object> (o: MaybeRef<O>): o is OpenAPIV3.ReferenceObject {
return '$ref' in o
return typeof (o) === 'object' && '$ref' in o
}

export function is_array_schema (schema: OpenAPIV3.SchemaObject): schema is OpenAPIV3.ArraySchemaObject {
Expand Down

0 comments on commit 667091c

Please sign in to comment.