query-dsl-queries.asciidoc 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. [[query-dsl-queries]]
  2. == Query DSL - Queries
  3. elasticsearch provides a full Java query dsl in a similar manner to the
  4. REST {ref}/query-dsl.html[Query DSL]. The factory for query
  5. builders is `QueryBuilders`. Once your query is ready, you can use the
  6. <<search,Search API>>.
  7. See also how to build <<query-dsl-filters,Filters>>
  8. To use `QueryBuilders` just import them in your class:
  9. [source,java]
  10. --------------------------------------------------
  11. import org.elasticsearch.index.query.QueryBuilders.*;
  12. --------------------------------------------------
  13. Note that you can easily print (aka debug) JSON generated queries using
  14. `toString()` method on `QueryBuilder` object.
  15. The `QueryBuilder` can then be used with any API that accepts a query,
  16. such as `count` and `search`.
  17. [[match]]
  18. === Match Query
  19. See {ref}/query-dsl-match-query.html[Match Query]
  20. [source,java]
  21. --------------------------------------------------
  22. QueryBuilder qb = QueryBuilders.matchQuery("name", "kimchy elasticsearch");
  23. --------------------------------------------------
  24. [[multimatch]]
  25. === MultiMatch Query
  26. See {ref}/query-dsl-multi-match-query.html[MultiMatch
  27. Query]
  28. [source,java]
  29. --------------------------------------------------
  30. QueryBuilder qb = QueryBuilders.multiMatchQuery(
  31. "kimchy elasticsearch", // Text you are looking for
  32. "user", "message" // Fields you query on
  33. );
  34. --------------------------------------------------
  35. [[bool]]
  36. === Boolean Query
  37. See {ref}/query-dsl-bool-query.html[Boolean Query]
  38. [source,java]
  39. --------------------------------------------------
  40. QueryBuilder qb = QueryBuilders
  41. .boolQuery()
  42. .must(termQuery("content", "test1"))
  43. .must(termQuery("content", "test4"))
  44. .mustNot(termQuery("content", "test2"))
  45. .should(termQuery("content", "test3"));
  46. --------------------------------------------------
  47. [[boosting]]
  48. === Boosting Query
  49. See {ref}/query-dsl-boosting-query.html[Boosting Query]
  50. [source,java]
  51. --------------------------------------------------
  52. QueryBuilders.boostingQuery()
  53. .positive(QueryBuilders.termQuery("name","kimchy"))
  54. .negative(QueryBuilders.termQuery("name","dadoonet"))
  55. .negativeBoost(0.2f);
  56. --------------------------------------------------
  57. [[ids]]
  58. === IDs Query
  59. See {ref}/query-dsl-ids-query.html[IDs Query]
  60. [source,java]
  61. --------------------------------------------------
  62. QueryBuilders.idsQuery().ids("1", "2");
  63. --------------------------------------------------
  64. [[custom-score]]
  65. === Custom Score Query
  66. See {ref}/query-dsl-custom-score-query.html[Custom Score
  67. Query]
  68. [source,java]
  69. --------------------------------------------------
  70. QueryBuilders.customScoreQuery(QueryBuilders.matchAllQuery()) // Your query here
  71. .script("_score * doc['price'].value"); // Your script here
  72. // If the script have parameters, use the same script and provide parameters to it.
  73. QueryBuilders.customScoreQuery(QueryBuilders.matchAllQuery())
  74. .script("_score * doc['price'].value / pow(param1, param2)")
  75. .param("param1", 2)
  76. .param("param2", 3.1);
  77. --------------------------------------------------
  78. [[custom-boost-factor]]
  79. === Custom Boost Factor Query
  80. See
  81. {ref}/query-dsl-custom-boost-factor-query.html[Custom
  82. Boost Factor Query]
  83. [source,java]
  84. --------------------------------------------------
  85. QueryBuilders.customBoostFactorQuery(QueryBuilders.matchAllQuery()) // Your query
  86. .boostFactor(3.1f);
  87. --------------------------------------------------
  88. [[constant-score]]
  89. === Constant Score Query
  90. See {ref}/query-dsl-constant-score-query.html[Constant
  91. Score Query]
  92. [source,java]
  93. --------------------------------------------------
  94. // Using with Filters
  95. QueryBuilders.constantScoreQuery(FilterBuilders.termFilter("name","kimchy"))
  96. .boost(2.0f);
  97. // With Queries
  98. QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("name","kimchy"))
  99. .boost(2.0f);
  100. --------------------------------------------------
  101. [[dismax]]
  102. === Disjunction Max Query
  103. See {ref}/query-dsl-dis-max-query.html[Disjunction Max
  104. Query]
  105. [source,java]
  106. --------------------------------------------------
  107. QueryBuilders.disMaxQuery()
  108. .add(QueryBuilders.termQuery("name","kimchy")) // Your queries
  109. .add(QueryBuilders.termQuery("name","elasticsearch")) // Your queries
  110. .boost(1.2f)
  111. .tieBreaker(0.7f);
  112. --------------------------------------------------
  113. [[field]]
  114. === Field Query
  115. See {ref}/query-dsl-field-query.html[Field Query]
  116. [source,java]
  117. --------------------------------------------------
  118. QueryBuilders.fieldQuery("name", "+kimchy -dadoonet");
  119. // Note that you can write the same query using queryString query.
  120. QueryBuilders.queryString("+kimchy -dadoonet").field("name");
  121. --------------------------------------------------
  122. [[flt]]
  123. === Fuzzy Like This (Field) Query (flt and flt_field)
  124. See:
  125. * {ref}/query-dsl-flt-query.html[Fuzzy Like This Query]
  126. * {ref}/query-dsl-flt-field-query.html[Fuzzy Like This Field Query]
  127. [source,java]
  128. --------------------------------------------------
  129. // flt Query
  130. QueryBuilders.fuzzyLikeThisQuery("name.first", "name.last") // Fields
  131. .likeText("text like this one") // Text
  132. .maxQueryTerms(12); // Max num of Terms
  133. // in generated queries
  134. // flt_field Query
  135. QueryBuilders.fuzzyLikeThisFieldQuery("name.first") // Only on single field
  136. .likeText("text like this one")
  137. .maxQueryTerms(12);
  138. --------------------------------------------------
  139. [[fuzzy]]
  140. === FuzzyQuery
  141. See {ref}/query-dsl-fuzzy-query.html[Fuzzy Query]
  142. [source,java]
  143. --------------------------------------------------
  144. QueryBuilder qb = QueryBuilders.fuzzyQuery("name", "kimzhy");
  145. --------------------------------------------------
  146. [[has-child-parent]]
  147. === Has Child / Has Parent
  148. See:
  149. * {ref}/query-dsl-has-child-query.html[Has Child Query]
  150. * {ref}/query-dsl-has-parent-query.html[Has Parent]
  151. [source,java]
  152. --------------------------------------------------
  153. // Has Child
  154. QueryBuilders.hasChildQuery("blog_tag",
  155. QueryBuilders.termQuery("tag","something"))
  156. // Has Parent
  157. QueryBuilders.hasParentQuery("blog",
  158. QueryBuilders.termQuery("tag","something"));
  159. --------------------------------------------------
  160. [[match-all]]
  161. === MatchAll Query
  162. See {ref}/query-dsl-match-all-query.html[Match All
  163. Query]
  164. [source,java]
  165. --------------------------------------------------
  166. QueryBuilder qb = QueryBuilders.matchAllQuery();
  167. --------------------------------------------------
  168. [[mlt]]
  169. === More Like This (Field) Query (mlt and mlt_field)
  170. See:
  171. * {ref}/query-dsl-mlt-query.html[More Like This Query]
  172. * {ref}/query-dsl-mlt-field-query.html[More Like This Field Query]
  173. [source,java]
  174. --------------------------------------------------
  175. // mlt Query
  176. QueryBuilders.moreLikeThisQuery("name.first", "name.last") // Fields
  177. .likeText("text like this one") // Text
  178. .minTermFreq(1) // Ignore Threshold
  179. .maxQueryTerms(12); // Max num of Terms
  180. // in generated queries
  181. // mlt_field Query
  182. QueryBuilders.moreLikeThisFieldQuery("name.first") // Only on single field
  183. .likeText("text like this one")
  184. .minTermFreq(1)
  185. .maxQueryTerms(12);
  186. --------------------------------------------------
  187. [[prefix]]
  188. === Prefix Query
  189. See {ref}/query-dsl-prefix-query.html[Prefix Query]
  190. [source,java]
  191. --------------------------------------------------
  192. QueryBuilders.prefixQuery("brand", "heine");
  193. --------------------------------------------------
  194. [[query-string]]
  195. === QueryString Query
  196. See {ref}/query-dsl-query-string-query.html[QueryString Query]
  197. [source,java]
  198. --------------------------------------------------
  199. QueryBuilder qb = QueryBuilders.queryString("+kimchy -elasticsearch");
  200. --------------------------------------------------
  201. [[java-range]]
  202. === Range Query
  203. See {ref}/query-dsl-range-query.html[Range Query]
  204. [source,java]
  205. --------------------------------------------------
  206. QueryBuilder qb = QueryBuilders
  207. .rangeQuery("price")
  208. .from(5)
  209. .to(10)
  210. .includeLower(true)
  211. .includeUpper(false);
  212. --------------------------------------------------
  213. === Span Queries (first, near, not, or, term)
  214. See:
  215. * {ref}/query-dsl-span-first-query.html[Span First Query]
  216. * {ref}/query-dsl-span-near-query.html[Span Near Query]
  217. * {ref}/query-dsl-span-not-query.html[Span Not Query]
  218. * {ref}/query-dsl-span-or-query.html[Span Or Query]
  219. * {ref}/query-dsl-span-term-query.html[Span Term Query]
  220. [source,java]
  221. --------------------------------------------------
  222. // Span First
  223. QueryBuilders.spanFirstQuery(
  224. QueryBuilders.spanTermQuery("user", "kimchy"), // Query
  225. 3 // Max End position
  226. );
  227. // Span Near
  228. QueryBuilders.spanNearQuery()
  229. .clause(QueryBuilders.spanTermQuery("field","value1")) // Span Term Queries
  230. .clause(QueryBuilders.spanTermQuery("field","value2"))
  231. .clause(QueryBuilders.spanTermQuery("field","value3"))
  232. .slop(12) // Slop factor
  233. .inOrder(false)
  234. .collectPayloads(false);
  235. // Span Not
  236. QueryBuilders.spanNotQuery()
  237. .include(QueryBuilders.spanTermQuery("field","value1"))
  238. .exclude(QueryBuilders.spanTermQuery("field","value2"));
  239. // Span Or
  240. QueryBuilders.spanOrQuery()
  241. .clause(QueryBuilders.spanTermQuery("field","value1"))
  242. .clause(QueryBuilders.spanTermQuery("field","value2"))
  243. .clause(QueryBuilders.spanTermQuery("field","value3"));
  244. // Span Term
  245. QueryBuilders.spanTermQuery("user","kimchy");
  246. --------------------------------------------------
  247. [[term]]
  248. === Term Query
  249. See {ref}/query-dsl-term-query.html[Term Query]
  250. [source,java]
  251. --------------------------------------------------
  252. QueryBuilder qb = QueryBuilders.termQuery("name", "kimchy");
  253. --------------------------------------------------
  254. [[java-terms]]
  255. === Terms Query
  256. See {ref}/query-dsl-terms-query.html[Terms Query]
  257. [source,java]
  258. --------------------------------------------------
  259. QueryBuilders.termsQuery("tags", // field
  260. "blue", "pill") // values
  261. .minimumMatch(1); // How many terms must match
  262. --------------------------------------------------
  263. [[top-children]]
  264. === Top Children Query
  265. See {ref}/query-dsl-top-children-query.html[Top Children Query]
  266. [source,java]
  267. --------------------------------------------------
  268. QueryBuilders.topChildrenQuery(
  269. "blog_tag", // field
  270. QueryBuilders.termQuery("tag", "something") // Query
  271. )
  272. .score("max") // max, sum or avg
  273. .factor(5)
  274. .incrementalFactor(2);
  275. --------------------------------------------------
  276. [[wildcard]]
  277. === Wildcard Query
  278. See {ref}/query-dsl-wildcard-query.html[Wildcard Query]
  279. [source,java]
  280. --------------------------------------------------
  281. QueryBuilders.wildcardQuery("user", "k?mc*");
  282. --------------------------------------------------
  283. [[nested]]
  284. === Nested Query
  285. See {ref}/query-dsl-nested-query.html[Nested Query]
  286. [source,java]
  287. --------------------------------------------------
  288. QueryBuilders.nestedQuery("obj1", // Path
  289. QueryBuilders.boolQuery() // Your query
  290. .must(QueryBuilders.matchQuery("obj1.name", "blue"))
  291. .must(QueryBuilders.rangeQuery("obj1.count").gt(5))
  292. )
  293. .scoreMode("avg"); // max, total, avg or none
  294. --------------------------------------------------
  295. [[custom-filters-score]]
  296. === Custom Filters Score Query
  297. See
  298. {ref}/query-dsl-custom-filters-score-query.html[Custom Filters Score Query]
  299. [source,java]
  300. --------------------------------------------------
  301. QueryBuilders.customFiltersScoreQuery(
  302. QueryBuilders.matchAllQuery()) // Query
  303. // Filters with their boost factors
  304. .add(FilterBuilders.rangeFilter("age").from(0).to(10), 3)
  305. .add(FilterBuilders.rangeFilter("age").from(10).to(20), 2)
  306. .scoreMode("first"); // first, min, max, total, avg or multiply
  307. --------------------------------------------------
  308. [[indices]]
  309. === Indices Query
  310. See {ref}/query-dsl-indices-query.html[Indices Query]
  311. [source,java]
  312. --------------------------------------------------
  313. // Using another query when no match for the main one
  314. QueryBuilders.indicesQuery(
  315. QueryBuilders.termQuery("tag", "wow"),
  316. "index1", "index2"
  317. )
  318. .noMatchQuery(QueryBuilders.termQuery("tag", "kow"));
  319. // Using all (match all) or none (match no documents)
  320. QueryBuilders.indicesQuery(
  321. QueryBuilders.termQuery("tag", "wow"),
  322. "index1", "index2"
  323. )
  324. .noMatchQuery("all"); // all or none
  325. --------------------------------------------------
  326. [[geo-shape]]
  327. === GeoShape Query
  328. See {ref}/query-dsl-geo-shape-query.html[GeoShape Query]
  329. Note: the `geo_shape` type uses `Spatial4J` and `JTS`, both of which are
  330. optional dependencies. Consequently you must add `Spatial4J` and `JTS`
  331. to your classpath in order to use this type:
  332. [source,java]
  333. --------------------------------------------------
  334. <dependency>
  335. <groupId>com.spatial4j</groupId>
  336. <artifactId>spatial4j</artifactId>
  337. <version>0.3</version>
  338. </dependency>
  339. <dependency>
  340. <groupId>com.vividsolutions</groupId>
  341. <artifactId>jts</artifactId>
  342. <version>1.12</version>
  343. <exclusions>
  344. <exclusion>
  345. <groupId>xerces</groupId>
  346. <artifactId>xercesImpl</artifactId>
  347. </exclusion>
  348. </exclusions>
  349. </dependency>
  350. --------------------------------------------------
  351. [source,java]
  352. --------------------------------------------------
  353. // Import Spatial4J shapes
  354. import com.spatial4j.core.context.SpatialContext;
  355. import com.spatial4j.core.shape.Shape;
  356. import com.spatial4j.core.shape.impl.RectangleImpl;
  357. // Also import ShapeRelation
  358. import org.elasticsearch.common.geo.ShapeRelation;
  359. --------------------------------------------------
  360. [source,java]
  361. --------------------------------------------------
  362. // Shape within another
  363. QueryBuilders.geoShapeQuery("location",
  364. new RectangleImpl(0,10,0,10,SpatialContext.GEO))
  365. .relation(ShapeRelation.WITHIN);
  366. // Intersect shapes
  367. QueryBuilders.geoShapeQuery("location",
  368. new PointImpl(0, 0, SpatialContext.GEO))
  369. .relation(ShapeRelation.INTERSECTS);
  370. // Using pre-indexed shapes
  371. QueryBuilders.geoShapeQuery("location", "New Zealand", "countries")
  372. .relation(ShapeRelation.DISJOINT);
  373. --------------------------------------------------