simple-query-string-query.asciidoc 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. [[query-dsl-simple-query-string-query]]
  2. === Simple Query String Query
  3. A query that uses the SimpleQueryParser to parse its context. Unlike the
  4. regular `query_string` query, the `simple_query_string` query will never
  5. throw an exception, and discards invalid parts of the query. Here is
  6. an example:
  7. [source,js]
  8. --------------------------------------------------
  9. GET /_search
  10. {
  11. "query": {
  12. "simple_query_string" : {
  13. "query": "\"fried eggs\" +(eggplant | potato) -frittata",
  14. "fields": ["title^5", "body"],
  15. "default_operator": "and"
  16. }
  17. }
  18. }
  19. --------------------------------------------------
  20. // CONSOLE
  21. The `simple_query_string` top level parameters include:
  22. [cols="<,<",options="header",]
  23. |=======================================================================
  24. |Parameter |Description
  25. |`query` |The actual query to be parsed. See below for syntax.
  26. |`fields` |The fields to perform the parsed query against. Defaults to the
  27. `index.query.default_field` index settings, which in turn defaults to `*`. `*`
  28. extracts all fields in the mapping that are eligible to term queries and filters
  29. the metadata fields. There is a limit of no more than 1024 fields being queried
  30. at once.
  31. |`default_operator` |The default operator used if no explicit operator
  32. is specified. For example, with a default operator of `OR`, the query
  33. `capital of Hungary` is translated to `capital OR of OR Hungary`, and
  34. with default operator of `AND`, the same query is translated to
  35. `capital AND of AND Hungary`. The default value is `OR`.
  36. |`analyzer` |Force the analyzer to use to analyze each term of the query when
  37. creating composite queries.
  38. |`flags` |Flags specifying which features of the `simple_query_string` to
  39. enable. Defaults to `ALL`.
  40. |`analyze_wildcard` | Whether terms of prefix queries should be automatically
  41. analyzed or not. If `true` a best effort will be made to analyze the prefix. However,
  42. some analyzers will be not able to provide a meaningful results
  43. based just on the prefix of a term. Defaults to `false`.
  44. |`lenient` | If set to `true` will cause format based failures
  45. (like providing text to a numeric field) to be ignored.
  46. |`minimum_should_match` | The minimum number of clauses that must match for a
  47. document to be returned. See the
  48. <<query-dsl-minimum-should-match,`minimum_should_match`>> documentation for the
  49. full list of options.
  50. |`quote_field_suffix` | A suffix to append to fields for quoted parts of
  51. the query string. This allows to use a field that has a different analysis chain
  52. for exact matching. Look <<mixing-exact-search-with-stemming,here>> for a
  53. comprehensive example.
  54. |`auto_generate_synonyms_phrase_query` |Whether phrase queries should be automatically generated for multi terms synonyms.
  55. Defaults to `true`.
  56. |`all_fields` | deprecated[6.0.0, set `fields` to `*` instead]
  57. Perform the query on all fields detected in the mapping that can
  58. be queried.
  59. |`fuzzy_prefix_length` |Set the prefix length for fuzzy queries. Default
  60. is `0`.
  61. |`fuzzy_max_expansions` |Controls the number of terms fuzzy queries will
  62. expand to. Defaults to `50`
  63. |`fuzzy_transpositions` |Set to `false` to disable fuzzy transpositions (`ab` -> `ba`).
  64. Default is `true`.
  65. |=======================================================================
  66. [float]
  67. ===== Simple Query String Syntax
  68. The `simple_query_string` supports the following special characters:
  69. * `+` signifies AND operation
  70. * `|` signifies OR operation
  71. * `-` negates a single token
  72. * `"` wraps a number of tokens to signify a phrase for searching
  73. * `*` at the end of a term signifies a prefix query
  74. * `(` and `)` signify precedence
  75. * `~N` after a word signifies edit distance (fuzziness)
  76. * `~N` after a phrase signifies slop amount
  77. In order to search for any of these special characters, they will need to
  78. be escaped with `\`.
  79. Be aware that this syntax may have a different behavior depending on the
  80. `default_operator` value. For example, consider the following query:
  81. [source,js]
  82. --------------------------------------------------
  83. GET /_search
  84. {
  85. "query": {
  86. "simple_query_string" : {
  87. "fields" : ["content"],
  88. "query" : "foo bar -baz"
  89. }
  90. }
  91. }
  92. --------------------------------------------------
  93. // CONSOLE
  94. You may expect that documents containing only "foo" or "bar" will be returned,
  95. as long as they do not contain "baz", however, due to the `default_operator`
  96. being OR, this really means "match documents that contain "foo" or documents
  97. that contain "bar", or documents that don't contain "baz". If this is unintended
  98. then the query can be switched to `"foo bar +-baz"` which will not return
  99. documents that contain "baz".
  100. [float]
  101. ==== Default Field
  102. When not explicitly specifying the field to search on in the query
  103. string syntax, the `index.query.default_field` will be used to derive
  104. which fields to search on. It defaults to `*` and the query will automatically
  105. attempt to determine the existing fields in the index's mapping that are queryable,
  106. and perform the search on those fields.
  107. [float]
  108. ==== Multi Field
  109. The fields parameter can also include pattern based field names,
  110. allowing to automatically expand to the relevant fields (dynamically
  111. introduced fields included). For example:
  112. [source,js]
  113. --------------------------------------------------
  114. GET /_search
  115. {
  116. "query": {
  117. "simple_query_string" : {
  118. "fields" : ["content", "name.*^5"],
  119. "query" : "foo bar baz"
  120. }
  121. }
  122. }
  123. --------------------------------------------------
  124. // CONSOLE
  125. [float]
  126. ==== Flags
  127. `simple_query_string` support multiple flags to specify which parsing features
  128. should be enabled. It is specified as a `|`-delimited string with the
  129. `flags` parameter:
  130. [source,js]
  131. --------------------------------------------------
  132. GET /_search
  133. {
  134. "query": {
  135. "simple_query_string" : {
  136. "query" : "foo | bar + baz*",
  137. "flags" : "OR|AND|PREFIX"
  138. }
  139. }
  140. }
  141. --------------------------------------------------
  142. // CONSOLE
  143. The available flags are: `ALL`, `NONE`, `AND`, `OR`, `NOT`, `PREFIX`, `PHRASE`,
  144. `PRECEDENCE`, `ESCAPE`, `WHITESPACE`, `FUZZY`, `NEAR`, and `SLOP`.
  145. [float]
  146. ==== Synonyms
  147. The `simple_query_string` query supports multi-terms synonym expansion with the <<analysis-synonym-graph-tokenfilter,
  148. synonym_graph>> token filter. When this filter is used, the parser creates a phrase query for each multi-terms synonyms.
  149. For example, the following synonym: `"ny, new york" would produce:`
  150. `(ny OR ("new york"))`
  151. It is also possible to match multi terms synonyms with conjunctions instead:
  152. [source,js]
  153. --------------------------------------------------
  154. GET /_search
  155. {
  156. "query": {
  157. "simple_query_string" : {
  158. "query" : "ny city",
  159. "auto_generate_synonyms_phrase_query" : false
  160. }
  161. }
  162. }
  163. --------------------------------------------------
  164. // CONSOLE
  165. The example above creates a boolean query:
  166. `(ny OR (new AND york)) city)`
  167. that matches documents with the term `ny` or the conjunction `new AND york`.
  168. By default the parameter `auto_generate_synonyms_phrase_query` is set to `true`.