| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 | [[query-dsl-queries]]== Query DSL - Querieselasticsearch provides a full Java query dsl in a similar manner to theREST {ref}/query-dsl.html[Query DSL]. The factory for querybuilders is `QueryBuilders`. Once your query is ready, you can use the<<search,Search API>>.See also how to build <<query-dsl-filters,Filters>>To use `QueryBuilders` just import them in your class:[source,java]--------------------------------------------------import org.elasticsearch.index.query.QueryBuilders.*;--------------------------------------------------Note that you can easily print (aka debug) JSON generated queries using`toString()` method on `QueryBuilder` object.The `QueryBuilder` can then be used with any API that accepts a query,such as `count` and `search`.[[match]]=== Match QuerySee {ref}/query-dsl-match-query.html[Match Query][source,java]--------------------------------------------------QueryBuilder qb = QueryBuilders.matchQuery("name", "kimchy elasticsearch");--------------------------------------------------[[multimatch]]=== MultiMatch QuerySee {ref}/query-dsl-multi-match-query.html[MultiMatchQuery][source,java]--------------------------------------------------QueryBuilder qb = QueryBuilders.multiMatchQuery(    "kimchy elasticsearch",     // Text you are looking for    "user", "message"           // Fields you query on    );--------------------------------------------------[[bool]]=== Boolean QuerySee {ref}/query-dsl-bool-query.html[Boolean Query][source,java]--------------------------------------------------QueryBuilder qb = QueryBuilders                    .boolQuery()                    .must(termQuery("content", "test1"))                    .must(termQuery("content", "test4"))                    .mustNot(termQuery("content", "test2"))                    .should(termQuery("content", "test3"));--------------------------------------------------[[boosting]]=== Boosting QuerySee {ref}/query-dsl-boosting-query.html[Boosting Query][source,java]--------------------------------------------------QueryBuilders.boostingQuery()            .positive(QueryBuilders.termQuery("name","kimchy"))            .negative(QueryBuilders.termQuery("name","dadoonet"))            .negativeBoost(0.2f);--------------------------------------------------[[ids]]=== IDs QuerySee {ref}/query-dsl-ids-query.html[IDs Query][source,java]--------------------------------------------------QueryBuilders.idsQuery().ids("1", "2");--------------------------------------------------[[constant-score]]=== Constant Score QuerySee {ref}/query-dsl-constant-score-query.html[ConstantScore Query][source,java]--------------------------------------------------// Using with FiltersQueryBuilders.constantScoreQuery(FilterBuilders.termFilter("name","kimchy"))                .boost(2.0f);// With QueriesQueryBuilders.constantScoreQuery(QueryBuilders.termQuery("name","kimchy"))                .boost(2.0f);--------------------------------------------------[[dismax]]=== Disjunction Max QuerySee {ref}/query-dsl-dis-max-query.html[Disjunction MaxQuery][source,java]--------------------------------------------------QueryBuilders.disMaxQuery()                .add(QueryBuilders.termQuery("name","kimchy"))          // Your queries                .add(QueryBuilders.termQuery("name","elasticsearch"))   // Your queries                .boost(1.2f)                .tieBreaker(0.7f);--------------------------------------------------[[flt]]=== Fuzzy Like This (Field) Query (flt and flt_field)See: * {ref}/query-dsl-flt-query.html[Fuzzy Like This Query] * {ref}/query-dsl-flt-field-query.html[Fuzzy Like This Field Query][source,java]--------------------------------------------------// flt QueryQueryBuilders.fuzzyLikeThisQuery("name.first", "name.last")     // Fields                .likeText("text like this one")                 // Text                .maxQueryTerms(12);                             // Max num of Terms                                                                // in generated queries// flt_field QueryQueryBuilders.fuzzyLikeThisFieldQuery("name.first")             // Only on single field                .likeText("text like this one")                .maxQueryTerms(12);--------------------------------------------------[[fuzzy]]=== FuzzyQuerySee {ref}/query-dsl-fuzzy-query.html[Fuzzy Query][source,java]--------------------------------------------------QueryBuilder qb = QueryBuilders.fuzzyQuery("name", "kimzhy");--------------------------------------------------[[has-child-parent]]=== Has Child / Has ParentSee: * {ref}/query-dsl-has-child-query.html[Has Child Query] * {ref}/query-dsl-has-parent-query.html[Has Parent][source,java]--------------------------------------------------// Has ChildQueryBuilders.hasChildQuery("blog_tag",                QueryBuilders.termQuery("tag","something"))// Has ParentQueryBuilders.hasParentQuery("blog",                QueryBuilders.termQuery("tag","something"));--------------------------------------------------[[match-all]]=== MatchAll QuerySee {ref}/query-dsl-match-all-query.html[Match AllQuery][source,java]--------------------------------------------------QueryBuilder qb = QueryBuilders.matchAllQuery();--------------------------------------------------[[mlt]]=== More Like This (Field) Query (mlt and mlt_field)See: * {ref}/query-dsl-mlt-query.html[More Like This Query] * {ref}/query-dsl-mlt-field-query.html[More Like This Field Query][source,java]--------------------------------------------------// mlt QueryQueryBuilders.moreLikeThisQuery("name.first", "name.last")      // Fields                .likeText("text like this one")                 // Text                .minTermFreq(1)                                 // Ignore Threshold                .maxQueryTerms(12);                             // Max num of Terms                                                                // in generated queries// mlt_field QueryQueryBuilders.moreLikeThisFieldQuery("name.first")              // Only on single field                .likeText("text like this one")                .minTermFreq(1)                .maxQueryTerms(12);--------------------------------------------------[[prefix]]=== Prefix QuerySee {ref}/query-dsl-prefix-query.html[Prefix Query][source,java]--------------------------------------------------QueryBuilders.prefixQuery("brand", "heine");--------------------------------------------------[[query-string]]=== QueryString QuerySee {ref}/query-dsl-query-string-query.html[QueryString Query][source,java]--------------------------------------------------QueryBuilder qb = QueryBuilders.queryString("+kimchy -elasticsearch");--------------------------------------------------[[java-range]]=== Range QuerySee {ref}/query-dsl-range-query.html[Range Query][source,java]--------------------------------------------------QueryBuilder qb = QueryBuilders                    .rangeQuery("price")                    .from(5)                    .to(10)                    .includeLower(true)                    .includeUpper(false);--------------------------------------------------=== Span Queries (first, near, not, or, term)See: * {ref}/query-dsl-span-first-query.html[Span First Query] * {ref}/query-dsl-span-near-query.html[Span Near Query] * {ref}/query-dsl-span-not-query.html[Span Not Query] * {ref}/query-dsl-span-or-query.html[Span Or Query] * {ref}/query-dsl-span-term-query.html[Span Term Query][source,java]--------------------------------------------------// Span FirstQueryBuilders.spanFirstQuery(                QueryBuilders.spanTermQuery("user", "kimchy"),  // Query                3                                               // Max End position        );// Span NearQueryBuilders.spanNearQuery()    .clause(QueryBuilders.spanTermQuery("field","value1"))  // Span Term Queries    .clause(QueryBuilders.spanTermQuery("field","value2"))    .clause(QueryBuilders.spanTermQuery("field","value3"))    .slop(12)                                               // Slop factor    .inOrder(false)    .collectPayloads(false);// Span NotQueryBuilders.spanNotQuery()    .include(QueryBuilders.spanTermQuery("field","value1"))    .exclude(QueryBuilders.spanTermQuery("field","value2"));// Span OrQueryBuilders.spanOrQuery()    .clause(QueryBuilders.spanTermQuery("field","value1"))    .clause(QueryBuilders.spanTermQuery("field","value2"))    .clause(QueryBuilders.spanTermQuery("field","value3"));// Span TermQueryBuilders.spanTermQuery("user","kimchy");--------------------------------------------------[[term]]=== Term QuerySee {ref}/query-dsl-term-query.html[Term Query][source,java]--------------------------------------------------QueryBuilder qb = QueryBuilders.termQuery("name", "kimchy");--------------------------------------------------[[java-terms]]=== Terms QuerySee {ref}/query-dsl-terms-query.html[Terms Query][source,java]--------------------------------------------------QueryBuilders.termsQuery("tags",    // field    "blue", "pill")                 // values    .minimumMatch(1);               // How many terms must match--------------------------------------------------[[top-children]]=== Top Children QuerySee {ref}/query-dsl-top-children-query.html[Top Children Query][source,java]--------------------------------------------------QueryBuilders.topChildrenQuery(        "blog_tag",                                 // field        QueryBuilders.termQuery("tag", "something") // Query    )    .score("max")                                   // max, sum or avg    .factor(5)    .incrementalFactor(2);--------------------------------------------------[[wildcard]]=== Wildcard QuerySee {ref}/query-dsl-wildcard-query.html[Wildcard Query][source,java]--------------------------------------------------QueryBuilders.wildcardQuery("user", "k?mc*");--------------------------------------------------[[nested]]=== Nested QuerySee {ref}/query-dsl-nested-query.html[Nested Query][source,java]--------------------------------------------------QueryBuilders.nestedQuery("obj1",               // Path                QueryBuilders.boolQuery()       // Your query                        .must(QueryBuilders.matchQuery("obj1.name", "blue"))                        .must(QueryBuilders.rangeQuery("obj1.count").gt(5))            )            .scoreMode("avg");                  // max, total, avg or none--------------------------------------------------[[indices]]=== Indices QuerySee {ref}/query-dsl-indices-query.html[Indices Query][source,java]--------------------------------------------------// Using another query when no match for the main oneQueryBuilders.indicesQuery(                QueryBuilders.termQuery("tag", "wow"),                "index1", "index2"            )            .noMatchQuery(QueryBuilders.termQuery("tag", "kow"));// Using all (match all) or none (match no documents)QueryBuilders.indicesQuery(                QueryBuilders.termQuery("tag", "wow"),                "index1", "index2"            )            .noMatchQuery("all");       // all or none--------------------------------------------------[[geo-shape]]=== GeoShape QuerySee {ref}/query-dsl-geo-shape-query.html[GeoShape Query]Note: the `geo_shape` type uses `Spatial4J` and `JTS`, both of which areoptional dependencies. Consequently you must add `Spatial4J` and `JTS`to your classpath in order to use this type:[source,java]--------------------------------------------------<dependency>    <groupId>com.spatial4j</groupId>    <artifactId>spatial4j</artifactId>    <version>0.3</version></dependency><dependency>    <groupId>com.vividsolutions</groupId>    <artifactId>jts</artifactId>    <version>1.12</version>    <exclusions>        <exclusion>            <groupId>xerces</groupId>            <artifactId>xercesImpl</artifactId>        </exclusion>    </exclusions></dependency>--------------------------------------------------[source,java]--------------------------------------------------// Import Spatial4J shapesimport com.spatial4j.core.context.SpatialContext;import com.spatial4j.core.shape.Shape;import com.spatial4j.core.shape.impl.RectangleImpl;// Also import ShapeRelationimport org.elasticsearch.common.geo.ShapeRelation;--------------------------------------------------[source,java]--------------------------------------------------// Shape within anotherQueryBuilders.geoShapeQuery("location",                new RectangleImpl(0,10,0,10,SpatialContext.GEO))            .relation(ShapeRelation.WITHIN);// Intersect shapesQueryBuilders.geoShapeQuery("location",                new PointImpl(0, 0, SpatialContext.GEO))            .relation(ShapeRelation.INTERSECTS);// Using pre-indexed shapesQueryBuilders.geoShapeQuery("location", "New Zealand", "countries")            .relation(ShapeRelation.DISJOINT);--------------------------------------------------
 |