A query that uses the SimpleQueryParser to parse its context. Unlike the
regular query_string
query, the simple_query_string
query will never
throw an exception, and discards invalid parts of the query. Here is
an example:
GET /_search { "query": { "simple_query_string" : { "query": "\"fried eggs\" +(eggplant | potato) -frittata", "fields": ["title^5", "body"], "default_operator": "and" } } }
The simple_query_string
top level parameters include:
Parameter | Description |
---|---|
| The actual query to be parsed. See below for syntax. |
| The fields to perform the parsed query against. Defaults to the
WARNING: There is a limit on the number of fields that can be queried
at once. It is defined by the |
| The default operator used if no explicit operator
is specified. For example, with a default operator of |
| Force the analyzer to use to analyze each term of the query when creating composite queries. |
| A set of flags specifying which features of the
|
| Whether terms of prefix queries should be automatically
analyzed or not. If |
| If set to |
| The minimum number of clauses that must match for a
document to be returned. See the
|
| A suffix to append to fields for quoted parts of the query string. This allows to use a field that has a different analysis chain for exact matching. Look here for a comprehensive example. |
| Whether phrase queries should be automatically generated for multi terms synonyms.
Defaults to |
|
[6.0.0]
Deprecated in 6.0.0.
set |
| Set the prefix length for fuzzy queries. Default
is |
| Controls the number of terms fuzzy queries will
expand to. Defaults to |
| Set to |
The 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 amount
In order to search for any of these special characters, they will need to
be escaped with \
.
Be aware that this syntax may have a different behavior depending on the
default_operator
value. For example, consider the following query:
GET /_search { "query": { "simple_query_string" : { "fields" : ["content"], "query" : "foo bar -baz" } } }
You 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 documents
that contain "bar", or documents that don’t contain "baz". If this is unintended
then the query can be switched to "foo bar +-baz"
which will not return
documents that contain "baz".
When not explicitly specifying the field to search on in the query
string syntax, the index.query.default_field
will be used to derive
which fields to search on. It defaults to *
and the query will automatically
attempt to determine the existing fields in the index’s mapping that are queryable,
and perform the search on those fields.
The fields parameter can also include pattern based field names, allowing to automatically expand to the relevant fields (dynamically introduced fields included). For example:
GET /_search { "query": { "simple_query_string" : { "fields" : ["content", "name.*^5"], "query" : "foo bar baz" } } }
simple_query_string
support multiple flags to specify which parsing features
should be enabled. It is specified as a |
-delimited string with the
flags
parameter:
GET /_search { "query": { "simple_query_string" : { "query" : "foo | bar + baz*", "flags" : "OR|AND|PREFIX" } } }
The available flags are:
Flag | Description |
---|---|
| Enables all parsing features. This is the default. |
| Switches off all parsing features. |
| Enables the |
| Enables the |
| Enables the |
| Enables the |
| Enables the |
| Enables the |
| Enables |
| Enables whitespaces as split characters. |
| Enables the |
| Enables the |
| Synonymous to |
The simple_query_string
query supports multi-terms synonym expansion with the 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:
GET /_search { "query": { "simple_query_string" : { "query" : "ny city", "auto_generate_synonyms_phrase_query" : false } } }
The 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
.