| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 | [[query-dsl-simple-query-string-query]]=== Simple query string query++++<titleabbrev>Simple query string</titleabbrev>++++Returns documents based on a provided query string, using a parser with alimited but fault-tolerant syntax.This query uses a <<simple-query-string-syntax,simple syntax>> to parse andsplit the provided query string into terms based on special operators. The querythen <<analysis,analyzes>> each term independently before returning matchingdocuments.While its syntax is more limited than the<<query-dsl-query-string-query,`query_string` query>>, the `simple_query_string`query does not return errors for invalid syntax. Instead, it ignores any invalidparts of the query string.[[simple-query-string-query-ex-request]]==== Example request[source,js]--------------------------------------------------GET /_search{  "query": {    "simple_query_string" : {        "query": "\"fried eggs\" +(eggplant | potato) -frittata",        "fields": ["title^5", "body"],        "default_operator": "and"    }  }}--------------------------------------------------// CONSOLE[[simple-query-string-top-level-params]]==== Top-level parameters for `simple_query_string``query`::(Required, string) Query string you wish to parse and use for search. See <<simple-query-string-syntax>>.`fields`::+--(Optional, array of strings) Array of fields you wish to search.This field accepts wildcard expressions. You also can boost relevance scores formatches to particular fields using a caret (`^`) notation. See<<simple-query-string-boost>> for examples.Defaults to the `index.query.default_field` index setting, which has a defaultvalue of `*`. The `*` value extracts all fields that are eligible to termqueries and filters the metadata fields. All extracted fields are then combinedto build a query if no `prefix` is specified.WARNING: There is a limit on the number of fields that can be queried at once.It is defined by the `indices.query.bool.max_clause_count`<<search-settings,search setting>>, which defaults to `1024`.--`default_operator`::+--(Optional, string) Default boolean logic used to interpret text in the querystring if no operators are specified. Valid values are:`OR` (Default)::For example, a query string of `capital of Hungary` is interpreted as `capitalOR of OR Hungary`.`AND`::For example, a query string of `capital of Hungary` is interpreted as `capitalAND of AND Hungary`.--`all_fields`::deprecated:[6.0.0, set `fields` to `*` instead](Optional, boolean) If `true`,search all searchable fields in the index's field mapping.`analyze_wildcard`::(Optional, boolean) If `true`, the query attempts to analyze wildcard terms inthe query string. Defaults to `false`.`analyzer`::(Optional, string) <<analysis,Analyzer>> used to convert text in thequery string into tokens. Defaults to the<<specify-index-time-analyzer,index-time analyzer>> mapped for the`default_field`. If no analyzer is mapped, the index's default analyzer is used.`auto_generate_synonyms_phrase_query`::(Optional, boolean) If `true`, <<query-dsl-match-query-phrase,match phrase>>queries are automatically created for multi-term synonyms. Defaults to `true`.See <<simple-query-string-synonyms>> for an example.`flags`::(Optional, string) List of enabled operators for the<<simple-query-string-syntax,simple query string syntax>>. Defaults to `ALL`(all operators). See <<supported-flags>> for valid values.`fuzzy_max_expansions`::(Optional, integer) Maximum number of terms to which the query expands for fuzzymatching. Defaults to `50`.`fuzzy_prefix_length`::(Optional, integer) Number of beginning characters left unchanged for fuzzymatching. Defaults to `0`.`fuzzy_transpositions`::(Optional, boolean) If `true`, edits for fuzzy matching includetranspositions of two adjacent characters (ab → ba). Defaults to `true`.`lenient`::(Optional, boolean) If `true`, format-based errors, such as providing a textvalue for a <<number,numeric>> field, are ignored. Defaults to `false`.`minimum_should_match`::(Optional, string) Minimum number of clauses that must match for a document tobe returned. See the <<query-dsl-minimum-should-match, `minimum_should_match`parameter>> for valid values and more information.`quote_field_suffix`::+--(Optional, string) Suffix appended to quoted text in the query string.You can use this suffix to use a different analysis method for exact matches.See <<mixing-exact-search-with-stemming>>.--[[simple-query-string-query-notes]]==== Notes[[simple-query-string-syntax]]===== Simple query string syntaxThe `simple_query_string` query supports the following operators:* `+` signifies AND operation* `|` signifies OR operation* `-` negates a single token* `"` wraps a number of tokens to signify a phrase for searching* `*` at the end of a term signifies a prefix query* `(` and `)` signify precedence* `~N` after a word signifies edit distance (fuzziness)* `~N` after a phrase signifies slop amountTo use one of these characters literally, escape it with a preceding backslash(`\`).The behavior of these operators may differ depending on the `default_operator`value. For example:[source,js]--------------------------------------------------GET /_search{    "query": {        "simple_query_string" : {            "fields" : ["content"],            "query" : "foo bar -baz"        }    }}--------------------------------------------------// CONSOLEThis search is intended to only return documents containing `foo` or `bar` thatalso do **not** contain `baz`. However because of a `default_operator` of `OR`,this search actually returns documents that contain `foo` or `bar` and anydocuments that don't contain `baz`. To return documents as intended, change thequery string to `foo bar +-baz`.[[supported-flags]]===== Limit operatorsYou can use the `flags` parameter to limit the supported operators for thesimple query string syntax.To explicitly enable only specific operators, use a `|` separator. For example,a `flags` value of `OR|AND|PREFIX` disables all operators except `OR`, `AND`,and `PREFIX`.[source,js]--------------------------------------------------GET /_search{    "query": {        "simple_query_string" : {            "query" : "foo | bar + baz*",            "flags" : "OR|AND|PREFIX"        }    }}--------------------------------------------------// CONSOLE[[supported-flags-values]]====== Valid valuesThe available flags are:`ALL` (Default)::Enables all optional operators.`AND`::Enables the `+` AND operator.`ESCAPE`::Enables `\` as an escape character.`FUZZY`::Enables the `~N` operator after a word, where `N` is an integer denoting theallowed edit distance for matching. See <<fuzziness>>.`NEAR`::Enables the `~N` operator, after a phrase where `N` is the maximum number ofpositions allowed between matching tokens. Synonymous to `SLOP`. `NONE`::Disables all operators.`NOT`::Enables the `-` NOT operator.`OR`::Enables the `\|` OR operator.`PHRASE`::Enables the `"` quotes operator used to search for phrases.`PRECEDENCE`::Enables the `(` and `)` operators to control operator precedence.`PREFIX`::Enables the `*` prefix operator.`SLOP`::Enables the `~N` operator, after a phrase where `N` is maximum number ofpositions allowed between matching tokens. Synonymous to `NEAR`.`WHITESPACE`::Enables whitespace as split characters.[[simple-query-string-boost]]===== Wildcards and per-field boosts in the `fields` parameterFields can be specified with wildcards, eg:[source,js]--------------------------------------------------GET /_search{  "query": {    "simple_query_string" : {      "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{  "query": {    "simple_query_string" : {      "query" : "this is a test",      "fields" : [ "subject^3", "message" ] <1>    }  }}--------------------------------------------------// CONSOLE<1> The `subject` field is three times as important as the `message` field.[[simple-query-string-synonyms]]===== SynonymsThe `simple_query_string` query supports multi-terms synonym expansion with the <<analysis-synonym-graph-tokenfilter,synonym_graph>> token filter. When this filter is used, the parser creates a phrase query for each multi-terms synonyms.For example, the following synonym: `"ny, new york" would produce:``(ny OR ("new york"))`It is also possible to match multi terms synonyms with conjunctions instead:[source,js]--------------------------------------------------GET /_search{   "query": {       "simple_query_string" : {           "query" : "ny city",           "auto_generate_synonyms_phrase_query" : false       }   }}--------------------------------------------------// CONSOLEThe example above creates a boolean query:`(ny OR (new AND york)) city)`that matches documents with the term `ny` or the conjunction `new AND york`.By default the parameter `auto_generate_synonyms_phrase_query` is set to `true`.
 |