Skip to content

Commit

Permalink
Fixed query DSL match that supports a field name and value.
Browse files Browse the repository at this point in the history
Signed-off-by: dblock <[email protected]>
  • Loading branch information
dblock committed Jul 11, 2024
1 parent 45953f0 commit ec3de7c
Show file tree
Hide file tree
Showing 4 changed files with 254 additions and 13 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
- Fixed `/{index}/_open` can return a `task` ([#376](https://github.com/opensearch-project/opensearch-api-specification/pull/376))
- Fixed `_source` in `bulk` responses ([#375](https://github.com/opensearch-project/opensearch-api-specification/pull/375))
- Fixed `/{index}/_dangling` that can return `nodes` and `cluster_name` ([#391](https://github.com/opensearch-project/opensearch-api-specification/pull/391))
- 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
31 changes: 18 additions & 13 deletions spec/schemas/_common.query_dsl.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,16 @@ components:
description: |-
Returns documents that match a provided text, number, date or boolean value.
The provided text is analyzed before matching.
type: object
additionalProperties:
$ref: '#/components/schemas/MatchQuery'
minProperties: 1
maxProperties: 1
anyOf:
- type: object
additionalProperties:
$ref: '#/components/schemas/MatchQuery'
minProperties: 1
maxProperties: 1
- type: object
additionalProperties: true
minProperties: 1
maxProperties: 1
match_all:
$ref: '#/components/schemas/MatchAllQuery'
match_bool_prefix:
Expand Down Expand Up @@ -516,7 +521,7 @@ components:
type: number
missing:
description: |-
Value used if the document doesnt have that field.
Value used if the document doesn't have that field.
The modifier and factor are still applied to it as though it were read from the document.
type: number
modifier:
Expand Down Expand Up @@ -1303,7 +1308,7 @@ components:
case_insensitive:
description: |-
Allows ASCII case insensitive matching of the value with the indexed field values when set to `true`.
Default is `false` which means the case sensitivity of matching depends on the underlying fields mapping.
Default is `false` which means the case sensitivity of matching depends on the underlying field's mapping.
type: boolean
required:
- value
Expand Down Expand Up @@ -1520,7 +1525,7 @@ components:
case_insensitive:
description: |-
Allows case insensitive matching of the regular expression value with the indexed field values when set to `true`.
When `false`, case sensitivity of matching depends on the underlying fields mapping.
When `false`, case sensitivity of matching depends on the underlying field's mapping.
type: boolean
flags:
description: Enables optional operators for the regular expression.
Expand Down Expand Up @@ -1759,18 +1764,18 @@ components:
properties:
dist:
description: |-
The number of tokens from within the include span that cant have overlap with the exclude span.
The number of tokens from within the include span that can't have overlap with the exclude span.
Equivalent to setting both `pre` and `post`.
type: number
exclude:
$ref: '#/components/schemas/SpanQuery'
include:
$ref: '#/components/schemas/SpanQuery'
post:
description: The number of tokens after the include span that cant have overlap with the exclude span.
description: The number of tokens after the include span that can't have overlap with the exclude span.
type: number
pre:
description: The number of tokens before the include span that cant have overlap with the exclude span.
description: The number of tokens before the include span that can't have overlap with the exclude span.
type: number
required:
- exclude
Expand Down Expand Up @@ -1818,7 +1823,7 @@ components:
case_insensitive:
description: |-
Allows ASCII case insensitive matching of the value with the indexed field values when set to `true`.
When `false`, the case sensitivity of matching depends on the underlying fields mapping.
When `false`, the case sensitivity of matching depends on the underlying field's mapping.
type: boolean
required:
- value
Expand Down Expand Up @@ -1890,7 +1895,7 @@ components:
- type: object
properties:
case_insensitive:
description: Allows case insensitive matching of the pattern with the indexed field values when set to true. Default is false which means the case sensitivity of matching depends on the underlying fields mapping.
description: Allows case insensitive matching of the pattern with the indexed field values when set to `true`. Default is `false` which means the case sensitivity of matching depends on the underlying field's mapping.
type: boolean
rewrite:
$ref: '_common.yaml#/components/schemas/MultiTermQueryRewrite'
Expand Down
212 changes: 212 additions & 0 deletions tests/_core/reindex.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
$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]
chapters:
- synopsis: Create a document.
path: /{index}/_doc
method: POST
parameters:
index: movies
request_body:
payload:
title: Beauty and the Beast
year: 91
response:
status: 201
- synopsis: Refresh the index.
path: /{index}/_refresh
method: POST
parameters:
index: movies
- 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 reindexing.

Check failure on line 109 in tests/_core/reindex.yaml

View workflow job for this annotation

GitHub Actions / lint

Unknown word: "reindexing"
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: Create an ingest pipeline.
path: /_ingest/pipeline/{id}
method: PUT
parameters:
id: transform-and-count
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
- 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

0 comments on commit ec3de7c

Please sign in to comment.