diff --git a/docs/reference/query-dsl/bool-query.asciidoc b/docs/reference/query-dsl/bool-query.asciidoc index 8fcd66129cd..2a289910c43 100644 --- a/docs/reference/query-dsl/bool-query.asciidoc +++ b/docs/reference/query-dsl/bool-query.asciidoc @@ -81,7 +81,7 @@ all documents where the `status` field contains the term `active`. This first query assigns a score of `0` to all documents, as no scoring query has been specified: -[source,json] +[source,js] --------------------------------- GET _search { @@ -101,7 +101,7 @@ GET _search This `bool` query has a `match_all` query, which assigns a score of `1.0` to all documents. -[source,json] +[source,js] --------------------------------- GET _search { @@ -125,7 +125,7 @@ This `constant_score` query behaves in exactly the same way as the second exampl The `constant_score` query assigns a score of `1.0` to all documents matched by the filter. -[source,json] +[source,js] --------------------------------- GET _search { diff --git a/docs/reference/query-dsl/boosting-query.asciidoc b/docs/reference/query-dsl/boosting-query.asciidoc index 969b3bbedfe..5bb07392ab7 100644 --- a/docs/reference/query-dsl/boosting-query.asciidoc +++ b/docs/reference/query-dsl/boosting-query.asciidoc @@ -8,19 +8,23 @@ overall score. [source,js] -------------------------------------------------- +GET /_search { - "boosting" : { - "positive" : { - "term" : { - "field1" : "value1" - } - }, - "negative" : { - "term" : { - "field2" : "value2" - } - }, - "negative_boost" : 0.2 + "query": { + "boosting" : { + "positive" : { + "term" : { + "field1" : "value1" + } + }, + "negative" : { + "term" : { + "field2" : "value2" + } + }, + "negative_boost" : 0.2 + } } } -------------------------------------------------- +// CONSOLE diff --git a/docs/reference/query-dsl/common-terms-query.asciidoc b/docs/reference/query-dsl/common-terms-query.asciidoc index a956c33c1ee..fcc4ace2ec6 100644 --- a/docs/reference/query-dsl/common-terms-query.asciidoc +++ b/docs/reference/query-dsl/common-terms-query.asciidoc @@ -70,15 +70,19 @@ In this example, words that have a document frequency greater than 0.1% [source,js] -------------------------------------------------- +GET /_search { - "common": { - "body": { - "query": "this is bonsai cool", - "cutoff_frequency": 0.001 + "query": { + "common": { + "body": { + "query": "this is bonsai cool", + "cutoff_frequency": 0.001 + } + } } - } } -------------------------------------------------- +// CONSOLE The number of terms which should match can be controlled with the <> @@ -90,36 +94,44 @@ all terms required: [source,js] -------------------------------------------------- +GET /_search { - "common": { - "body": { - "query": "nelly the elephant as a cartoon", - "cutoff_frequency": 0.001, - "low_freq_operator": "and" + "query": { + "common": { + "body": { + "query": "nelly the elephant as a cartoon", + "cutoff_frequency": 0.001, + "low_freq_operator": "and" + } + } } - } } -------------------------------------------------- +// CONSOLE which is roughly equivalent to: [source,js] -------------------------------------------------- +GET /_search { - "bool": { - "must": [ - { "term": { "body": "nelly"}}, - { "term": { "body": "elephant"}}, - { "term": { "body": "cartoon"}} - ], - "should": [ - { "term": { "body": "the"}} - { "term": { "body": "as"}} - { "term": { "body": "a"}} - ] - } + "query": { + "bool": { + "must": [ + { "term": { "body": "nelly"}}, + { "term": { "body": "elephant"}}, + { "term": { "body": "cartoon"}} + ], + "should": [ + { "term": { "body": "the"}}, + { "term": { "body": "as"}}, + { "term": { "body": "a"}} + ] + } + } } -------------------------------------------------- +// CONSOLE Alternatively use <> @@ -128,41 +140,49 @@ must be present, for instance: [source,js] -------------------------------------------------- +GET /_search { - "common": { - "body": { - "query": "nelly the elephant as a cartoon", - "cutoff_frequency": 0.001, - "minimum_should_match": 2 + "query": { + "common": { + "body": { + "query": "nelly the elephant as a cartoon", + "cutoff_frequency": 0.001, + "minimum_should_match": 2 + } + } } - } } -------------------------------------------------- +// CONSOLE which is roughly equivalent to: [source,js] -------------------------------------------------- +GET /_search { - "bool": { - "must": { - "bool": { - "should": [ - { "term": { "body": "nelly"}}, - { "term": { "body": "elephant"}}, - { "term": { "body": "cartoon"}} - ], - "minimum_should_match": 2 - } - }, - "should": [ - { "term": { "body": "the"}} - { "term": { "body": "as"}} - { "term": { "body": "a"}} - ] - } + "query": { + "bool": { + "must": { + "bool": { + "should": [ + { "term": { "body": "nelly"}}, + { "term": { "body": "elephant"}}, + { "term": { "body": "cartoon"}} + ], + "minimum_should_match": 2 + } + }, + "should": [ + { "term": { "body": "the"}}, + { "term": { "body": "as"}}, + { "term": { "body": "a"}} + ] + } + } } -------------------------------------------------- +// CONSOLE minimum_should_match @@ -174,50 +194,58 @@ additional parameters (note the change in structure): [source,js] -------------------------------------------------- +GET /_search { - "common": { - "body": { - "query": "nelly the elephant not as a cartoon", - "cutoff_frequency": 0.001, - "minimum_should_match": { - "low_freq" : 2, - "high_freq" : 3 - } + "query": { + "common": { + "body": { + "query": "nelly the elephant not as a cartoon", + "cutoff_frequency": 0.001, + "minimum_should_match": { + "low_freq" : 2, + "high_freq" : 3 + } + } + } } - } } -------------------------------------------------- +// CONSOLE which is roughly equivalent to: [source,js] -------------------------------------------------- +GET /_search { - "bool": { - "must": { - "bool": { - "should": [ - { "term": { "body": "nelly"}}, - { "term": { "body": "elephant"}}, - { "term": { "body": "cartoon"}} - ], - "minimum_should_match": 2 - } - }, - "should": { - "bool": { - "should": [ - { "term": { "body": "the"}}, - { "term": { "body": "not"}}, - { "term": { "body": "as"}}, - { "term": { "body": "a"}} - ], - "minimum_should_match": 3 - } + "query": { + "bool": { + "must": { + "bool": { + "should": [ + { "term": { "body": "nelly"}}, + { "term": { "body": "elephant"}}, + { "term": { "body": "cartoon"}} + ], + "minimum_should_match": 2 + } + }, + "should": { + "bool": { + "should": [ + { "term": { "body": "the"}}, + { "term": { "body": "not"}}, + { "term": { "body": "as"}}, + { "term": { "body": "a"}} + ], + "minimum_should_match": 3 + } + } + } } - } } -------------------------------------------------- +// CONSOLE In this case it means the high frequency terms have only an impact on relevance when there are at least three of them. But the most @@ -227,36 +255,44 @@ for high frequency terms is when there are only high frequency terms: [source,js] -------------------------------------------------- +GET /_search { - "common": { - "body": { - "query": "how not to be", - "cutoff_frequency": 0.001, - "minimum_should_match": { - "low_freq" : 2, - "high_freq" : 3 - } + "query": { + "common": { + "body": { + "query": "how not to be", + "cutoff_frequency": 0.001, + "minimum_should_match": { + "low_freq" : 2, + "high_freq" : 3 + } + } + } } - } } -------------------------------------------------- +// CONSOLE which is roughly equivalent to: [source,js] -------------------------------------------------- +GET /_search { - "bool": { - "should": [ - { "term": { "body": "how"}}, - { "term": { "body": "not"}}, - { "term": { "body": "to"}}, - { "term": { "body": "be"}} - ], - "minimum_should_match": "3<50%" - } + "query": { + "bool": { + "should": [ + { "term": { "body": "how"}}, + { "term": { "body": "not"}}, + { "term": { "body": "to"}}, + { "term": { "body": "be"}} + ], + "minimum_should_match": "3<50%" + } + } } -------------------------------------------------- +// CONSOLE The high frequency generated query is then slightly less restrictive than with an `AND`. diff --git a/docs/reference/query-dsl/constant-score-query.asciidoc b/docs/reference/query-dsl/constant-score-query.asciidoc index 8e76ac13ff5..bced9fc9fbe 100644 --- a/docs/reference/query-dsl/constant-score-query.asciidoc +++ b/docs/reference/query-dsl/constant-score-query.asciidoc @@ -7,12 +7,16 @@ filter. Maps to Lucene `ConstantScoreQuery`. [source,js] -------------------------------------------------- +GET /_search { - "constant_score" : { - "filter" : { - "term" : { "user" : "kimchy"} - }, - "boost" : 1.2 + "query": { + "constant_score" : { + "filter" : { + "term" : { "user" : "kimchy"} + }, + "boost" : 1.2 + } } } -------------------------------------------------- +// CONSOLE diff --git a/docs/reference/query-dsl/dis-max-query.asciidoc b/docs/reference/query-dsl/dis-max-query.asciidoc index 2938c8db8ea..2f82f2294b3 100644 --- a/docs/reference/query-dsl/dis-max-query.asciidoc +++ b/docs/reference/query-dsl/dis-max-query.asciidoc @@ -27,18 +27,22 @@ This query maps to Lucene `DisjunctionMaxQuery`. [source,js] -------------------------------------------------- +GET /_search { - "dis_max" : { - "tie_breaker" : 0.7, - "boost" : 1.2, - "queries" : [ - { - "term" : { "age" : 34 } - }, - { - "term" : { "age" : 35 } - } - ] + "query": { + "dis_max" : { + "tie_breaker" : 0.7, + "boost" : 1.2, + "queries" : [ + { + "term" : { "age" : 34 } + }, + { + "term" : { "age" : 35 } + } + ] + } } } -------------------------------------------------- +// CONSOLE diff --git a/docs/reference/query-dsl/exists-query.asciidoc b/docs/reference/query-dsl/exists-query.asciidoc index b484d47f4b6..4971219366f 100644 --- a/docs/reference/query-dsl/exists-query.asciidoc +++ b/docs/reference/query-dsl/exists-query.asciidoc @@ -5,10 +5,14 @@ Returns documents that have at least one non-`null` value in the original field: [source,js] -------------------------------------------------- +GET /_search { - "exists" : { "field" : "user" } + "query": { + "exists" : { "field" : "user" } + } } -------------------------------------------------- +// CONSOLE For instance, these documents would all match the above query: @@ -77,14 +81,20 @@ clause as follows: [source,js] -------------------------------------------------- -"bool": { - "must_not": { - "exists": { - "field": "user" +GET /_search +{ + "query": { + "bool": { + "must_not": { + "exists": { + "field": "user" + } + } } } } -------------------------------------------------- +// CONSOLE This query returns documents that have no value in the user field. diff --git a/docs/reference/query-dsl/function-score-query.asciidoc b/docs/reference/query-dsl/function-score-query.asciidoc index 5f92d8c172c..e7e4b8f5877 100644 --- a/docs/reference/query-dsl/function-score-query.asciidoc +++ b/docs/reference/query-dsl/function-score-query.asciidoc @@ -14,13 +14,20 @@ by the query. [source,js] -------------------------------------------------- -"function_score": { - "query": {}, - "boost": "boost for the whole query", - "FUNCTION": {}, <1> - "boost_mode":"(multiply|replace|...)" +GET /_search +{ + "query": { + "function_score": { + "query": {}, + "boost": "5", + "random_score": {}, <1> + "boost_mode":"multiply" + } + } } -------------------------------------------------- +// CONSOLE + <1> See <> for a list of supported functions. Furthermore, several functions can be combined. In this case one can @@ -29,30 +36,35 @@ given filtering query [source,js] -------------------------------------------------- -"function_score": { - "query": {}, - "boost": "boost for the whole query", - "functions": [ - { - "filter": {}, - "FUNCTION": {}, <1> - "weight": number - }, - { - "FUNCTION": {} <1> - }, - { - "filter": {}, - "weight": number +GET /_search +{ + "query": { + "function_score": { + "query": {}, + "boost": "5", <1> + "functions": [ + { + "filter": {}, + "random_score": {}, <2> + "weight": 23 + }, + { + "filter": {}, + "weight": 42 + } + ], + "max_boost": 42, + "score_mode": "max", + "boost_mode": "multiply", + "min_score" : 42 } - ], - "max_boost": number, - "score_mode": "(multiply|max|...)", - "boost_mode": "(multiply|replace|...)", - "min_score" : number + } } -------------------------------------------------- -<1> See <> for a list of supported functions. +// CONSOLE + +<1> Boost for the whole query. +<2> See <> for a list of supported functions. NOTE: The scores produced by the filtering query of each function do not matter. @@ -459,36 +471,36 @@ the request would look like this: [source,js] -------------------------------------------------- -GET _search +GET /_search { - "query": { - "function_score": { - "functions": [ - { - "gauss": { - "price": { - "origin": "0", - "scale": "20" + "query": { + "function_score": { + "functions": [ + { + "gauss": { + "price": { + "origin": "0", + "scale": "20" + } + } + }, + { + "gauss": { + "location": { + "origin": "11, 12", + "scale": "2km" + } + } } - } - }, - { - "gauss": { - "location": { - "origin": "11, 12", - "scale": "2km" + ], + "query": { + "match": { + "properties": "balcony" } - } + }, + "score_mode": "multiply" } - ], - "query": { - "match": { - "properties": "balcony" - } - }, - "score_mode": "multiply" } - } } -------------------------------------------------- // CONSOLE diff --git a/docs/reference/query-dsl/fuzzy-query.asciidoc b/docs/reference/query-dsl/fuzzy-query.asciidoc index 48c9c45c0ff..f320e81b579 100644 --- a/docs/reference/query-dsl/fuzzy-query.asciidoc +++ b/docs/reference/query-dsl/fuzzy-query.asciidoc @@ -16,27 +16,35 @@ Here is a simple example: [source,js] -------------------------------------------------- +GET /_search { - "fuzzy" : { "user" : "ki" } + "query": { + "fuzzy" : { "user" : "ki" } + } } -------------------------------------------------- +// CONSOLE Or with more advanced settings: [source,js] -------------------------------------------------- +GET /_search { - "fuzzy" : { - "user" : { - "value" : "ki", - "boost" : 1.0, - "fuzziness" : 2, - "prefix_length" : 0, - "max_expansions": 100 + "query": { + "fuzzy" : { + "user" : { + "value" : "ki", + "boost" : 1.0, + "fuzziness" : 2, + "prefix_length" : 0, + "max_expansions": 100 + } } } } -------------------------------------------------- +// CONSOLE [float] ===== Parameters @@ -62,3 +70,4 @@ WARNING: This query can be very heavy if `prefix_length` is set to `0` and if `max_expansions` is set to a high number. It could result in every term in the index being examined! + diff --git a/docs/reference/query-dsl/geo-bounding-box-query.asciidoc b/docs/reference/query-dsl/geo-bounding-box-query.asciidoc index 00120a98fc9..40debb57105 100644 --- a/docs/reference/query-dsl/geo-bounding-box-query.asciidoc +++ b/docs/reference/query-dsl/geo-bounding-box-query.asciidoc @@ -6,6 +6,24 @@ bounding box. Assuming the following indexed document: [source,js] -------------------------------------------------- +PUT /my_locations +{ + "mappings": { + "location": { + "properties": { + "pin": { + "properties": { + "location": { + "type": "geo_point" + } + } + } + } + } + } +} + +PUT /my_locations/location/1 { "pin" : { "location" : { @@ -15,27 +33,32 @@ bounding box. Assuming the following indexed document: } } -------------------------------------------------- +// CONSOLE +// TESTSETUP Then the following simple query can be executed with a `geo_bounding_box` filter: [source,js] -------------------------------------------------- +GET /_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_bounding_box" : { - "pin.location" : { - "top_left" : { - "lat" : 40.73, - "lon" : -74.1 - }, - "bottom_right" : { - "lat" : 40.01, - "lon" : -71.12 + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_bounding_box" : { + "pin.location" : { + "top_left" : { + "lat" : 40.73, + "lon" : -74.1 + }, + "bottom_right" : { + "lat" : 40.01, + "lon" : -71.12 + } } } } @@ -43,6 +66,7 @@ Then the following simple query can be executed with a } } -------------------------------------------------- +// CONSOLE [float] ==== Query Options @@ -75,21 +99,24 @@ representation of the geo point, the filter can accept it as well: [source,js] -------------------------------------------------- +GET /_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_bounding_box" : { - "pin.location" : { - "top_left" : { - "lat" : 40.73, - "lon" : -74.1 - }, - "bottom_right" : { - "lat" : 40.01, - "lon" : -71.12 + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_bounding_box" : { + "pin.location" : { + "top_left" : { + "lat" : 40.73, + "lon" : -74.1 + }, + "bottom_right" : { + "lat" : 40.01, + "lon" : -71.12 + } } } } @@ -97,6 +124,7 @@ representation of the geo point, the filter can accept it as well: } } -------------------------------------------------- +// CONSOLE [float] ===== Lat Lon As Array @@ -106,22 +134,26 @@ conform with http://geojson.org/[GeoJSON]. [source,js] -------------------------------------------------- +GET /_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_bounding_box" : { - "pin.location" : { - "top_left" : [-74.1, 40.73], - "bottom_right" : [-71.12, 40.01] + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_bounding_box" : { + "pin.location" : { + "top_left" : [-74.1, 40.73], + "bottom_right" : [-71.12, 40.01] + } } } } } } -------------------------------------------------- +// CONSOLE [float] ===== Lat Lon As String @@ -130,44 +162,52 @@ Format in `lat,lon`. [source,js] -------------------------------------------------- +GET /_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_bounding_box" : { - "pin.location" : { - "top_left" : "40.73, -74.1", - "bottom_right" : "40.01, -71.12" + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_bounding_box" : { + "pin.location" : { + "top_left" : "40.73, -74.1", + "bottom_right" : "40.01, -71.12" + } } } - } } } +} -------------------------------------------------- +// CONSOLE [float] ===== Geohash [source,js] -------------------------------------------------- +GET /_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_bounding_box" : { - "pin.location" : { - "top_left" : "dr5r9ydj2y73", - "bottom_right" : "drj7teegpus6" + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_bounding_box" : { + "pin.location" : { + "top_left" : "dr5r9ydj2y73", + "bottom_right" : "drj7teegpus6" + } } } } } } -------------------------------------------------- +// CONSOLE [float] ==== Vertices @@ -181,24 +221,28 @@ values separately. [source,js] -------------------------------------------------- +GET /_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_bounding_box" : { - "pin.location" : { - "top" : 40.73, - "left" : -74.1, - "bottom" : 40.01, - "right" : -71.12 + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_bounding_box" : { + "pin.location" : { + "top" : 40.73, + "left" : -74.1, + "bottom" : 40.01, + "right" : -71.12 + } } } } } } -------------------------------------------------- +// CONSOLE [float] @@ -227,29 +271,33 @@ are not supported. Here is an example: [source,js] -------------------------------------------------- +GET /_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_bounding_box" : { - "pin.location" : { - "top_left" : { - "lat" : 40.73, - "lon" : -74.1 + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_bounding_box" : { + "pin.location" : { + "top_left" : { + "lat" : 40.73, + "lon" : -74.1 + }, + "bottom_right" : { + "lat" : 40.10, + "lon" : -71.12 + } }, - "bottom_right" : { - "lat" : 40.10, - "lon" : -71.12 - } - }, - "type" : "indexed" + "type" : "indexed" + } } } } } -------------------------------------------------- +// CONSOLE [float] ==== Ignore Unmapped diff --git a/docs/reference/query-dsl/geo-distance-query.asciidoc b/docs/reference/query-dsl/geo-distance-query.asciidoc index c29391e5b57..5e2f0ce43c7 100644 --- a/docs/reference/query-dsl/geo-distance-query.asciidoc +++ b/docs/reference/query-dsl/geo-distance-query.asciidoc @@ -2,10 +2,29 @@ === Geo Distance Query Filters documents that include only hits that exists within a specific -distance from a geo point. Assuming the following indexed json: +distance from a geo point. Assuming the following mapping and indexed +document: [source,js] -------------------------------------------------- +PUT /my_locations +{ + "mappings": { + "location": { + "properties": { + "pin": { + "properties": { + "location": { + "type": "geo_point" + } + } + } + } + } + } +} + +PUT /my_locations/location/1 { "pin" : { "location" : { @@ -15,29 +34,36 @@ distance from a geo point. Assuming the following indexed json: } } -------------------------------------------------- +// CONSOLE +// TESTSETUP + Then the following simple query can be executed with a `geo_distance` filter: [source,js] -------------------------------------------------- +GET /my_locations/location/_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_distance" : { - "distance" : "200km", - "pin.location" : { - "lat" : 40, - "lon" : -70 + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_distance" : { + "distance" : "200km", + "pin.location" : { + "lat" : 40, + "lon" : -70 + } } } } } } -------------------------------------------------- +// CONSOLE [float] ==== Accepted Formats @@ -50,23 +76,27 @@ representation of the geo point, the filter can accept it as well: [source,js] -------------------------------------------------- +GET /my_locations/location/_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_distance" : { - "distance" : "12km", - "pin.location" : { - "lat" : 40, - "lon" : -70 + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_distance" : { + "distance" : "12km", + "pin.location" : { + "lat" : 40, + "lon" : -70 + } } } } } } -------------------------------------------------- +// CONSOLE [float] ===== Lat Lon As Array @@ -76,20 +106,25 @@ conform with http://geojson.org/[GeoJSON]. [source,js] -------------------------------------------------- +GET /my_locations/location/_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_distance" : { - "distance" : "12km", - "pin.location" : [-70, 40] + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_distance" : { + "distance" : "12km", + "pin.location" : [-70, 40] + } } } } } -------------------------------------------------- +// CONSOLE + [float] ===== Lat Lon As String @@ -98,40 +133,48 @@ Format in `lat,lon`. [source,js] -------------------------------------------------- +GET /my_locations/location/_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_distance" : { - "distance" : "12km", - "pin.location" : "40,-70" + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_distance" : { + "distance" : "12km", + "pin.location" : "40,-70" + } } } } } -------------------------------------------------- +// CONSOLE [float] ===== Geohash [source,js] -------------------------------------------------- +GET /my_locations/location/_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_distance" : { - "distance" : "12km", - "pin.location" : "drm3btev3e86" + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_distance" : { + "distance" : "12km", + "pin.location" : "drm3btev3e86" + } } } } } -------------------------------------------------- +// CONSOLE [float] ==== Options diff --git a/docs/reference/query-dsl/geo-distance-range-query.asciidoc b/docs/reference/query-dsl/geo-distance-range-query.asciidoc index abf557d68c7..c54c50638bc 100644 --- a/docs/reference/query-dsl/geo-distance-range-query.asciidoc +++ b/docs/reference/query-dsl/geo-distance-range-query.asciidoc @@ -5,24 +5,28 @@ Filters documents that exists within a range from a specific point: [source,js] -------------------------------------------------- +GET /_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_distance_range" : { - "from" : "200km", - "to" : "400km", - "pin.location" : { - "lat" : 40, - "lon" : -70 + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_distance_range" : { + "from" : "200km", + "to" : "400km", + "pin.location" : { + "lat" : 40, + "lon" : -70 + } } } } } } -------------------------------------------------- +// CONSOLE Supports the same point location parameter and query options as the <> diff --git a/docs/reference/query-dsl/geo-polygon-query.asciidoc b/docs/reference/query-dsl/geo-polygon-query.asciidoc index 5717c5dc924..35278fda4a5 100644 --- a/docs/reference/query-dsl/geo-polygon-query.asciidoc +++ b/docs/reference/query-dsl/geo-polygon-query.asciidoc @@ -6,25 +6,29 @@ points. Here is an example: [source,js] -------------------------------------------------- +GET /_search { - "bool" : { - "query" : { - "match_all" : {} - }, - "filter" : { - "geo_polygon" : { - "person.location" : { - "points" : [ + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_polygon" : { + "person.location" : { + "points" : [ {"lat" : 40, "lon" : -70}, {"lat" : 30, "lon" : -80}, {"lat" : 20, "lon" : -90} - ] + ] + } } } } } } -------------------------------------------------- +// CONSOLE [float] ==== Query Options @@ -53,25 +57,29 @@ conform with http://geojson.org/[GeoJSON]. [source,js] -------------------------------------------------- +GET /_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_polygon" : { - "person.location" : { - "points" : [ - [-70, 40], + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_polygon" : { + "person.location" : { + "points" : [ + [-70, 40], [-80, 30], - [-90, 20] - ] + [-90, 20] + ] + } } } } } } -------------------------------------------------- +// CONSOLE [float] ===== Lat Lon as String @@ -80,50 +88,58 @@ Format in `lat,lon`. [source,js] -------------------------------------------------- +GET /_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_polygon" : { - "person.location" : { - "points" : [ - "40, -70", - "30, -80", - "20, -90" - ] + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_polygon" : { + "person.location" : { + "points" : [ + "40, -70", + "30, -80", + "20, -90" + ] + } } } } } } -------------------------------------------------- +// CONSOLE [float] ===== Geohash [source,js] -------------------------------------------------- +GET /_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geo_polygon" : { - "person.location" : { - "points" : [ - "drn5x1g8cu2y", - "30, -80", - "20, -90" - ] + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geo_polygon" : { + "person.location" : { + "points" : [ + "drn5x1g8cu2y", + "30, -80", + "20, -90" + ] + } } } } } } -------------------------------------------------- +// CONSOLE [float] ==== geo_point Type diff --git a/docs/reference/query-dsl/geo-shape-query.asciidoc b/docs/reference/query-dsl/geo-shape-query.asciidoc index a892080dda4..12203061336 100644 --- a/docs/reference/query-dsl/geo-shape-query.asciidoc +++ b/docs/reference/query-dsl/geo-shape-query.asciidoc @@ -26,10 +26,10 @@ Given a document that looks like this: -------------------------------------------------- { "name": "Wind & Wetter, Berlin, Germany", - "location": { - "type": "Point", - "coordinates": [13.400544, 52.530286] - } + "location": { + "type": "Point", + "coordinates": [13.400544, 52.530286] + } } -------------------------------------------------- @@ -38,6 +38,7 @@ The following query will find the point using the Elasticsearch's [source,js] -------------------------------------------------- +GET /_search { "query":{ "bool": { @@ -59,6 +60,7 @@ The following query will find the point using the Elasticsearch's } } -------------------------------------------------- +// CONSOLE ==== Pre-Indexed Shape @@ -81,26 +83,30 @@ shape: [source,js] -------------------------------------------------- +GET /_search { - "bool": { - "must": { - "match_all": {} - }, - "filter": { - "geo_shape": { - "location": { - "indexed_shape": { - "id": "DEU", - "type": "countries", - "index": "shapes", - "path": "location" + "query": { + "bool": { + "must": { + "match_all": {} + }, + "filter": { + "geo_shape": { + "location": { + "indexed_shape": { + "id": "DEU", + "type": "countries", + "index": "shapes", + "path": "location" + } + } } } - } } } } -------------------------------------------------- +// CONSOLE ==== Spatial Relations diff --git a/docs/reference/query-dsl/geohash-cell-query.asciidoc b/docs/reference/query-dsl/geohash-cell-query.asciidoc index 2dd701fd958..27e6319bc71 100644 --- a/docs/reference/query-dsl/geohash-cell-query.asciidoc +++ b/docs/reference/query-dsl/geohash-cell-query.asciidoc @@ -13,6 +13,7 @@ setting the `geohash_prefix` option: [source,js] -------------------------------------------------- +PUT /my_index { "mappings" : { "location": { @@ -28,6 +29,8 @@ setting the `geohash_prefix` option: } } -------------------------------------------------- +// CONSOLE +// TESTSETUP The geohash cell can defined by all formats of `geo_points`. If such a cell is defined by a latitude and longitude pair the size of the cell needs to be @@ -42,24 +45,28 @@ next to the given cell. [source,js] -------------------------------------------------- +GET /_search { - "bool" : { - "must" : { - "match_all" : {} - }, - "filter" : { - "geohash_cell": { - "pin": { - "lat": 13.4080, - "lon": 52.5186 - }, - "precision": 3, - "neighbors": true + "query": { + "bool" : { + "must" : { + "match_all" : {} + }, + "filter" : { + "geohash_cell": { + "pin": { + "lat": 13.4080, + "lon": 52.5186 + }, + "precision": 3, + "neighbors": true + } } } } } -------------------------------------------------- +// CONSOLE [float] ==== Ignore Unmapped diff --git a/docs/reference/query-dsl/has-child-query.asciidoc b/docs/reference/query-dsl/has-child-query.asciidoc index bfadc33c06c..3b8352fd4e0 100644 --- a/docs/reference/query-dsl/has-child-query.asciidoc +++ b/docs/reference/query-dsl/has-child-query.asciidoc @@ -7,17 +7,21 @@ an example: [source,js] -------------------------------------------------- +GET /_search { - "has_child" : { - "type" : "blog_tag", - "query" : { - "term" : { - "tag" : "something" - } + "query": { + "has_child" : { + "type" : "blog_tag", + "query" : { + "term" : { + "tag" : "something" + } + } } } } -------------------------------------------------- +// CONSOLE [float] ==== Scoring capabilities @@ -32,18 +36,22 @@ inside the `has_child` query: [source,js] -------------------------------------------------- +GET /_search { - "has_child" : { - "type" : "blog_tag", - "score_mode" : "min", - "query" : { - "term" : { - "tag" : "something" - } + "query": { + "has_child" : { + "type" : "blog_tag", + "score_mode" : "min", + "query" : { + "term" : { + "tag" : "something" + } + } } } } -------------------------------------------------- +// CONSOLE [float] ==== Min/Max Children @@ -54,20 +62,24 @@ a match: [source,js] -------------------------------------------------- +GET /_search { - "has_child" : { - "type" : "blog_tag", - "score_mode" : "min", - "min_children": 2, <1> - "max_children": 10, <1> - "query" : { - "term" : { - "tag" : "something" + "query": { + "has_child" : { + "type" : "blog_tag", + "score_mode" : "min", + "min_children": 2, <1> + "max_children": 10, <1> + "query" : { + "term" : { + "tag" : "something" + } } } } } -------------------------------------------------- +// CONSOLE <1> Both `min_children` and `max_children` are optional. The `min_children` and `max_children` parameters can be combined with diff --git a/docs/reference/query-dsl/has-parent-query.asciidoc b/docs/reference/query-dsl/has-parent-query.asciidoc index 9896be6a0a5..202bcaac432 100644 --- a/docs/reference/query-dsl/has-parent-query.asciidoc +++ b/docs/reference/query-dsl/has-parent-query.asciidoc @@ -9,17 +9,21 @@ in the same manner as the `has_child` query. [source,js] -------------------------------------------------- +GET /_search { - "has_parent" : { - "parent_type" : "blog", - "query" : { - "term" : { - "tag" : "something" - } + "query": { + "has_parent" : { + "parent_type" : "blog", + "query" : { + "term" : { + "tag" : "something" + } + } } } } -------------------------------------------------- +// CONSOLE [float] ==== Scoring capabilities @@ -34,18 +38,22 @@ matching parent document. The score mode can be specified with the [source,js] -------------------------------------------------- +GET /_search { - "has_parent" : { - "parent_type" : "blog", - "score" : true, - "query" : { - "term" : { - "tag" : "something" - } + "query": { + "has_parent" : { + "parent_type" : "blog", + "score" : true, + "query" : { + "term" : { + "tag" : "something" + } + } } } } -------------------------------------------------- +// CONSOLE [float] ==== Ignore Unmapped diff --git a/docs/reference/query-dsl/ids-query.asciidoc b/docs/reference/query-dsl/ids-query.asciidoc index 7d08243a78f..09541ce51d3 100644 --- a/docs/reference/query-dsl/ids-query.asciidoc +++ b/docs/reference/query-dsl/ids-query.asciidoc @@ -6,13 +6,17 @@ uses the <> field. [source,js] -------------------------------------------------- +GET /_search { - "ids" : { - "type" : "my_type", - "values" : ["1", "4", "100"] + "query": { + "ids" : { + "type" : "my_type", + "values" : ["1", "4", "100"] + } } } -------------------------------------------------- +// CONSOLE The `type` is optional and can be omitted, and can also accept an array of values. If no type is specified, all types defined in the index mapping are tried. diff --git a/docs/reference/query-dsl/indices-query.asciidoc b/docs/reference/query-dsl/indices-query.asciidoc index e3b604b7a39..8f2f958086e 100644 --- a/docs/reference/query-dsl/indices-query.asciidoc +++ b/docs/reference/query-dsl/indices-query.asciidoc @@ -9,18 +9,18 @@ on the list, the alternative `no_match_query` is executed. [source,js] -------------------------------------------------- +GET /_search { - "indices" : { - "indices" : ["index1", "index2"], - "query" : { - "term" : { "tag" : "wow" } - }, - "no_match_query" : { - "term" : { "tag" : "kow" } + "query": { + "indices" : { + "indices" : ["index1", "index2"], + "query" : { "term" : { "tag" : "wow" } }, + "no_match_query" : { "term" : { "tag" : "kow" } } } } } -------------------------------------------------- +// CONSOLE You can use the `index` field to provide a single index. diff --git a/docs/reference/query-dsl/match-all-query.asciidoc b/docs/reference/query-dsl/match-all-query.asciidoc index d46b08f9e55..6e448828676 100644 --- a/docs/reference/query-dsl/match-all-query.asciidoc +++ b/docs/reference/query-dsl/match-all-query.asciidoc @@ -6,15 +6,27 @@ of `1.0`. [source,js] -------------------------------------------------- -{ "match_all": {} } +GET /_search +{ + "query": { + "match_all": {} + } +} -------------------------------------------------- +// CONSOLE The `_score` can be changed with the `boost` parameter: [source,js] -------------------------------------------------- -{ "match_all": { "boost" : 1.2 }} +GET /_search +{ + "query": { + "match_all": { "boost" : 1.2 } + } +} -------------------------------------------------- +// CONSOLE [[query-dsl-match-none-query]] [float] @@ -24,5 +36,11 @@ This is the inverse of the `match_all` query, which matches no documents. [source,js] -------------------------------------------------- -{ "match_none": {} } +GET /_search +{ + "query": { + "match_none": {} + } +} -------------------------------------------------- +// CONSOLE diff --git a/docs/reference/query-dsl/match-phrase-prefix-query.asciidoc b/docs/reference/query-dsl/match-phrase-prefix-query.asciidoc index b715bf8bd6d..e7e0f618652 100644 --- a/docs/reference/query-dsl/match-phrase-prefix-query.asciidoc +++ b/docs/reference/query-dsl/match-phrase-prefix-query.asciidoc @@ -6,12 +6,16 @@ allows for prefix matches on the last term in the text. For example: [source,js] -------------------------------------------------- +GET /_search { - "match_phrase_prefix" : { - "message" : "quick brown f" + "query": { + "match_phrase_prefix" : { + "message" : "quick brown f" + } } } -------------------------------------------------- +// CONSOLE It accepts the same parameters as the phrase type. In addition, it also accepts a `max_expansions` parameter (default `50`) that can control to how @@ -21,15 +25,19 @@ example: [source,js] -------------------------------------------------- +GET /_search { - "match_phrase_prefix" : { - "message" : { - "query" : "quick brown f", - "max_expansions" : 10 + "query": { + "match_phrase_prefix" : { + "message" : { + "query" : "quick brown f", + "max_expansions" : 10 + } } } } -------------------------------------------------- +// CONSOLE [IMPORTANT] =================================================== @@ -53,4 +61,4 @@ For better solutions for _search-as-you-type_ see the <> and {guide}/_index_time_search_as_you_type.html[Index-Time Search-as-You-Type]. -=================================================== \ No newline at end of file +=================================================== diff --git a/docs/reference/query-dsl/match-phrase-query.asciidoc b/docs/reference/query-dsl/match-phrase-query.asciidoc index 105866be12a..943d0e84d36 100644 --- a/docs/reference/query-dsl/match-phrase-query.asciidoc +++ b/docs/reference/query-dsl/match-phrase-query.asciidoc @@ -6,12 +6,16 @@ out of the analyzed text. For example: [source,js] -------------------------------------------------- +GET /_search { - "match_phrase" : { - "message" : "this is a test" + "query": { + "match_phrase" : { + "message" : "this is a test" + } } } -------------------------------------------------- +// CONSOLE A phrase query matches terms up to a configurable `slop` (which defaults to 0) in any order. Transposed terms have a slop of 2. @@ -22,12 +26,16 @@ definition, or the default search analyzer, for example: [source,js] -------------------------------------------------- +GET /_search { - "match_phrase" : { - "message" : { - "query" : "this is a test", - "analyzer" : "my_analyzer" + "query": { + "match_phrase" : { + "message" : { + "query" : "this is a test", + "analyzer" : "my_analyzer" + } } } } -------------------------------------------------- +// CONSOLE diff --git a/docs/reference/query-dsl/match-query.asciidoc b/docs/reference/query-dsl/match-query.asciidoc index 3dbb60d1ca2..c0081f1de9a 100644 --- a/docs/reference/query-dsl/match-query.asciidoc +++ b/docs/reference/query-dsl/match-query.asciidoc @@ -7,12 +7,16 @@ them, and constructs a query. For example: [source,js] -------------------------------------------------- +GET /_search { - "match" : { - "message" : "this is a test" + "query": { + "match" : { + "message" : "this is a test" + } } } -------------------------------------------------- +// CONSOLE Note, `message` is the name of a field, you can substitute the name of any field (including `_all`) instead. @@ -57,15 +61,19 @@ change in structure, `message` is the field name): [source,js] -------------------------------------------------- +GET /_search { - "match" : { - "message" : { - "query" : "this is a test", - "operator" : "and" + "query": { + "match" : { + "message" : { + "query" : "this is a test", + "operator" : "and" + } } } } -------------------------------------------------- +// CONSOLE [[query-dsl-match-query-zero]] ===== Zero terms query @@ -76,16 +84,20 @@ change that the `zero_terms_query` option can be used, which accepts [source,js] -------------------------------------------------- +GET /_search { - "match" : { - "message" : { - "query" : "to be or not to be", - "operator" : "and", - "zero_terms_query": "all" + "query": { + "match" : { + "message" : { + "query" : "to be or not to be", + "operator" : "and", + "zero_terms_query": "all" + } } } } -------------------------------------------------- +// CONSOLE [[query-dsl-match-query-cutoff]] ===== Cutoff frequency @@ -113,16 +125,19 @@ Here is an example showing a query composed of stopwords exclusively: [source,js] -------------------------------------------------- +GET /_search { - "match" : { - "message" : { - "query" : "to be or not to be", - "cutoff_frequency" : 0.001 + "query": { + "match" : { + "message" : { + "query" : "to be or not to be", + "cutoff_frequency" : 0.001 + } } } } -------------------------------------------------- - +// CONSOLE IMPORTANT: The `cutoff_frequency` option operates on a per-shard-level. This means that when trying it out on test indexes with low document numbers you diff --git a/docs/reference/query-dsl/mlt-query.asciidoc b/docs/reference/query-dsl/mlt-query.asciidoc index dc525c2d311..b132b49f234 100644 --- a/docs/reference/query-dsl/mlt-query.asciidoc +++ b/docs/reference/query-dsl/mlt-query.asciidoc @@ -15,15 +15,19 @@ fields, limiting the number of selected terms to 12. [source,js] -------------------------------------------------- +GET /_search { - "more_like_this" : { - "fields" : ["title", "description"], - "like" : "Once upon a time", - "min_term_freq" : 1, - "max_query_terms" : 12 + "query": { + "more_like_this" : { + "fields" : ["title", "description"], + "like" : "Once upon a time", + "min_term_freq" : 1, + "max_query_terms" : 12 + } } } -------------------------------------------------- +// CONSOLE A more complicated use case consists of mixing texts with documents already existing in the index. In this case, the syntax to specify a document is @@ -31,27 +35,31 @@ similar to the one used in the <>. [source,js] -------------------------------------------------- +GET /_search { - "more_like_this" : { - "fields" : ["title", "description"], - "like" : [ - { - "_index" : "imdb", - "_type" : "movies", - "_id" : "1" - }, - { - "_index" : "imdb", - "_type" : "movies", - "_id" : "2" - }, - "and potentially some more text here as well" - ], - "min_term_freq" : 1, - "max_query_terms" : 12 + "query": { + "more_like_this" : { + "fields" : ["title", "description"], + "like" : [ + { + "_index" : "imdb", + "_type" : "movies", + "_id" : "1" + }, + { + "_index" : "imdb", + "_type" : "movies", + "_id" : "2" + }, + "and potentially some more text here as well" + ], + "min_term_freq" : 1, + "max_query_terms" : 12 + } } } -------------------------------------------------- +// CONSOLE Finally, users can mix some texts, a chosen set of documents but also provide documents not necessarily present in the index. To provide documents not @@ -59,32 +67,36 @@ present in the index, the syntax is similar to < - "fields": [ "subject", "message" ] <2> + "query": { + "multi_match" : { + "query": "this is a test", <1> + "fields": [ "subject", "message" ] <2> + } } } -------------------------------------------------- +// CONSOLE <1> The query string. <2> The fields to be queried. @@ -23,26 +27,35 @@ Fields can be specified with wildcards, eg: [source,js] -------------------------------------------------- +GET /_search { - "multi_match" : { - "query": "Will Smith", - "fields": [ "title", "*_name" ] <1> + "query": { + "multi_match" : { + "query": "Will Smith", + "fields": [ "title", "*_name" ] <1> + } } } -------------------------------------------------- +// CONSOLE <1> Query the `title`, `first_name` and `last_name` fields. Individual fields can be boosted with the caret (`^`) notation: [source,js] -------------------------------------------------- +GET /_search { - "multi_match" : { - "query" : "this is a test", - "fields" : [ "subject^3", "message" ] <1> + "query": { + "multi_match" : { + "query" : "this is a test", + "fields" : [ "subject^3", "message" ] <1> + } } } -------------------------------------------------- +// CONSOLE + <1> The `subject` field is three times as important as the `message` field. [[multi-match-types]] @@ -82,30 +95,38 @@ find the single best matching field. For instance, this query: [source,js] -------------------------------------------------- +GET /_search { - "multi_match" : { - "query": "brown fox", - "type": "best_fields", - "fields": [ "subject", "message" ], - "tie_breaker": 0.3 + "query": { + "multi_match" : { + "query": "brown fox", + "type": "best_fields", + "fields": [ "subject", "message" ], + "tie_breaker": 0.3 + } } } -------------------------------------------------- +// CONSOLE would be executed as: [source,js] -------------------------------------------------- +GET /_search { - "dis_max": { - "queries": [ - { "match": { "subject": "brown fox" }}, - { "match": { "message": "brown fox" }} - ], - "tie_breaker": 0.3 + "query": { + "dis_max": { + "queries": [ + { "match": { "subject": "brown fox" }}, + { "match": { "message": "brown fox" }} + ], + "tie_breaker": 0.3 + } } } -------------------------------------------------- +// CONSOLE Normally the `best_fields` type uses the score of the *single* best matching field, but if `tie_breaker` is specified, then it calculates the score as @@ -132,15 +153,20 @@ Take this query for example: [source,js] -------------------------------------------------- +GET /_search { - "multi_match" : { - "query": "Will Smith", - "type": "best_fields", - "fields": [ "first_name", "last_name" ], - "operator": "and" <1> + "query": { + "multi_match" : { + "query": "Will Smith", + "type": "best_fields", + "fields": [ "first_name", "last_name" ], + "operator": "and" <1> + } } } -------------------------------------------------- +// CONSOLE + <1> All terms must be present. This query is executed as: @@ -170,29 +196,37 @@ This query: [source,js] -------------------------------------------------- +GET /_search { - "multi_match" : { - "query": "quick brown fox", - "type": "most_fields", - "fields": [ "title", "title.original", "title.shingles" ] + "query": { + "multi_match" : { + "query": "quick brown fox", + "type": "most_fields", + "fields": [ "title", "title.original", "title.shingles" ] + } } } -------------------------------------------------- +// CONSOLE would be executed as: [source,js] -------------------------------------------------- +GET /_search { - "bool": { - "should": [ - { "match": { "title": "quick brown fox" }}, - { "match": { "title.original": "quick brown fox" }}, - { "match": { "title.shingles": "quick brown fox" }} - ] + "query": { + "bool": { + "should": [ + { "match": { "title": "quick brown fox" }}, + { "match": { "title.original": "quick brown fox" }}, + { "match": { "title.shingles": "quick brown fox" }} + ] + } } } -------------------------------------------------- +// CONSOLE The score from each `match` clause is added together, then divided by the number of `match` clauses. @@ -212,28 +246,36 @@ but they use a `match_phrase` or `match_phrase_prefix` query instead of a This query: [source,js] -------------------------------------------------- +GET /_search { - "multi_match" : { - "query": "quick brown f", - "type": "phrase_prefix", - "fields": [ "subject", "message" ] + "query": { + "multi_match" : { + "query": "quick brown f", + "type": "phrase_prefix", + "fields": [ "subject", "message" ] + } } } -------------------------------------------------- +// CONSOLE would be executed as: [source,js] -------------------------------------------------- +GET /_search { - "dis_max": { - "queries": [ - { "match_phrase_prefix": { "subject": "quick brown f" }}, - { "match_phrase_prefix": { "message": "quick brown f" }} - ] + "query": { + "dis_max": { + "queries": [ + { "match_phrase_prefix": { "subject": "quick brown f" }}, + { "match_phrase_prefix": { "message": "quick brown f" }} + ] + } } } -------------------------------------------------- +// CONSOLE Also, accepts `analyzer`, `boost`, `slop` and `zero_terms_query` as explained in <>. Type `phrase_prefix` additionally accepts @@ -288,15 +330,19 @@ A query like: [source,js] -------------------------------------------------- +GET /_search { - "multi_match" : { - "query": "Will Smith", - "type": "cross_fields", - "fields": [ "first_name", "last_name" ], - "operator": "and" + "query": { + "multi_match" : { + "query": "Will Smith", + "type": "cross_fields", + "fields": [ "first_name", "last_name" ], + "operator": "and" + } } } -------------------------------------------------- +// CONSOLE is executed as: @@ -344,17 +390,21 @@ both use an `edge_ngram` analyzer, this query: [source,js] -------------------------------------------------- +GET /_search { - "multi_match" : { - "query": "Jon", - "type": "cross_fields", - "fields": [ + "query": { + "multi_match" : { + "query": "Jon", + "type": "cross_fields", + "fields": [ "first", "first.edge", "last", "last.edge" - ] + ] + } } } -------------------------------------------------- +// CONSOLE would be executed as: @@ -379,28 +429,33 @@ parameter to just one of them: [source,js] -------------------------------------------------- +GET /_search { + "query": { "bool": { - "should": [ - { - "multi_match" : { - "query": "Will Smith", - "type": "cross_fields", - "fields": [ "first", "last" ], - "minimum_should_match": "50%" <1> - } - }, - { - "multi_match" : { - "query": "Will Smith", - "type": "cross_fields", - "fields": [ "*.edge" ] - } - } - ] + "should": [ + { + "multi_match" : { + "query": "Will Smith", + "type": "cross_fields", + "fields": [ "first", "last" ], + "minimum_should_match": "50%" <1> + } + }, + { + "multi_match" : { + "query": "Will Smith", + "type": "cross_fields", + "fields": [ "*.edge" ] + } + } + ] } + } } -------------------------------------------------- +// CONSOLE + <1> Either `will` or `smith` must be present in either of the `first` or `last` fields @@ -409,15 +464,20 @@ parameter in the query. [source,js] -------------------------------------------------- +GET /_search { - "multi_match" : { - "query": "Jon", - "type": "cross_fields", - "analyzer": "standard", <1> - "fields": [ "first", "last", "*.edge" ] + "query": { + "multi_match" : { + "query": "Jon", + "type": "cross_fields", + "analyzer": "standard", <1> + "fields": [ "first", "last", "*.edge" ] + } } } -------------------------------------------------- +// CONSOLE + <1> Use the `standard` analyzer for all fields. which will be executed as: diff --git a/docs/reference/query-dsl/nested-query.asciidoc b/docs/reference/query-dsl/nested-query.asciidoc index 0b861509c0e..06720552bde 100644 --- a/docs/reference/query-dsl/nested-query.asciidoc +++ b/docs/reference/query-dsl/nested-query.asciidoc @@ -10,40 +10,45 @@ will work with: [source,js] -------------------------------------------------- +PUT /my_index { - "type1" : { - "properties" : { - "obj1" : { - "type" : "nested" + "mappings": { + "type1" : { + "properties" : { + "obj1" : { + "type" : "nested" + } } } } } -------------------------------------------------- +// CONSOLE +// TESTSETUP And here is a sample nested query usage: [source,js] -------------------------------------------------- +GET /_search { - "nested" : { - "path" : "obj1", - "score_mode" : "avg", - "query" : { - "bool" : { - "must" : [ - { - "match" : {"obj1.name" : "blue"} - }, - { - "range" : {"obj1.count" : {"gt" : 5}} - } - ] + "query": { + "nested" : { + "path" : "obj1", + "score_mode" : "avg", + "query" : { + "bool" : { + "must" : [ + { "match" : {"obj1.name" : "blue"} }, + { "range" : {"obj1.count" : {"gt" : 5}} } + ] + } } } } } -------------------------------------------------- +// CONSOLE The query `path` points to the nested object path, and the `query` includes the query that will run on the nested docs matching the diff --git a/docs/reference/query-dsl/parent-id-query.asciidoc b/docs/reference/query-dsl/parent-id-query.asciidoc index 1aef5b1948f..10cf6d05664 100644 --- a/docs/reference/query-dsl/parent-id-query.asciidoc +++ b/docs/reference/query-dsl/parent-id-query.asciidoc @@ -3,17 +3,48 @@ added[5.0.0] -The `parent_id` query can be used to find child documents which belong to a particular parent: +The `parent_id` query can be used to find child documents which belong to a +particular parent. Given the following mapping definition: [source,js] -------------------------------------------------- +PUT /my_index { - "parent_id" : { - "type" : "blog_tag", - "id" : "1" + "mappings": { + "blog_post": { + "properties": { + "name": { + "type": "keyword" + } + } + }, + "blog_tag": { + "_parent": { + "type": "blog_post" + }, + "_routing": { + "required": true + } + } } } -------------------------------------------------- +// CONSOLE +// TESTSETUP + +[source,js] +-------------------------------------------------- +GET /_search +{ + "query": { + "parent_id" : { + "type" : "blog_tag", + "id" : "1" + } + } +} +-------------------------------------------------- +// CONSOLE The above is functionally equivalent to using the following <> query, but performs @@ -21,17 +52,21 @@ better as it does not need to do a join: [source,js] -------------------------------------------------- +GET /my_index/_search { - "has_parent": { - "type": "blog", "query": { - "term": { - "_id": "1" - } + "has_parent": { + "type": "blog_post", + "query": { + "term": { + "_id": "1" + } + } + } } - } } -------------------------------------------------- +// CONSOLE ==== Parameters diff --git a/docs/reference/query-dsl/percolate-query.asciidoc b/docs/reference/query-dsl/percolate-query.asciidoc index 267647c9dbb..59d38f101ad 100644 --- a/docs/reference/query-dsl/percolate-query.asciidoc +++ b/docs/reference/query-dsl/percolate-query.asciidoc @@ -13,26 +13,27 @@ Create an index with two mappings: [source,js] -------------------------------------------------- -curl -XPUT "http://localhost:9200/my-index" -d' +PUT /my-index { - "mappings": { - "doctype": { - "properties": { - "message": { - "type": "string" + "mappings": { + "doctype": { + "properties": { + "message": { + "type": "string" + } + } + }, + "queries": { + "properties": { + "query": { + "type": "percolator" + } + } } - } - }, - "queries": { - "properties": { - "query": { - "type": "percolator" - } - } } - } -}' +} -------------------------------------------------- +// CONSOLE The `doctype` mapping is the mapping used to preprocess the document defined in the `percolator` query before it @@ -50,20 +51,24 @@ Register a query in the percolator: [source,js] -------------------------------------------------- -curl -XPUT 'localhost:9200/my-index/queries/1' -d '{ +PUT /my-index/queries/1 +{ "query" : { "match" : { "message" : "bonsai tree" } } -}' +} -------------------------------------------------- +// CONSOLE +// TEST[continued] Match a document to the registered percolator queries: [source,js] -------------------------------------------------- -curl -XGET 'localhost:9200/my-index/_search' -d '{ +GET /my-index/_search +{ "query" : { "percolate" : { "field" : "query", @@ -73,8 +78,10 @@ curl -XGET 'localhost:9200/my-index/_search' -d '{ } } } -}' +} -------------------------------------------------- +// CONSOLE +// TEST[continued] The above request will yield the following response: @@ -151,12 +158,13 @@ Index the document we want to percolate: [source,js] -------------------------------------------------- -curl -XPUT "http://localhost:9200/my-index/message/1" -d' +PUT /my-index/message/1 { "message" : "A new bonsai tree in the office" -}' +} -------------------------------------------------- - +// CONSOLE +// TEST[continued] Index response: [source,js] @@ -179,7 +187,7 @@ Percolating an existing document, using the index response as basis to build to [source,js] -------------------------------------------------- -curl -XGET "http://localhost:9200/my-index/_search" -d' +GET /my-index/_search { "query" : { "percolate" : { @@ -191,8 +199,10 @@ curl -XGET "http://localhost:9200/my-index/_search" -d' "version" : 1 <1> } } -}' +} -------------------------------------------------- +// CONSOLE +// TEST[continued] <1> The version is optional, but useful in certain cases. We can then ensure that we are try to percolate the document we just have indexed. A change may be made after we have indexed, and if that is the @@ -216,35 +226,39 @@ Save a query: [source,js] -------------------------------------------------- -curl -XPUT "http://localhost:9200/my-index/queries/1" -d' +PUT /my-index/queries/1 { "query" : { "match" : { "message" : "brown fox" } } -}' +} -------------------------------------------------- +// CONSOLE +// TEST[continued] Save another query: [source,js] -------------------------------------------------- -curl -XPUT "http://localhost:9200/my-index/queries/2" -d' +PUT /my-index/queries/2 { "query" : { "match" : { "message" : "lazy dog" } } -}' +} -------------------------------------------------- +// CONSOLE +// TEST[continued] Execute a search request with the `percolate` query and highlighting enabled: [source,js] -------------------------------------------------- -curl -XGET "http://localhost:9200/my-index/_search" -d' +GET /my-index/_search { "query" : { "percolate" : { @@ -260,8 +274,10 @@ curl -XGET "http://localhost:9200/my-index/_search" -d' "message": {} } } -}' +} -------------------------------------------------- +// CONSOLE +// TEST[continued] This will yield the following response. @@ -336,4 +352,4 @@ that are registered to the index that the search request is targeted for, are go in-memory index. This happens on each shard the search request needs to execute. By using `routing` or additional queries the amount of percolator queries that need to be executed can be reduced and thus -the time the search API needs to run can be decreased. \ No newline at end of file +the time the search API needs to run can be decreased. diff --git a/docs/reference/query-dsl/prefix-query.asciidoc b/docs/reference/query-dsl/prefix-query.asciidoc index cf26e850ad8..d2b75d10e5f 100644 --- a/docs/reference/query-dsl/prefix-query.asciidoc +++ b/docs/reference/query-dsl/prefix-query.asciidoc @@ -8,28 +8,37 @@ that starts with `ki`: [source,js] -------------------------------------------------- -{ +GET /_search +{ "query": { "prefix" : { "user" : "ki" } + } } -------------------------------------------------- +// CONSOLE A boost can also be associated with the query: [source,js] -------------------------------------------------- -{ +GET /_search +{ "query": { "prefix" : { "user" : { "value" : "ki", "boost" : 2.0 } } + } } -------------------------------------------------- +// CONSOLE Or : [source,js] -------------------------------------------------- -{ +GET /_search +{ "query": { "prefix" : { "user" : { "prefix" : "ki", "boost" : 2.0 } } + } } -------------------------------------------------- +// CONSOLE This multi term query allows you to control how it gets rewritten using the <> diff --git a/docs/reference/query-dsl/query-string-query.asciidoc b/docs/reference/query-dsl/query-string-query.asciidoc index 9ad68ad4f73..60477d6e28a 100644 --- a/docs/reference/query-dsl/query-string-query.asciidoc +++ b/docs/reference/query-dsl/query-string-query.asciidoc @@ -6,13 +6,17 @@ an example: [source,js] -------------------------------------------------- +GET /_search { - "query_string" : { - "default_field" : "content", - "query" : "this AND that OR thus" + "query": { + "query_string" : { + "default_field" : "content", + "query" : "this AND that OR thus" + } } } -------------------------------------------------- +// CONSOLE The `query_string` top level parameters include: @@ -113,25 +117,33 @@ For example, the following query [source,js] -------------------------------------------------- +GET /_search { - "query_string" : { - "fields" : ["content", "name"], - "query" : "this AND that" + "query": { + "query_string" : { + "fields" : ["content", "name"], + "query" : "this AND that" + } } } -------------------------------------------------- +// CONSOLE matches the same words as [source,js] -------------------------------------------------- +GET /_search { - "query_string": { - "query": "(content:this OR name:this) AND (content:that OR name:that)" + "query": { + "query_string": { + "query": "(content:this OR name:this) AND (content:that OR name:that)" + } } } -------------------------------------------------- +// CONSOLE Since several queries are generated from the individual search terms, combining them can be automatically done using either a `dis_max` query or a @@ -140,14 +152,18 @@ notation): [source,js] -------------------------------------------------- +GET /_search { - "query_string" : { - "fields" : ["content", "name^5"], - "query" : "this AND that OR thus", - "use_dis_max" : true + "query": { + "query_string" : { + "fields" : ["content", "name^5"], + "query" : "this AND that OR thus", + "use_dis_max" : true + } } } -------------------------------------------------- +// CONSOLE Simple wildcard can also be used to search "within" specific inner elements of the document. For example, if we have a `city` object with @@ -156,14 +172,18 @@ search on all "city" fields: [source,js] -------------------------------------------------- +GET /_search { - "query_string" : { - "fields" : ["city.*"], - "query" : "this AND that OR thus", - "use_dis_max" : true + "query": { + "query_string" : { + "fields" : ["city.*"], + "query" : "this AND that OR thus", + "use_dis_max" : true + } } } -------------------------------------------------- +// CONSOLE Another option is to provide the wildcard fields search in the query string itself (properly escaping the `*` sign), for example: @@ -188,13 +208,17 @@ introduced fields included). For example: [source,js] -------------------------------------------------- +GET /_search { - "query_string" : { - "fields" : ["content", "name.*^5"], - "query" : "this AND that OR thus", - "use_dis_max" : true + "query": { + "query_string" : { + "fields" : ["content", "name.*^5"], + "query" : "this AND that OR thus", + "use_dis_max" : true + } } } -------------------------------------------------- +// CONSOLE include::query-string-syntax.asciidoc[] diff --git a/docs/reference/query-dsl/query_filter_context.asciidoc b/docs/reference/query-dsl/query_filter_context.asciidoc index 6fadc36aa73..79f8c4bd960 100644 --- a/docs/reference/query-dsl/query_filter_context.asciidoc +++ b/docs/reference/query-dsl/query_filter_context.asciidoc @@ -47,7 +47,7 @@ conditions are met: [source,js] ------------------------------------ -GET _search +GET /_search { "query": { <1> "bool": { <2> @@ -63,6 +63,7 @@ GET _search } } ------------------------------------ +// CONSOLE <1> The `query` parameter indicates query context. <2> The `bool` and two `match` clauses are used in query context, which means that they are used to score how well each document diff --git a/docs/reference/query-dsl/range-query.asciidoc b/docs/reference/query-dsl/range-query.asciidoc index eaf1dca8181..a0005ff3ff2 100644 --- a/docs/reference/query-dsl/range-query.asciidoc +++ b/docs/reference/query-dsl/range-query.asciidoc @@ -9,16 +9,20 @@ a `NumericRangeQuery`. The following example returns all documents where [source,js] -------------------------------------------------- +GET _search { - "range" : { - "age" : { - "gte" : 10, - "lte" : 20, - "boost" : 2.0 + "query": { + "range" : { + "age" : { + "gte" : 10, + "lte" : 20, + "boost" : 2.0 + } } } } -------------------------------------------------- +// CONSOLE The `range` query accepts the following parameters: @@ -38,15 +42,19 @@ specified using <>: [source,js] -------------------------------------------------- +GET _search { - "range" : { - "date" : { - "gte" : "now-1d/d", - "lt" : "now/d" + "query": { + "range" : { + "date" : { + "gte" : "now-1d/d", + "lt" : "now/d" + } } } } -------------------------------------------------- +// CONSOLE ===== Date math and rounding @@ -86,16 +94,20 @@ passing the `format` parameter to the `range` query: [source,js] -------------------------------------------------- +GET _search { - "range" : { - "born" : { - "gte": "01/01/2012", - "lte": "2013", - "format": "dd/MM/yyyy||yyyy" + "query": { + "range" : { + "born" : { + "gte": "01/01/2012", + "lte": "2013", + "format": "dd/MM/yyyy||yyyy" + } } } } -------------------------------------------------- +// CONSOLE ===== Time zone in range queries @@ -105,15 +117,19 @@ accepts it), or it can be specified as the `time_zone` parameter: [source,js] -------------------------------------------------- +GET _search { - "range" : { - "timestamp" : { - "gte": "2015-01-01 00:00:00", <1> - "lte": "now", <2> - "time_zone": "+01:00" + "query": { + "range" : { + "timestamp" : { + "gte": "2015-01-01 00:00:00", <1> + "lte": "now", <2> + "time_zone": "+01:00" + } } } } -------------------------------------------------- +// CONSOLE <1> This date will be converted to `2014-12-31T23:00:00 UTC`. <2> `now` is not affected by the `time_zone` parameter (dates must be stored as UTC). diff --git a/docs/reference/query-dsl/regexp-query.asciidoc b/docs/reference/query-dsl/regexp-query.asciidoc index 692caf43480..2d57f1d7dd0 100644 --- a/docs/reference/query-dsl/regexp-query.asciidoc +++ b/docs/reference/query-dsl/regexp-query.asciidoc @@ -15,40 +15,52 @@ matchers like `.*?+` will mostly lower performance. [source,js] -------------------------------------------------- +GET /_search { - "regexp":{ - "name.first": "s.*y" + "query": { + "regexp":{ + "name.first": "s.*y" + } } } -------------------------------------------------- +// CONSOLE Boosting is also supported [source,js] -------------------------------------------------- +GET /_search { - "regexp":{ - "name.first":{ - "value":"s.*y", - "boost":1.2 + "query": { + "regexp":{ + "name.first":{ + "value":"s.*y", + "boost":1.2 + } } } } -------------------------------------------------- +// CONSOLE You can also use special flags [source,js] -------------------------------------------------- +GET /_search { - "regexp":{ - "name.first": { - "value": "s.*y", - "flags" : "INTERSECTION|COMPLEMENT|EMPTY" + "query": { + "regexp":{ + "name.first": { + "value": "s.*y", + "flags" : "INTERSECTION|COMPLEMENT|EMPTY" + } } } } -------------------------------------------------- +// CONSOLE Possible flags are `ALL` (default), `ANYSTRING`, `COMPLEMENT`, `EMPTY`, `INTERSECTION`, `INTERVAL`, or `NONE`. Please check the @@ -64,16 +76,19 @@ this limit to allow more complex regular expressions to execute. [source,js] -------------------------------------------------- +GET /_search { - "regexp":{ - "name.first": { - "value": "s.*y", - "flags" : "INTERSECTION|COMPLEMENT|EMPTY", - "max_determinized_states": 20000 + "query": { + "regexp":{ + "name.first": { + "value": "s.*y", + "flags" : "INTERSECTION|COMPLEMENT|EMPTY", + "max_determinized_states": 20000 + } } } } -------------------------------------------------- - +// CONSOLE include::regexp-syntax.asciidoc[] diff --git a/docs/reference/query-dsl/script-query.asciidoc b/docs/reference/query-dsl/script-query.asciidoc index 223460f723d..ee06a1b64bd 100644 --- a/docs/reference/query-dsl/script-query.asciidoc +++ b/docs/reference/query-dsl/script-query.asciidoc @@ -7,17 +7,20 @@ context, for example: [source,js] ---------------------------------------------- -"bool" : { - "must" : { - ... - }, - "filter" : { - "script" : { - "script" : "doc['num1'].value > 1" +GET /_search +{ + "query": { + "bool" : { + "must" : { + "script" : { + "script" : "doc['num1'].value > 1" + } + } } } } ---------------------------------------------- +// CONSOLE [float] ==== Custom Parameters @@ -28,20 +31,23 @@ to use the ability to pass parameters to the script itself, for example: [source,js] ---------------------------------------------- -"bool" : { - "must" : { - ... - }, - "filter" : { - "script" : { - "script" : { - "inline" : "doc['num1'].value > param1" - "params" : { - "param1" : 5 +GET /_search +{ + "query": { + "bool" : { + "must" : { + "script" : { + "script" : { + "inline" : "doc['num1'].value > param1", + "params" : { + "param1" : 5 + } + } } } } } } ---------------------------------------------- +// CONSOLE diff --git a/docs/reference/query-dsl/simple-query-string-query.asciidoc b/docs/reference/query-dsl/simple-query-string-query.asciidoc index 572c0661fa4..796f2517fea 100644 --- a/docs/reference/query-dsl/simple-query-string-query.asciidoc +++ b/docs/reference/query-dsl/simple-query-string-query.asciidoc @@ -8,15 +8,19 @@ an example: [source,js] -------------------------------------------------- +GET /_search { + "query": { "simple_query_string" : { "query": "\"fried eggs\" +(eggplant | potato) -frittata", "analyzer": "snowball", "fields": ["body^5","_all"], "default_operator": "and" } + } } -------------------------------------------------- +// CONSOLE The `simple_query_string` top level parameters include: @@ -94,13 +98,17 @@ introduced fields included). For example: [source,js] -------------------------------------------------- +GET /_search { - "simple_query_string" : { - "fields" : ["content", "name.*^5"], - "query" : "foo bar baz" + "query": { + "simple_query_string" : { + "fields" : ["content", "name.*^5"], + "query" : "foo bar baz" + } } } -------------------------------------------------- +// CONSOLE [float] ==== Flags @@ -110,13 +118,17 @@ should be enabled. It is specified as a `|`-delimited string with the [source,js] -------------------------------------------------- +GET /_search { - "simple_query_string" : { - "query" : "foo | bar + baz*", - "flags" : "OR|AND|PREFIX" + "query": { + "simple_query_string" : { + "query" : "foo | bar + baz*", + "flags" : "OR|AND|PREFIX" + } } } -------------------------------------------------- +// CONSOLE The available flags are: `ALL`, `NONE`, `AND`, `OR`, `NOT`, `PREFIX`, `PHRASE`, `PRECEDENCE`, `ESCAPE`, `WHITESPACE`, `FUZZY`, `NEAR`, and `SLOP`. diff --git a/docs/reference/query-dsl/span-containing-query.asciidoc b/docs/reference/query-dsl/span-containing-query.asciidoc index 965bf855b6f..638c6999233 100644 --- a/docs/reference/query-dsl/span-containing-query.asciidoc +++ b/docs/reference/query-dsl/span-containing-query.asciidoc @@ -6,24 +6,28 @@ query maps to Lucene `SpanContainingQuery`. Here is an example: [source,js] -------------------------------------------------- +GET /_search { - "span_containing" : { - "little" : { - "span_term" : { "field1" : "foo" } - }, - "big" : { - "span_near" : { - "clauses" : [ - { "span_term" : { "field1" : "bar" } }, - { "span_term" : { "field1" : "baz" } } - ], - "slop" : 5, - "in_order" : true + "query": { + "span_containing" : { + "little" : { + "span_term" : { "field1" : "foo" } + }, + "big" : { + "span_near" : { + "clauses" : [ + { "span_term" : { "field1" : "bar" } }, + { "span_term" : { "field1" : "baz" } } + ], + "slop" : 5, + "in_order" : true + } } } } } -------------------------------------------------- +// CONSOLE The `big` and `little` clauses can be any span type query. Matching spans from `big` that contain matches from `little` are returned. diff --git a/docs/reference/query-dsl/span-first-query.asciidoc b/docs/reference/query-dsl/span-first-query.asciidoc index 74fe7ff88ba..dba7932661d 100644 --- a/docs/reference/query-dsl/span-first-query.asciidoc +++ b/docs/reference/query-dsl/span-first-query.asciidoc @@ -6,15 +6,19 @@ to Lucene `SpanFirstQuery`. Here is an example: [source,js] -------------------------------------------------- +GET /_search { - "span_first" : { - "match" : { - "span_term" : { "user" : "kimchy" } - }, - "end" : 3 + "query": { + "span_first" : { + "match" : { + "span_term" : { "user" : "kimchy" } + }, + "end" : 3 + } } } -------------------------------------------------- +// CONSOLE The `match` clause can be any other span type query. The `end` controls the maximum end position permitted in a match. diff --git a/docs/reference/query-dsl/span-multi-term-query.asciidoc b/docs/reference/query-dsl/span-multi-term-query.asciidoc index af3da5cf7dd..3d1672753d2 100644 --- a/docs/reference/query-dsl/span-multi-term-query.asciidoc +++ b/docs/reference/query-dsl/span-multi-term-query.asciidoc @@ -7,24 +7,32 @@ it can be nested. Example: [source,js] -------------------------------------------------- +GET /_search { - "span_multi":{ - "match":{ - "prefix" : { "user" : { "value" : "ki" } } + "query": { + "span_multi":{ + "match":{ + "prefix" : { "user" : { "value" : "ki" } } + } } } } -------------------------------------------------- +// CONSOLE A boost can also be associated with the query: [source,js] -------------------------------------------------- +GET /_search { - "span_multi":{ - "match":{ - "prefix" : { "user" : { "value" : "ki", "boost" : 1.08 } } + "query": { + "span_multi":{ + "match":{ + "prefix" : { "user" : { "value" : "ki", "boost" : 1.08 } } + } } } } -------------------------------------------------- +// CONSOLE diff --git a/docs/reference/query-dsl/span-near-query.asciidoc b/docs/reference/query-dsl/span-near-query.asciidoc index 258bc3b51ad..e69be783e3d 100644 --- a/docs/reference/query-dsl/span-near-query.asciidoc +++ b/docs/reference/query-dsl/span-near-query.asciidoc @@ -8,18 +8,22 @@ matches are required to be in-order. The span near query maps to Lucene [source,js] -------------------------------------------------- +GET /_search { - "span_near" : { - "clauses" : [ - { "span_term" : { "field" : "value1" } }, - { "span_term" : { "field" : "value2" } }, - { "span_term" : { "field" : "value3" } } - ], - "slop" : 12, - "in_order" : false + "query": { + "span_near" : { + "clauses" : [ + { "span_term" : { "field" : "value1" } }, + { "span_term" : { "field" : "value2" } }, + { "span_term" : { "field" : "value3" } } + ], + "slop" : 12, + "in_order" : false + } } } -------------------------------------------------- +// CONSOLE The `clauses` element is a list of one or more other span type queries and the `slop` controls the maximum number of intervening unmatched diff --git a/docs/reference/query-dsl/span-not-query.asciidoc b/docs/reference/query-dsl/span-not-query.asciidoc index 73186985b0d..5a648bd4b0e 100644 --- a/docs/reference/query-dsl/span-not-query.asciidoc +++ b/docs/reference/query-dsl/span-not-query.asciidoc @@ -6,24 +6,28 @@ query maps to Lucene `SpanNotQuery`. Here is an example: [source,js] -------------------------------------------------- +GET /_search { - "span_not" : { - "include" : { - "span_term" : { "field1" : "hoya" } - }, - "exclude" : { - "span_near" : { - "clauses" : [ - { "span_term" : { "field1" : "la" } }, - { "span_term" : { "field1" : "hoya" } } - ], - "slop" : 0, - "in_order" : true + "query": { + "span_not" : { + "include" : { + "span_term" : { "field1" : "hoya" } + }, + "exclude" : { + "span_near" : { + "clauses" : [ + { "span_term" : { "field1" : "la" } }, + { "span_term" : { "field1" : "hoya" } } + ], + "slop" : 0, + "in_order" : true + } } } } } -------------------------------------------------- +// CONSOLE The `include` and `exclude` clauses can be any span type query. The `include` clause is the span query whose matches are filtered, and the diff --git a/docs/reference/query-dsl/span-or-query.asciidoc b/docs/reference/query-dsl/span-or-query.asciidoc index 72a4ce8724b..470935d6f5c 100644 --- a/docs/reference/query-dsl/span-or-query.asciidoc +++ b/docs/reference/query-dsl/span-or-query.asciidoc @@ -6,15 +6,19 @@ Matches the union of its span clauses. The span or query maps to Lucene [source,js] -------------------------------------------------- +GET /_search { - "span_or" : { - "clauses" : [ - { "span_term" : { "field" : "value1" } }, - { "span_term" : { "field" : "value2" } }, - { "span_term" : { "field" : "value3" } } - ] + "query": { + "span_or" : { + "clauses" : [ + { "span_term" : { "field" : "value1" } }, + { "span_term" : { "field" : "value2" } }, + { "span_term" : { "field" : "value3" } } + ] + } } } -------------------------------------------------- +// CONSOLE The `clauses` element is a list of one or more other span type queries. diff --git a/docs/reference/query-dsl/span-term-query.asciidoc b/docs/reference/query-dsl/span-term-query.asciidoc index 9de86d48684..1b12a3c35f7 100644 --- a/docs/reference/query-dsl/span-term-query.asciidoc +++ b/docs/reference/query-dsl/span-term-query.asciidoc @@ -6,25 +6,37 @@ Matches spans containing a term. The span term query maps to Lucene [source,js] -------------------------------------------------- +GET /_search { - "span_term" : { "user" : "kimchy" } + "query": { + "span_term" : { "user" : "kimchy" } + } } -------------------------------------------------- +// CONSOLE A boost can also be associated with the query: [source,js] -------------------------------------------------- +GET /_search { - "span_term" : { "user" : { "value" : "kimchy", "boost" : 2.0 } } + "query": { + "span_term" : { "user" : { "value" : "kimchy", "boost" : 2.0 } } + } } -------------------------------------------------- +// CONSOLE Or : [source,js] -------------------------------------------------- +GET /_search { - "span_term" : { "user" : { "term" : "kimchy", "boost" : 2.0 } } + "query": { + "span_term" : { "user" : { "term" : "kimchy", "boost" : 2.0 } } + } } -------------------------------------------------- +// CONSOLE diff --git a/docs/reference/query-dsl/span-within-query.asciidoc b/docs/reference/query-dsl/span-within-query.asciidoc index dc5c4bbfdfd..b70835c4134 100644 --- a/docs/reference/query-dsl/span-within-query.asciidoc +++ b/docs/reference/query-dsl/span-within-query.asciidoc @@ -6,24 +6,28 @@ query maps to Lucene `SpanWithinQuery`. Here is an example: [source,js] -------------------------------------------------- +GET /_search { - "span_within" : { - "little" : { - "span_term" : { "field1" : "foo" } - }, - "big" : { - "span_near" : { - "clauses" : [ - { "span_term" : { "field1" : "bar" } }, - { "span_term" : { "field1" : "baz" } } - ], - "slop" : 5, - "in_order" : true + "query": { + "span_within" : { + "little" : { + "span_term" : { "field1" : "foo" } + }, + "big" : { + "span_near" : { + "clauses" : [ + { "span_term" : { "field1" : "bar" } }, + { "span_term" : { "field1" : "baz" } } + ], + "slop" : 5, + "in_order" : true + } } } } } -------------------------------------------------- +// CONSOLE The `big` and `little` clauses can be any span type query. Matching spans from `little` that are enclosed within `big` are returned. diff --git a/docs/reference/query-dsl/template-query.asciidoc b/docs/reference/query-dsl/template-query.asciidoc index 35365e6f9b2..f66dbe56d3e 100644 --- a/docs/reference/query-dsl/template-query.asciidoc +++ b/docs/reference/query-dsl/template-query.asciidoc @@ -19,8 +19,8 @@ GET /_search } } } - ------------------------------------------ +// CONSOLE The above request is translated into: @@ -34,8 +34,8 @@ GET /_search } } } - ------------------------------------------ +// CONSOLE Alternatively passing the template as an escaped string works as well: @@ -53,6 +53,8 @@ GET /_search } } ------------------------------------------ +// CONSOLE + <1> New line characters (`\n`) should be escaped as `\\n` or removed, and quotes (`"`) should be escaped as `\\"`. @@ -77,6 +79,8 @@ GET /_search } } ------------------------------------------ +// CONSOLE + <1> Name of the query template in `config/scripts/`, i.e., `my_template.mustache`. Alternatively, you can register a query template in the cluster state with: @@ -85,9 +89,10 @@ Alternatively, you can register a query template in the cluster state with: ------------------------------------------ PUT /_search/template/my_template { - "template": { "match": { "text": "{{query_string}}" }}, + "template": { "match": { "text": "{{query_string}}" }} } ------------------------------------------ +// CONSOLE and refer to it in the `template` query with the `id` parameter: @@ -106,9 +111,13 @@ GET /_search } } ------------------------------------------ +// CONSOLE +// TEST[continued] + <1> Name of the query template in `config/scripts/`, i.e., `my_template.mustache`. There is also a dedicated `template` endpoint, allows you to template an entire search request. Please see <> for more details. + diff --git a/docs/reference/query-dsl/terms-query.asciidoc b/docs/reference/query-dsl/terms-query.asciidoc index 08df1e6fece..e00c18bb56f 100644 --- a/docs/reference/query-dsl/terms-query.asciidoc +++ b/docs/reference/query-dsl/terms-query.asciidoc @@ -6,14 +6,18 @@ Filters documents that have fields that match any of the provided terms [source,js] -------------------------------------------------- +GET /_search { - "constant_score" : { - "filter" : { - "terms" : { "user" : ["kimchy", "elasticsearch"]} + "query": { + "constant_score" : { + "filter" : { + "terms" : { "user" : ["kimchy", "elasticsearch"]} + } } } } -------------------------------------------------- +// CONSOLE The `terms` query is also aliased with `in` as the filter name for simpler usage deprecated[5.0.0,use `terms` instead]. @@ -63,33 +67,37 @@ possible, reducing the need for networking. [float] ===== Terms lookup twitter example +At first we index the information for user with id 2, specifically, its +followers, than index a tweet from user with id 1. Finally we search on +all the tweets that match the followers of user 2. [source,js] -------------------------------------------------- -# index the information for user with id 2, specifically, its followers -curl -XPUT localhost:9200/users/user/2 -d '{ - "followers" : ["1", "3"] -}' +PUT /users/user/2 +{ + "followers" : ["1", "3"] +} -# index a tweet, from user with id 1 -curl -XPUT localhost:9200/tweets/tweet/1 -d '{ - "user" : "1" -}' +PUT /tweets/tweet/1 +{ + "user" : "1" +} -# search on all the tweets that match the followers of user 2 -curl -XGET localhost:9200/tweets/_search -d '{ - "query" : { - "terms" : { - "user" : { - "index" : "users", - "type" : "user", - "id" : "2", - "path" : "followers" - } +GET /tweets/_search +{ + "query" : { + "terms" : { + "user" : { + "index" : "users", + "type" : "user", + "id" : "2", + "path" : "followers" + } + } } - } -}' +} -------------------------------------------------- +// CONSOLE The structure of the external terms document can also include array of inner objects, for example: diff --git a/docs/reference/query-dsl/type-query.asciidoc b/docs/reference/query-dsl/type-query.asciidoc index d3ef1a30fb1..05e909bc366 100644 --- a/docs/reference/query-dsl/type-query.asciidoc +++ b/docs/reference/query-dsl/type-query.asciidoc @@ -5,9 +5,13 @@ Filters documents matching the provided document / mapping type. [source,js] -------------------------------------------------- +GET /_search { - "type" : { - "value" : "my_type" + "query": { + "type" : { + "value" : "my_type" + } } } -------------------------------------------------- +// CONSOLE diff --git a/docs/reference/query-dsl/wildcard-query.asciidoc b/docs/reference/query-dsl/wildcard-query.asciidoc index d72dbec2481..ad82c029d8c 100644 --- a/docs/reference/query-dsl/wildcard-query.asciidoc +++ b/docs/reference/query-dsl/wildcard-query.asciidoc @@ -11,28 +11,40 @@ query maps to Lucene `WildcardQuery`. [source,js] -------------------------------------------------- +GET /_search { - "wildcard" : { "user" : "ki*y" } + "query": { + "wildcard" : { "user" : "ki*y" } + } } -------------------------------------------------- +// CONSOLE A boost can also be associated with the query: [source,js] -------------------------------------------------- +GET /_search { - "wildcard" : { "user" : { "value" : "ki*y", "boost" : 2.0 } } + "query": { + "wildcard" : { "user" : { "value" : "ki*y", "boost" : 2.0 } } + } } -------------------------------------------------- +// CONSOLE Or : [source,js] -------------------------------------------------- +GET /_search { - "wildcard" : { "user" : { "wildcard" : "ki*y", "boost" : 2.0 } } + "query": { + "wildcard" : { "user" : { "wildcard" : "ki*y", "boost" : 2.0 } } + } } -------------------------------------------------- +// CONSOLE This multi term query allows to control how it gets rewritten using the <>