| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 | [[query-dsl-query-string-query]]=== Query String QueryA query that uses a query parser in order to parse its content. Here isan example:[source,js]--------------------------------------------------GET /_search{    "query": {        "query_string" : {            "default_field" : "content",            "query" : "this AND that OR thus"        }    }}--------------------------------------------------// CONSOLEThe `query_string` top level parameters include:[cols="<,<",options="header",]|=======================================================================|Parameter |Description|`query` |The actual query to be parsed. See <<query-string-syntax>>.|`default_field` |The default field for query terms if no prefix fieldis specified. Defaults to the `index.query.default_field` indexsettings, which in turn defaults to `_all`.|`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` |The analyzer name used to analyze the query string.|`allow_leading_wildcard` |When set, `*` or `?` are allowed as the firstcharacter. Defaults to `true`.|`lowercase_expanded_terms` |Whether terms of wildcard, prefix, fuzzy,and range queries are to be automatically lower-cased or not (since theyare not analyzed). Default it `true`.|`enable_position_increments` |Set to `true` to enable positionincrements in result queries. Defaults to `true`.|`fuzzy_max_expansions` |Controls the number of terms fuzzy queries willexpand to. Defaults to `50`|`fuzziness` |Set the fuzziness for fuzzy queries. Defaultsto `AUTO`. See  <<fuzziness>> for allowed settings.|`fuzzy_prefix_length` |Set the prefix length for fuzzy queries. Defaultis `0`.|`phrase_slop` |Sets the default slop for phrases. If zero, then exactphrase matches are required. Default value is `0`.|`boost` |Sets the boost value of the query. Defaults to `1.0`.|`analyze_wildcard` |By default, wildcards terms in a query string arenot analyzed. By setting this value to `true`, a best effort will bemade to analyze those as well.|`auto_generate_phrase_queries` |Defaults to `false`.|`max_determinized_states` |Limit on how many automaton states regexpqueries are allowed to create.  This protects against too-difficult(e.g. exponentially hard) regexps.  Defaults to 10000.|`minimum_should_match` |A value controlling how many "should" clausesin the resulting boolean query should match. It can be an absolute value(`2`), a percentage (`30%`) or a<<query-dsl-minimum-should-match,combination ofboth>>.|`lenient` |If set to `true` will cause format based failures (likeproviding text to a numeric field) to be ignored.|`locale` | Locale that should be used for string conversions.Defaults to `ROOT`.|`time_zone` | Time Zone to be applied to any range query related to dates. See alsohttp://www.joda.org/joda-time/apidocs/org/joda/time/DateTimeZone.html[JODA timezone].|=======================================================================When a multi term query is being generated, one can control how it getsrewritten using the<<query-dsl-multi-term-rewrite,rewrite>>parameter.[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 field to search on. It defaults to `_all` field.So, if `_all` field is disabled, it might make sense to change it to seta different default field.[float]==== Multi FieldThe `query_string` query can also run against multiple fields. Fields can beprovided via the `"fields"` parameter (example below).The idea of running the `query_string` query against multiple fields is toexpand each query term to an OR clause like this:    field1:query_term OR field2:query_term | ...For example, the following query[source,js]--------------------------------------------------GET /_search{    "query": {        "query_string" : {            "fields" : ["content", "name"],            "query" : "this AND that"        }    }}--------------------------------------------------// CONSOLEmatches the same words as[source,js]--------------------------------------------------GET /_search{    "query": {        "query_string": {            "query": "(content:this OR name:this) AND (content:that OR name:that)"        }    }}--------------------------------------------------// CONSOLESince several queries are generated from the individual search terms,combining them can be automatically done using either a `dis_max` query or asimple `bool` query. For example (the `name` is boosted by 5 using `^5`notation):[source,js]--------------------------------------------------GET /_search{    "query": {        "query_string" : {            "fields" : ["content", "name^5"],            "query" : "this AND that OR thus",            "use_dis_max" : true        }    }}--------------------------------------------------// CONSOLESimple wildcard can also be used to search "within" specific innerelements of the document. For example, if we have a `city` object withseveral fields (or inner object with fields) in it, we can automaticallysearch on all "city" fields:[source,js]--------------------------------------------------GET /_search{    "query": {        "query_string" : {            "fields" : ["city.*"],            "query" : "this AND that OR thus",            "use_dis_max" : true        }    }}--------------------------------------------------// CONSOLEAnother option is to provide the wildcard fields search in the querystring itself (properly escaping the `*` sign), for example:`city.\*:something`.When running the `query_string` query against multiple fields, thefollowing additional parameters are allowed:[cols="<,<",options="header",]|=======================================================================|Parameter |Description|`use_dis_max` |Should the queries be combined using `dis_max` (set itto `true`), or a `bool` query (set it to `false`). Defaults to `true`.|`tie_breaker` |When using `dis_max`, the disjunction max tie breaker.Defaults to `0`.|=======================================================================The 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": {        "query_string" : {            "fields" : ["content", "name.*^5"],            "query" : "this AND that OR thus",            "use_dis_max" : true        }    }}--------------------------------------------------// CONSOLEinclude::query-string-syntax.asciidoc[]
 |