|
@@ -8,11 +8,12 @@ builders is `QueryBuilders`. Once your query is ready, you can use the
|
|
|
|
|
|
See also how to build <<query-dsl-filters,Filters>>
|
|
|
|
|
|
-To use `QueryBuilders` just import them in your class:
|
|
|
+To use `QueryBuilders` or `FilterBuilders` just import them in your class:
|
|
|
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-import org.elasticsearch.index.query.QueryBuilders.*;
|
|
|
+import static org.elasticsearch.index.query.QueryBuilders.*;
|
|
|
+import static org.elasticsearch.index.query.FilterBuilders.*;
|
|
|
--------------------------------------------------
|
|
|
|
|
|
Note that you can easily print (aka debug) JSON generated queries using
|
|
@@ -27,11 +28,15 @@ such as `count` and `search`.
|
|
|
|
|
|
See {ref}/query-dsl-match-query.html[Match Query]
|
|
|
|
|
|
-
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-QueryBuilder qb = QueryBuilders.matchQuery("name", "kimchy elasticsearch");
|
|
|
+QueryBuilder qb = matchQuery(
|
|
|
+ "name", <1>
|
|
|
+ "kimchy elasticsearch" <2>
|
|
|
+);
|
|
|
--------------------------------------------------
|
|
|
+<1> field
|
|
|
+<2> text
|
|
|
|
|
|
|
|
|
[[multimatch]]
|
|
@@ -42,11 +47,13 @@ Query]
|
|
|
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-QueryBuilder qb = QueryBuilders.multiMatchQuery(
|
|
|
- "kimchy elasticsearch", // Text you are looking for
|
|
|
- "user", "message" // Fields you query on
|
|
|
- );
|
|
|
+QueryBuilder qb = multiMatchQuery(
|
|
|
+ "kimchy elasticsearch", <1>
|
|
|
+ "user", "message" <2>
|
|
|
+);
|
|
|
--------------------------------------------------
|
|
|
+<1> text
|
|
|
+<2> fields
|
|
|
|
|
|
|
|
|
[[bool]]
|
|
@@ -54,16 +61,17 @@ QueryBuilder qb = QueryBuilders.multiMatchQuery(
|
|
|
|
|
|
See {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"));
|
|
|
+QueryBuilder qb = boolQuery()
|
|
|
+ .must(termQuery("content", "test1")) <1>
|
|
|
+ .must(termQuery("content", "test4")) <1>
|
|
|
+ .mustNot(termQuery("content", "test2")) <2>
|
|
|
+ .should(termQuery("content", "test3")); <3>
|
|
|
--------------------------------------------------
|
|
|
+<1> must query
|
|
|
+<2> must not query
|
|
|
+<3> should query
|
|
|
|
|
|
|
|
|
[[boosting]]
|
|
@@ -71,26 +79,27 @@ QueryBuilder qb = QueryBuilders
|
|
|
|
|
|
See {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);
|
|
|
+QueryBuilder qb = boostingQuery()
|
|
|
+ .positive(termQuery("name","kimchy")) <1>
|
|
|
+ .negative(termQuery("name","dadoonet")) <2>
|
|
|
+ .negativeBoost(0.2f); <3>
|
|
|
--------------------------------------------------
|
|
|
-
|
|
|
+<1> query that will promote documents
|
|
|
+<2> query that will demote documents
|
|
|
+<3> negative boost
|
|
|
|
|
|
[[ids]]
|
|
|
=== IDs Query
|
|
|
|
|
|
See {ref}/query-dsl-ids-query.html[IDs Query]
|
|
|
|
|
|
-
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-QueryBuilders.idsQuery().ids("1", "2");
|
|
|
+QueryBuilder qb = idsQuery().ids("1", "2"); <1>
|
|
|
--------------------------------------------------
|
|
|
+<1> document ids
|
|
|
|
|
|
[[constant-score]]
|
|
|
=== Constant Score Query
|
|
@@ -100,15 +109,23 @@ Score Query]
|
|
|
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-// Using with Filters
|
|
|
-QueryBuilders.constantScoreQuery(FilterBuilders.termFilter("name","kimchy"))
|
|
|
- .boost(2.0f);
|
|
|
-
|
|
|
-// With Queries
|
|
|
-QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("name","kimchy"))
|
|
|
- .boost(2.0f);
|
|
|
+QueryBuilder qb = constantScoreQuery(
|
|
|
+ termFilter("name","kimchy") <1>
|
|
|
+ )
|
|
|
+ .boost(2.0f); <2>
|
|
|
--------------------------------------------------
|
|
|
+<1> you can use a filter
|
|
|
+<2> filter score
|
|
|
|
|
|
+[source,java]
|
|
|
+--------------------------------------------------
|
|
|
+QueryBuilder qb = constantScoreQuery(
|
|
|
+ termQuery("name","kimchy") <1>
|
|
|
+ )
|
|
|
+ .boost(2.0f); <2>
|
|
|
+--------------------------------------------------
|
|
|
+<1> you can use a query
|
|
|
+<2> query score
|
|
|
|
|
|
[[dismax]]
|
|
|
=== Disjunction Max Query
|
|
@@ -118,12 +135,16 @@ Query]
|
|
|
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-QueryBuilders.disMaxQuery()
|
|
|
- .add(QueryBuilders.termQuery("name","kimchy")) // Your queries
|
|
|
- .add(QueryBuilders.termQuery("name","elasticsearch")) // Your queries
|
|
|
- .boost(1.2f)
|
|
|
- .tieBreaker(0.7f);
|
|
|
+QueryBuilder qb = disMaxQuery()
|
|
|
+ .add(termQuery("name","kimchy")) <1>
|
|
|
+ .add(termQuery("name","elasticsearch")) <2>
|
|
|
+ .boost(1.2f) <3>
|
|
|
+ .tieBreaker(0.7f); <4>
|
|
|
--------------------------------------------------
|
|
|
+<1> add your queries
|
|
|
+<2> add your queries
|
|
|
+<3> boost factor
|
|
|
+<4> tie breaker
|
|
|
|
|
|
|
|
|
[[flt]]
|
|
@@ -135,17 +156,23 @@ See:
|
|
|
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-// flt Query
|
|
|
-QueryBuilders.fuzzyLikeThisQuery("name.first", "name.last") // Fields
|
|
|
- .likeText("text like this one") // Text
|
|
|
- .maxQueryTerms(12); // Max num of Terms
|
|
|
- // in generated queries
|
|
|
+QueryBuilder qb = fuzzyLikeThisQuery("name.first", "name.last") <1>
|
|
|
+ .likeText("text like this one") <2>
|
|
|
+ .maxQueryTerms(12); <3>
|
|
|
+--------------------------------------------------
|
|
|
+<1> fields
|
|
|
+<2> text
|
|
|
+<3> max num of Terms in generated queries
|
|
|
|
|
|
-// flt_field Query
|
|
|
-QueryBuilders.fuzzyLikeThisFieldQuery("name.first") // Only on single field
|
|
|
- .likeText("text like this one")
|
|
|
- .maxQueryTerms(12);
|
|
|
+[source,java]
|
|
|
+--------------------------------------------------
|
|
|
+QueryBuilder qb = fuzzyLikeThisFieldQuery("name.first") <1>
|
|
|
+ .likeText("text like this one") <2>
|
|
|
+ .maxQueryTerms(12); <3>
|
|
|
--------------------------------------------------
|
|
|
+<1> field
|
|
|
+<2> text
|
|
|
+<3> max num of Terms in generated queries
|
|
|
|
|
|
|
|
|
[[fuzzy]]
|
|
@@ -153,11 +180,15 @@ QueryBuilders.fuzzyLikeThisFieldQuery("name.first") // Only on singl
|
|
|
|
|
|
See {ref}/query-dsl-fuzzy-query.html[Fuzzy Query]
|
|
|
|
|
|
-
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-QueryBuilder qb = QueryBuilders.fuzzyQuery("name", "kimzhy");
|
|
|
+QueryBuilder qb = fuzzyQuery(
|
|
|
+ "name", <1>
|
|
|
+ "kimzhy" <2>
|
|
|
+);
|
|
|
--------------------------------------------------
|
|
|
+<1> field
|
|
|
+<2> text
|
|
|
|
|
|
|
|
|
[[has-child-parent]]
|
|
@@ -170,13 +201,24 @@ See:
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
// Has Child
|
|
|
-QueryBuilders.hasChildQuery("blog_tag",
|
|
|
- QueryBuilders.termQuery("tag","something"))
|
|
|
+QueryBuilder qb = hasChildQuery(
|
|
|
+ "blog_tag", <1>
|
|
|
+ termQuery("tag","something") <2>
|
|
|
+);
|
|
|
+--------------------------------------------------
|
|
|
+<1> child type to query against
|
|
|
+<2> query (could be also a filter)
|
|
|
|
|
|
// Has Parent
|
|
|
-QueryBuilders.hasParentQuery("blog",
|
|
|
- QueryBuilders.termQuery("tag","something"));
|
|
|
+[source,java]
|
|
|
+--------------------------------------------------
|
|
|
+QueryBuilder qb = hasParentQuery(
|
|
|
+ "blog", <1>
|
|
|
+ termQuery("tag","something") <2>
|
|
|
+);
|
|
|
--------------------------------------------------
|
|
|
+<1> parent type to query against
|
|
|
+<2> query (could be also a filter)
|
|
|
|
|
|
|
|
|
[[match-all]]
|
|
@@ -187,7 +229,7 @@ Query]
|
|
|
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-QueryBuilder qb = QueryBuilders.matchAllQuery();
|
|
|
+QueryBuilder qb = matchAllQuery();
|
|
|
--------------------------------------------------
|
|
|
|
|
|
|
|
@@ -201,18 +243,28 @@ See:
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
// mlt Query
|
|
|
-QueryBuilders.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
|
|
|
+QueryBuilder qb = moreLikeThisQuery("name.first", "name.last") <1>
|
|
|
+ .likeText("text like this one") <2>
|
|
|
+ .minTermFreq(1) <3>
|
|
|
+ .maxQueryTerms(12); <4>
|
|
|
+--------------------------------------------------
|
|
|
+<1> fields
|
|
|
+<2> text
|
|
|
+<3> ignore threshold
|
|
|
+<4> max num of Terms in generated queries
|
|
|
|
|
|
+[source,java]
|
|
|
+--------------------------------------------------
|
|
|
// mlt_field Query
|
|
|
-QueryBuilders.moreLikeThisFieldQuery("name.first") // Only on single field
|
|
|
- .likeText("text like this one")
|
|
|
- .minTermFreq(1)
|
|
|
- .maxQueryTerms(12);
|
|
|
+QueryBuilder qb = moreLikeThisFieldQuery("name.first") <1>
|
|
|
+ .likeText("text like this one") <2>
|
|
|
+ .minTermFreq(1) <3>
|
|
|
+ .maxQueryTerms(12); <4>
|
|
|
--------------------------------------------------
|
|
|
+<1> field
|
|
|
+<2> text
|
|
|
+<3> ignore threshold
|
|
|
+<4> max num of Terms in generated queries
|
|
|
|
|
|
|
|
|
[[prefix]]
|
|
@@ -222,8 +274,13 @@ See {ref}/query-dsl-prefix-query.html[Prefix Query]
|
|
|
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-QueryBuilders.prefixQuery("brand", "heine");
|
|
|
+QueryBuilder qb = prefixQuery(
|
|
|
+ "brand", <1>
|
|
|
+ "heine" <2>
|
|
|
+);
|
|
|
--------------------------------------------------
|
|
|
+<1> field
|
|
|
+<2> prefix
|
|
|
|
|
|
|
|
|
[[query-string]]
|
|
@@ -233,8 +290,9 @@ See {ref}/query-dsl-query-string-query.html[QueryString Query]
|
|
|
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-QueryBuilder qb = QueryBuilders.queryString("+kimchy -elasticsearch");
|
|
|
+QueryBuilder qb = queryString("+kimchy -elasticsearch"); <1>
|
|
|
--------------------------------------------------
|
|
|
+<1> text
|
|
|
|
|
|
|
|
|
[[java-range]]
|
|
@@ -244,55 +302,85 @@ See {ref}/query-dsl-range-query.html[Range Query]
|
|
|
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-QueryBuilder qb = QueryBuilders
|
|
|
- .rangeQuery("price")
|
|
|
- .from(5)
|
|
|
- .to(10)
|
|
|
- .includeLower(true)
|
|
|
- .includeUpper(false);
|
|
|
+QueryBuilder qb = rangeQuery("price") <1>
|
|
|
+ .from(5) <2>
|
|
|
+ .to(10) <3>
|
|
|
+ .includeLower(true) <4>
|
|
|
+ .includeUpper(false); <5>
|
|
|
--------------------------------------------------
|
|
|
+<1> field
|
|
|
+<2> from
|
|
|
+<3> to
|
|
|
+<4> include lower value means that `from` is `gt` when `false` or `gte` when `true`
|
|
|
+<5> include upper value means that `to` is `lt` when `false` or `lte` when `true`
|
|
|
|
|
|
|
|
|
=== Span Queries (first, near, not, or, term)
|
|
|
|
|
|
See:
|
|
|
+ * {ref}/query-dsl-span-term-query.html[Span Term Query]
|
|
|
* {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 Term
|
|
|
+QueryBuilder qb = spanTermQuery(
|
|
|
+ "user", <1>
|
|
|
+ "kimchy" <2>
|
|
|
+);
|
|
|
+--------------------------------------------------
|
|
|
+<1> field
|
|
|
+<2> value
|
|
|
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
// Span First
|
|
|
-QueryBuilders.spanFirstQuery(
|
|
|
- QueryBuilders.spanTermQuery("user", "kimchy"), // Query
|
|
|
- 3 // Max End position
|
|
|
- );
|
|
|
+QueryBuilder qb = spanFirstQuery(
|
|
|
+ spanTermQuery("user", "kimchy"), <1>
|
|
|
+ 3 <2>
|
|
|
+);
|
|
|
+--------------------------------------------------
|
|
|
+<1> query
|
|
|
+<2> max end position
|
|
|
|
|
|
+[source,java]
|
|
|
+--------------------------------------------------
|
|
|
// Span Near
|
|
|
-QueryBuilders.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);
|
|
|
+QueryBuilder qb = spanNearQuery()
|
|
|
+ .clause(spanTermQuery("field","value1")) <1>
|
|
|
+ .clause(spanTermQuery("field","value2")) <1>
|
|
|
+ .clause(spanTermQuery("field","value3")) <1>
|
|
|
+ .slop(12) <2>
|
|
|
+ .inOrder(false) <3>
|
|
|
+ .collectPayloads(false); <4>
|
|
|
+--------------------------------------------------
|
|
|
+<1> span term queries
|
|
|
+<2> slop factor: the maximum number of intervening unmatched positions
|
|
|
+<3> whether matches are required to be in-order
|
|
|
+<4> collect payloads or not
|
|
|
|
|
|
+[source,java]
|
|
|
+--------------------------------------------------
|
|
|
// Span Not
|
|
|
-QueryBuilders.spanNotQuery()
|
|
|
- .include(QueryBuilders.spanTermQuery("field","value1"))
|
|
|
- .exclude(QueryBuilders.spanTermQuery("field","value2"));
|
|
|
+QueryBuilder qb = spanNotQuery()
|
|
|
+ .include(spanTermQuery("field","value1")) <1>
|
|
|
+ .exclude(spanTermQuery("field","value2")); <2>
|
|
|
+--------------------------------------------------
|
|
|
+<1> span query whose matches are filtered
|
|
|
+<2> span query whose matches must not overlap those returned
|
|
|
|
|
|
+[source,java]
|
|
|
+--------------------------------------------------
|
|
|
// Span Or
|
|
|
-QueryBuilders.spanOrQuery()
|
|
|
- .clause(QueryBuilders.spanTermQuery("field","value1"))
|
|
|
- .clause(QueryBuilders.spanTermQuery("field","value2"))
|
|
|
- .clause(QueryBuilders.spanTermQuery("field","value3"));
|
|
|
-
|
|
|
-// Span Term
|
|
|
-QueryBuilders.spanTermQuery("user","kimchy");
|
|
|
+QueryBuilder qb = spanOrQuery()
|
|
|
+ .clause(spanTermQuery("field","value1")) <1>
|
|
|
+ .clause(spanTermQuery("field","value2")) <1>
|
|
|
+ .clause(spanTermQuery("field","value3")); <1>
|
|
|
--------------------------------------------------
|
|
|
+<1> span term queries
|
|
|
|
|
|
|
|
|
[[term]]
|
|
@@ -302,9 +390,12 @@ See {ref}/query-dsl-term-query.html[Term Query]
|
|
|
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-QueryBuilder qb = QueryBuilders.termQuery("name", "kimchy");
|
|
|
+QueryBuilder qb = termQuery(
|
|
|
+ "name", <1>
|
|
|
+ "kimchy"); <2>
|
|
|
--------------------------------------------------
|
|
|
-
|
|
|
+<1> field
|
|
|
+<2> value
|
|
|
|
|
|
[[java-terms]]
|
|
|
=== Terms Query
|
|
@@ -313,11 +404,13 @@ See {ref}/query-dsl-terms-query.html[Terms Query]
|
|
|
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-QueryBuilders.termsQuery("tags", // field
|
|
|
- "blue", "pill") // values
|
|
|
- .minimumMatch(1); // How many terms must match
|
|
|
+QueryBuilder qb = termsQuery("tags", <1>
|
|
|
+ "blue", "pill") <2>
|
|
|
+ .minimumMatch(1); <3>
|
|
|
--------------------------------------------------
|
|
|
-
|
|
|
+<1> field
|
|
|
+<2> values
|
|
|
+<3> how many terms must match at least
|
|
|
|
|
|
[[top-children]]
|
|
|
=== Top Children Query
|
|
@@ -326,68 +419,80 @@ See {ref}/query-dsl-top-children-query.html[Top Children Query]
|
|
|
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-QueryBuilders.topChildrenQuery(
|
|
|
- "blog_tag", // field
|
|
|
- QueryBuilders.termQuery("tag", "something") // Query
|
|
|
+QueryBuilder qb = topChildrenQuery(
|
|
|
+ "blog_tag", <1>
|
|
|
+ termQuery("tag", "something") <2>
|
|
|
)
|
|
|
- .score("max") // max, sum or avg
|
|
|
- .factor(5)
|
|
|
- .incrementalFactor(2);
|
|
|
+ .score("max") <3>
|
|
|
+ .factor(5) <4>
|
|
|
+ .incrementalFactor(2); <5>
|
|
|
--------------------------------------------------
|
|
|
-
|
|
|
+<1> field
|
|
|
+<2> query
|
|
|
+<3> `max`, `sum` or `avg`
|
|
|
+<4> how many hits are asked for in the first child query run (defaults to 5)
|
|
|
+<5> if not enough parents are found, and there are still more child docs to query, then the child search hits are
|
|
|
+ expanded by multiplying by the incremental_factor (defaults to 2).
|
|
|
|
|
|
[[wildcard]]
|
|
|
=== Wildcard Query
|
|
|
|
|
|
See {ref}/query-dsl-wildcard-query.html[Wildcard Query]
|
|
|
|
|
|
-
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
-QueryBuilders.wildcardQuery("user", "k?mc*");
|
|
|
+QueryBuilder qb = wildcardQuery("user", "k?mc*");
|
|
|
--------------------------------------------------
|
|
|
|
|
|
-
|
|
|
[[nested]]
|
|
|
=== Nested Query
|
|
|
|
|
|
See {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
|
|
|
+QueryBuilder qb = nestedQuery(
|
|
|
+ "obj1", <1>
|
|
|
+ boolQuery() <2>
|
|
|
+ .must(matchQuery("obj1.name", "blue"))
|
|
|
+ .must(rangeQuery("obj1.count").gt(5))
|
|
|
+ )
|
|
|
+ .scoreMode("avg"); <3>
|
|
|
--------------------------------------------------
|
|
|
-
|
|
|
-
|
|
|
+<1> path to nested document
|
|
|
+<2> your query. Any fields referenced inside the query must use the complete path (fully qualified).
|
|
|
+<3> score mode could be `max`, `total`, `avg` (default) or `none`
|
|
|
|
|
|
[[indices]]
|
|
|
=== Indices Query
|
|
|
|
|
|
See {ref}/query-dsl-indices-query.html[Indices Query]
|
|
|
|
|
|
-
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
// Using another query when no match for the main one
|
|
|
-QueryBuilders.indicesQuery(
|
|
|
- QueryBuilders.termQuery("tag", "wow"),
|
|
|
- "index1", "index2"
|
|
|
- )
|
|
|
- .noMatchQuery(QueryBuilders.termQuery("tag", "kow"));
|
|
|
+QueryBuilder qb = indicesQuery(
|
|
|
+ termQuery("tag", "wow"), <1>
|
|
|
+ "index1", "index2" <2>
|
|
|
+ )
|
|
|
+ .noMatchQuery(termQuery("tag", "kow")); <3>
|
|
|
+--------------------------------------------------
|
|
|
+<1> query to be executed on selected indices
|
|
|
+<2> selected indices
|
|
|
+<3> query to be executed on non matching indices
|
|
|
|
|
|
+[source,java]
|
|
|
+--------------------------------------------------
|
|
|
// Using all (match all) or none (match no documents)
|
|
|
-QueryBuilders.indicesQuery(
|
|
|
- QueryBuilders.termQuery("tag", "wow"),
|
|
|
- "index1", "index2"
|
|
|
- )
|
|
|
- .noMatchQuery("all"); // all or none
|
|
|
+QueryBuilder qb = indicesQuery(
|
|
|
+ termQuery("tag", "wow"), <1>
|
|
|
+ "index1", "index2" <2>
|
|
|
+ )
|
|
|
+ .noMatchQuery("all"); <3>
|
|
|
--------------------------------------------------
|
|
|
+<1> query to be executed on selected indices
|
|
|
+<2> selected indices
|
|
|
+<3> `none` (to match no documents), and `all` (to match all documents). Defaults to `all`.
|
|
|
|
|
|
|
|
|
[[geo-shape]]
|
|
@@ -395,23 +500,22 @@ QueryBuilders.indicesQuery(
|
|
|
|
|
|
See {ref}/query-dsl-geo-shape-query.html[GeoShape Query]
|
|
|
|
|
|
-
|
|
|
Note: the `geo_shape` type uses `Spatial4J` and `JTS`, both of which are
|
|
|
optional dependencies. Consequently you must add `Spatial4J` and `JTS`
|
|
|
to your classpath in order to use this type:
|
|
|
|
|
|
-[source,java]
|
|
|
+[source,xml]
|
|
|
--------------------------------------------------
|
|
|
<dependency>
|
|
|
<groupId>com.spatial4j</groupId>
|
|
|
<artifactId>spatial4j</artifactId>
|
|
|
- <version>0.3</version>
|
|
|
+ <version>0.4.1</version> <1>
|
|
|
</dependency>
|
|
|
|
|
|
<dependency>
|
|
|
<groupId>com.vividsolutions</groupId>
|
|
|
<artifactId>jts</artifactId>
|
|
|
- <version>1.12</version>
|
|
|
+ <version>1.13</version> <2>
|
|
|
<exclusions>
|
|
|
<exclusion>
|
|
|
<groupId>xerces</groupId>
|
|
@@ -420,6 +524,8 @@ to your classpath in order to use this type:
|
|
|
</exclusions>
|
|
|
</dependency>
|
|
|
--------------------------------------------------
|
|
|
+<1> check for updates in http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.spatial4j%22%20AND%20a%3A%22spatial4j%22[Maven Central]
|
|
|
+<2> check for updates in http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.vividsolutions%22%20AND%20a%3A%22jts%22[Maven Central]
|
|
|
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
@@ -435,16 +541,39 @@ import org.elasticsearch.common.geo.ShapeRelation;
|
|
|
[source,java]
|
|
|
--------------------------------------------------
|
|
|
// Shape within another
|
|
|
-QueryBuilders.geoShapeQuery("location",
|
|
|
- new RectangleImpl(0,10,0,10,SpatialContext.GEO))
|
|
|
- .relation(ShapeRelation.WITHIN);
|
|
|
+QueryBuilder qb = geoShapeQuery(
|
|
|
+ "location", <1>
|
|
|
+ new RectangleImpl(0,10,0,10,SpatialContext.GEO) <2>
|
|
|
+ )
|
|
|
+ .relation(ShapeRelation.WITHIN); <3>
|
|
|
+--------------------------------------------------
|
|
|
+<1> field
|
|
|
+<2> shape
|
|
|
+<3> relation
|
|
|
|
|
|
+[source,java]
|
|
|
+--------------------------------------------------
|
|
|
// Intersect shapes
|
|
|
-QueryBuilders.geoShapeQuery("location",
|
|
|
- new PointImpl(0, 0, SpatialContext.GEO))
|
|
|
- .relation(ShapeRelation.INTERSECTS);
|
|
|
+QueryBuilder qb = geoShapeQuery(
|
|
|
+ "location", <1>
|
|
|
+ new PointImpl(0, 0, SpatialContext.GEO) <2>
|
|
|
+ )
|
|
|
+ .relation(ShapeRelation.INTERSECTS); <3>
|
|
|
+--------------------------------------------------
|
|
|
+<1> field
|
|
|
+<2> shape
|
|
|
+<3> relation
|
|
|
|
|
|
-// Using pre-indexed shapes
|
|
|
-QueryBuilders.geoShapeQuery("location", "New Zealand", "countries")
|
|
|
- .relation(ShapeRelation.DISJOINT);
|
|
|
+[source,java]
|
|
|
--------------------------------------------------
|
|
|
+// Using pre-indexed shapes
|
|
|
+QueryBuilder qb = geoShapeQuery(
|
|
|
+ "location", <1>
|
|
|
+ "New Zealand", <2>
|
|
|
+ "countries") <3>
|
|
|
+ .relation(ShapeRelation.DISJOINT); <4>
|
|
|
+--------------------------------------------------
|
|
|
+<1> field
|
|
|
+<2> indexed shape id
|
|
|
+<3> index type of the indexed shapes
|
|
|
+<4> relation
|