| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 | [[query-dsl-simple-query-string-query]]=== Simple Query String QueryA query that uses the SimpleQueryParser to parse its context. Unlike theregular `query_string` query, the `simple_query_string` query will neverthrow an exception, and discards invalid parts of the query. Here isan example:[source,js]--------------------------------------------------GET /_search{  "query": {    "simple_query_string" : {        "query": "\"fried eggs\" +(eggplant | potato) -frittata",        "fields": ["title^5", "body"],        "default_operator": "and"    }  }}--------------------------------------------------// CONSOLEThe `simple_query_string` top level parameters include:[cols="<,<",options="header",]|=======================================================================|Parameter |Description|`query` |The actual query to be parsed. See below for syntax.|`fields` |The fields to perform the parsed query against. Defaults to the`index.query.default_field` index settings, which in turn defaults to `*`. `*`extracts all fields in the mapping that are eligible to term queries and filtersthe metadata fields.WARNING: There is a limit on the number of fields that can be queriedat once. It is defined by the `indices.query.bool.max_clause_count` <<search-settings>>which defaults to 1024.|`default_operator` |The default operator used if no explicit operatoris specified. For example, with a default operator of `OR`, the query`capital of Hungary` is translated to `capital OR of OR Hungary`, andwith default operator of `AND`, the same query is translated to`capital AND of AND Hungary`. The default value is `OR`.|`analyzer` |Force the analyzer to use to analyze each term of the query whencreating composite queries.|`flags` |A set of <<supported-flags,flags>> specifying which features of the `simple_query_string` to enable. Defaults to `ALL`.|`analyze_wildcard` | Whether terms of prefix queries should be automaticallyanalyzed or not. If `true` a best effort will be made to analyze the prefix. However,some analyzers will be not able to provide a meaningful resultsbased just on the prefix of a term. Defaults to `false`.|`lenient` | If set to `true` will cause format based failures(like providing text to a numeric field) to be ignored.|`minimum_should_match` | The minimum number of clauses that must match for a document to be returned. See the <<query-dsl-minimum-should-match,`minimum_should_match`>> documentation for the full list of options.|`quote_field_suffix` | A suffix to append to fields for quoted parts ofthe query string. This allows to use a field that has a different analysis chainfor exact matching. Look <<mixing-exact-search-with-stemming,here>> for acomprehensive example.|`auto_generate_synonyms_phrase_query` |Whether phrase queries should be automatically generated for multi terms synonyms.Defaults to `true`.|`all_fields` |  deprecated[6.0.0, set `fields` to `*` instead]Perform the query on all fields detected in the mapping that canbe queried.|`fuzzy_prefix_length` |Set the prefix length for fuzzy queries. Defaultis `0`.|`fuzzy_max_expansions` |Controls the number of terms fuzzy queries willexpand to. Defaults to `50`|`fuzzy_transpositions` |Set to `false` to disable fuzzy transpositions (`ab` -> `ba`).Default is `true`.|=======================================================================[float]===== Simple Query String SyntaxThe `simple_query_string` supports the following special characters:* `+` 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 amountIn order to search for any of these special characters, they will need tobe escaped with `\`.Be aware that this syntax may have a different behavior depending on the`default_operator` value. For example, consider the following query:[source,js]--------------------------------------------------GET /_search{    "query": {        "simple_query_string" : {            "fields" : ["content"],            "query" : "foo bar -baz"        }    }}--------------------------------------------------// CONSOLEYou may expect that documents containing only "foo" or "bar" will be returned,as long as they do not contain "baz", however, due to the `default_operator`being OR, this really means "match documents that contain "foo" or documentsthat contain "bar", or documents that don't contain "baz". If this is unintendedthen the query can be switched to `"foo bar +-baz"` which will not returndocuments that contain "baz".[float]==== Default FieldWhen not explicitly specifying the field to search on in the querystring syntax, the `index.query.default_field` will be used to derivewhich fields to search on. It defaults to `*` and the query will automaticallyattempt to determine the existing fields in the index's mapping that are queryable,and perform the search on those fields.[float]==== Multi FieldThe fields parameter can also include pattern based field names,allowing to automatically expand to the relevant fields (dynamicallyintroduced fields included). For example:[source,js]--------------------------------------------------GET /_search{    "query": {        "simple_query_string" : {            "fields" : ["content", "name.*^5"],            "query" : "foo bar baz"        }    }}--------------------------------------------------// CONSOLE[float][[supported-flags]]==== Flags`simple_query_string` support multiple flags to specify which parsing featuresshould be enabled. It is specified as a `|`-delimited string with the`flags` parameter:[source,js]--------------------------------------------------GET /_search{    "query": {        "simple_query_string" : {            "query" : "foo | bar + baz*",            "flags" : "OR|AND|PREFIX"        }    }}--------------------------------------------------// CONSOLEThe available flags are:[cols="<,<",options="header",]|=======================================================================|Flag |Description|`ALL` |Enables all parsing features. This is the default.|`NONE` |Switches off all parsing features.|`AND` |Enables the `+` AND operator.|`OR` |Enables the `\|` OR operator.|`NOT` |Enables the `-` NOT operator.|`PREFIX` |Enables the `*` Prefix operator.|`PHRASE` |Enables the `"` quotes operator used to search for phrases.|`PRECEDENCE` |Enables the `(` and `)` operators to control operator precedence.|`ESCAPE` |Enables `\` as the escape character.|`WHITESPACE` |Enables whitespaces as split characters.|`FUZZY` |Enables the `~N` operator after a word where N is an integer denoting the allowed edit distance for matching (see <<fuzziness>>).|`SLOP` |Enables the `~N` operator after a phrase where N is an integer denoting the slop amount.|`NEAR` |Synonymous to `SLOP`.|=======================================================================[float]==== 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`.
 |