query-dsl-queries.asciidoc 15 KB

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