diff --git a/rest-api-spec/api/count.json b/rest-api-spec/api/count.json index af3735104f837..808d02aa62871 100644 --- a/rest-api-spec/api/count.json +++ b/rest-api-spec/api/count.json @@ -41,7 +41,7 @@ } }, "body": { - "description" : "A query to restrict the results (optional)" + "description" : "A query to restrict the results specified with the Query DSL (optional)" } } } diff --git a/rest-api-spec/api/delete_by_query.json b/rest-api-spec/api/delete_by_query.json index c5e5f93baeec7..87c8ed979fbbd 100644 --- a/rest-api-spec/api/delete_by_query.json +++ b/rest-api-spec/api/delete_by_query.json @@ -67,7 +67,7 @@ } }, "body": { - "description" : "A query to restrict the operation" + "description" : "A query to restrict the operation specified with the Query DSL" } } } diff --git a/rest-api-spec/api/indices.validate_query.json b/rest-api-spec/api/indices.validate_query.json index a761ca3f7fdc6..8517da40987c4 100644 --- a/rest-api-spec/api/indices.validate_query.json +++ b/rest-api-spec/api/indices.validate_query.json @@ -40,7 +40,7 @@ } }, "body": { - "description" : "The query definition" + "description" : "The query definition specified with the Query DSL" } } } diff --git a/rest-api-spec/test/delete_by_query/10_basic.yaml b/rest-api-spec/test/delete_by_query/10_basic.yaml index 03a72a748babf..be5d3e8a6ebb5 100644 --- a/rest-api-spec/test/delete_by_query/10_basic.yaml +++ b/rest-api-spec/test/delete_by_query/10_basic.yaml @@ -28,8 +28,9 @@ delete_by_query: index: test_1 body: - match: - foo: bar + query: + match: + foo: bar - is_true: ok diff --git a/src/main/java/org/elasticsearch/action/admin/indices/mapping/delete/TransportDeleteMappingAction.java b/src/main/java/org/elasticsearch/action/admin/indices/mapping/delete/TransportDeleteMappingAction.java index 93008f890a042..fd4a81a8b5bc9 100644 --- a/src/main/java/org/elasticsearch/action/admin/indices/mapping/delete/TransportDeleteMappingAction.java +++ b/src/main/java/org/elasticsearch/action/admin/indices/mapping/delete/TransportDeleteMappingAction.java @@ -27,6 +27,7 @@ import org.elasticsearch.action.admin.indices.refresh.TransportRefreshAction; import org.elasticsearch.action.deletebyquery.DeleteByQueryResponse; import org.elasticsearch.action.deletebyquery.TransportDeleteByQueryAction; +import org.elasticsearch.action.support.QuerySourceBuilder; import org.elasticsearch.action.support.master.TransportMasterNodeOperationAction; import org.elasticsearch.client.Requests; import org.elasticsearch.cluster.ClusterService; @@ -102,7 +103,9 @@ protected void masterOperation(final DeleteMappingRequest request, final Cluster flushAction.execute(Requests.flushRequest(request.indices()), new ActionListener() { @Override public void onResponse(FlushResponse flushResponse) { - deleteByQueryAction.execute(Requests.deleteByQueryRequest(request.indices()).query(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.typeFilter(request.type()))), new ActionListener() { + QuerySourceBuilder querySourceBuilder = new QuerySourceBuilder() + .setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.typeFilter(request.type()))); + deleteByQueryAction.execute(Requests.deleteByQueryRequest(request.indices()).source(querySourceBuilder), new ActionListener() { @Override public void onResponse(DeleteByQueryResponse deleteByQueryResponse) { refreshAction.execute(Requests.refreshRequest(request.indices()), new ActionListener() { diff --git a/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ShardValidateQueryRequest.java b/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ShardValidateQueryRequest.java index f56fecc7db783..6eec76d2b0365 100644 --- a/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ShardValidateQueryRequest.java +++ b/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ShardValidateQueryRequest.java @@ -34,7 +34,7 @@ */ class ShardValidateQueryRequest extends BroadcastShardOperationRequest { - private BytesReference querySource; + private BytesReference source; private String[] types = Strings.EMPTY_ARRAY; private boolean explain; private long nowInMillis; @@ -48,15 +48,15 @@ class ShardValidateQueryRequest extends BroadcastShardOperationRequest { public ShardValidateQueryRequest(String index, int shardId, @Nullable String[] filteringAliases, ValidateQueryRequest request) { super(index, shardId, request); - this.querySource = request.querySource(); + this.source = request.source(); this.types = request.types(); this.explain = request.explain(); this.filteringAliases = filteringAliases; this.nowInMillis = request.nowInMillis; } - public BytesReference querySource() { - return querySource; + public BytesReference source() { + return source; } public String[] types() { @@ -78,7 +78,7 @@ public long nowInMillis() { @Override public void readFrom(StreamInput in) throws IOException { super.readFrom(in); - querySource = in.readBytesReference(); + source = in.readBytesReference(); int typesSize = in.readVInt(); if (typesSize > 0) { @@ -107,7 +107,7 @@ public void readFrom(StreamInput in) throws IOException { @Override public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); - out.writeBytesReference(querySource); + out.writeBytesReference(source); out.writeVInt(types.length); for (String type : types) { diff --git a/src/main/java/org/elasticsearch/action/admin/indices/validate/query/TransportValidateQueryAction.java b/src/main/java/org/elasticsearch/action/admin/indices/validate/query/TransportValidateQueryAction.java index a3f42a667c778..f1b44d71b5b01 100644 --- a/src/main/java/org/elasticsearch/action/admin/indices/validate/query/TransportValidateQueryAction.java +++ b/src/main/java/org/elasticsearch/action/admin/indices/validate/query/TransportValidateQueryAction.java @@ -174,7 +174,7 @@ protected ShardValidateQueryResponse shardOperation(ShardValidateQueryRequest re boolean valid; String explanation = null; String error = null; - if (request.querySource().length() == 0) { + if (request.source().length() == 0) { valid = true; } else { SearchContext.setCurrent(new DefaultSearchContext(0, @@ -182,7 +182,7 @@ protected ShardValidateQueryResponse shardOperation(ShardValidateQueryRequest re null, indexShard.acquireSearcher("validate_query"), indexService, indexShard, scriptService, cacheRecycler)); try { - ParsedQuery parsedQuery = queryParserService.parse(request.querySource()); + ParsedQuery parsedQuery = queryParserService.parseQuery(request.source()); valid = true; if (request.explain()) { explanation = parsedQuery.query().toString(); diff --git a/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ValidateQueryRequest.java b/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ValidateQueryRequest.java index 544e5659b2fb4..614c93c3bf72a 100644 --- a/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ValidateQueryRequest.java +++ b/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ValidateQueryRequest.java @@ -21,6 +21,7 @@ import org.elasticsearch.ElasticSearchGenerationException; import org.elasticsearch.action.ActionRequestValidationException; +import org.elasticsearch.action.support.QuerySourceBuilder; import org.elasticsearch.action.support.broadcast.BroadcastOperationRequest; import org.elasticsearch.client.Requests; import org.elasticsearch.common.Strings; @@ -32,7 +33,6 @@ import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.common.xcontent.XContentType; -import org.elasticsearch.index.query.QueryBuilder; import java.io.IOException; import java.util.Arrays; @@ -41,15 +41,15 @@ /** * A request to validate a specific query. *

- *

The request requires the query source to be set either using {@link #query(org.elasticsearch.index.query.QueryBuilder)}, - * or {@link #query(byte[])}. + *

The request requires the query source to be set either using {@link #source(QuerySourceBuilder)}, + * or {@link #source(byte[])}. */ public class ValidateQueryRequest extends BroadcastOperationRequest { private static final XContentType contentType = Requests.CONTENT_TYPE; - private BytesReference querySource; - private boolean querySourceUnsafe; + private BytesReference source; + private boolean sourceUnsafe; private boolean explain; @@ -76,79 +76,74 @@ public ActionRequestValidationException validate() { @Override protected void beforeStart() { - if (querySourceUnsafe) { - querySource = querySource.copyBytesArray(); - querySourceUnsafe = false; + if (sourceUnsafe) { + source = source.copyBytesArray(); + sourceUnsafe = false; } } /** - * The query source to execute. + * The source to execute. */ - BytesReference querySource() { - return querySource; + BytesReference source() { + return source; } - /** - * The query source to execute. - * - * @see org.elasticsearch.index.query.QueryBuilders - */ - public ValidateQueryRequest query(QueryBuilder queryBuilder) { - this.querySource = queryBuilder.buildAsBytes(); - this.querySourceUnsafe = false; + public ValidateQueryRequest source(QuerySourceBuilder sourceBuilder) { + this.source = sourceBuilder.buildAsBytes(contentType); + this.sourceUnsafe = false; return this; } /** - * The query source to execute in the form of a map. + * The source to execute in the form of a map. */ - public ValidateQueryRequest query(Map querySource) { + public ValidateQueryRequest source(Map source) { try { XContentBuilder builder = XContentFactory.contentBuilder(contentType); - builder.map(querySource); - return query(builder); + builder.map(source); + return source(builder); } catch (IOException e) { - throw new ElasticSearchGenerationException("Failed to generate [" + querySource + "]", e); + throw new ElasticSearchGenerationException("Failed to generate [" + source + "]", e); } } - public ValidateQueryRequest query(XContentBuilder builder) { - this.querySource = builder.bytes(); - this.querySourceUnsafe = false; + public ValidateQueryRequest source(XContentBuilder builder) { + this.source = builder.bytes(); + this.sourceUnsafe = false; return this; } /** - * The query source to validate. It is preferable to use either {@link #query(byte[])} - * or {@link #query(org.elasticsearch.index.query.QueryBuilder)}. + * The query source to validate. It is preferable to use either {@link #source(byte[])} + * or {@link #source(QuerySourceBuilder)}. */ - public ValidateQueryRequest query(String querySource) { - this.querySource = new BytesArray(querySource); - this.querySourceUnsafe = false; + public ValidateQueryRequest source(String source) { + this.source = new BytesArray(source); + this.sourceUnsafe = false; return this; } /** - * The query source to validate. + * The source to validate. */ - public ValidateQueryRequest query(byte[] querySource) { - return query(querySource, 0, querySource.length, false); + public ValidateQueryRequest source(byte[] source) { + return source(source, 0, source.length, false); } /** - * The query source to validate. + * The source to validate. */ - public ValidateQueryRequest query(byte[] querySource, int offset, int length, boolean unsafe) { - return query(new BytesArray(querySource, offset, length), unsafe); + public ValidateQueryRequest source(byte[] source, int offset, int length, boolean unsafe) { + return source(new BytesArray(source, offset, length), unsafe); } /** - * The query source to validate. + * The source to validate. */ - public ValidateQueryRequest query(BytesReference querySource, boolean unsafe) { - this.querySource = querySource; - this.querySourceUnsafe = unsafe; + public ValidateQueryRequest source(BytesReference source, boolean unsafe) { + this.source = source; + this.sourceUnsafe = unsafe; return this; } @@ -185,8 +180,8 @@ public boolean explain() { public void readFrom(StreamInput in) throws IOException { super.readFrom(in); - querySourceUnsafe = false; - querySource = in.readBytesReference(); + sourceUnsafe = false; + source = in.readBytesReference(); int typesSize = in.readVInt(); if (typesSize > 0) { @@ -204,7 +199,7 @@ public void readFrom(StreamInput in) throws IOException { public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); - out.writeBytesReference(querySource); + out.writeBytesReference(source); out.writeVInt(types.length); for (String type : types) { @@ -218,10 +213,10 @@ public void writeTo(StreamOutput out) throws IOException { public String toString() { String sSource = "_na_"; try { - sSource = XContentHelper.convertToJson(querySource, false); + sSource = XContentHelper.convertToJson(source, false); } catch (Exception e) { // ignore } - return "[" + Arrays.toString(indices) + "]" + Arrays.toString(types) + ", querySource[" + sSource + "], explain:" + explain; + return "[" + Arrays.toString(indices) + "]" + Arrays.toString(types) + ", source[" + sSource + "], explain:" + explain; } } diff --git a/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ValidateQueryRequestBuilder.java b/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ValidateQueryRequestBuilder.java index c0c6477a39c14..dfe526dbc9d51 100644 --- a/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ValidateQueryRequestBuilder.java +++ b/src/main/java/org/elasticsearch/action/admin/indices/validate/query/ValidateQueryRequestBuilder.java @@ -20,6 +20,7 @@ package org.elasticsearch.action.admin.indices.validate.query; import org.elasticsearch.action.ActionListener; +import org.elasticsearch.action.support.QuerySourceBuilder; import org.elasticsearch.action.support.broadcast.BroadcastOperationRequestBuilder; import org.elasticsearch.client.IndicesAdminClient; import org.elasticsearch.client.internal.InternalIndicesAdminClient; @@ -31,6 +32,8 @@ */ public class ValidateQueryRequestBuilder extends BroadcastOperationRequestBuilder { + private QuerySourceBuilder sourceBuilder; + public ValidateQueryRequestBuilder(IndicesAdminClient client) { super((InternalIndicesAdminClient) client, new ValidateQueryRequest()); } @@ -49,37 +52,37 @@ public ValidateQueryRequestBuilder setTypes(String... types) { * @see org.elasticsearch.index.query.QueryBuilders */ public ValidateQueryRequestBuilder setQuery(QueryBuilder queryBuilder) { - request.query(queryBuilder); + sourceBuilder().setQuery(queryBuilder); return this; } /** - * The query source to validate. + * The source to validate. * * @see org.elasticsearch.index.query.QueryBuilders */ - public ValidateQueryRequestBuilder setQuery(BytesReference querySource) { - request.query(querySource, false); + public ValidateQueryRequestBuilder setSource(BytesReference source) { + request().source(source, false); return this; } /** - * The query source to validate. + * The source to validate. * * @see org.elasticsearch.index.query.QueryBuilders */ - public ValidateQueryRequestBuilder setQuery(BytesReference querySource, boolean unsafe) { - request.query(querySource, unsafe); + public ValidateQueryRequestBuilder setSource(BytesReference source, boolean unsafe) { + request().source(source, unsafe); return this; } /** - * The query source to validate. + * The source to validate. * * @see org.elasticsearch.index.query.QueryBuilders */ - public ValidateQueryRequestBuilder setQuery(byte[] querySource) { - request.query(querySource); + public ValidateQueryRequestBuilder setSource(byte[] source) { + request.source(source); return this; } @@ -95,6 +98,17 @@ public ValidateQueryRequestBuilder setExplain(boolean explain) { @Override protected void doExecute(ActionListener listener) { + if (sourceBuilder != null) { + request.source(sourceBuilder); + } + ((IndicesAdminClient) client).validateQuery(request, listener); } + + private QuerySourceBuilder sourceBuilder() { + if (sourceBuilder == null) { + sourceBuilder = new QuerySourceBuilder(); + } + return sourceBuilder; + } } diff --git a/src/main/java/org/elasticsearch/action/count/CountRequest.java b/src/main/java/org/elasticsearch/action/count/CountRequest.java index 395f301adcd95..c1c99dcb47676 100644 --- a/src/main/java/org/elasticsearch/action/count/CountRequest.java +++ b/src/main/java/org/elasticsearch/action/count/CountRequest.java @@ -21,6 +21,7 @@ import org.elasticsearch.ElasticSearchGenerationException; import org.elasticsearch.action.ActionRequestValidationException; +import org.elasticsearch.action.support.QuerySourceBuilder; import org.elasticsearch.action.support.broadcast.BroadcastOperationRequest; import org.elasticsearch.client.Requests; import org.elasticsearch.common.Nullable; @@ -33,7 +34,6 @@ import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.common.xcontent.XContentType; -import org.elasticsearch.index.query.QueryBuilder; import java.io.IOException; import java.util.Arrays; @@ -43,8 +43,8 @@ * A request to count the number of documents matching a specific query. Best created with * {@link org.elasticsearch.client.Requests#countRequest(String...)}. *

- *

The request requires the query source to be set either using {@link #query(org.elasticsearch.index.query.QueryBuilder)}, - * or {@link #query(byte[])}. + *

The request requires the query source to be set either using {@link #source(QuerySourceBuilder)}, + * or {@link #source(byte[])}. * * @see CountResponse * @see org.elasticsearch.client.Client#count(CountRequest) @@ -64,8 +64,8 @@ public class CountRequest extends BroadcastOperationRequest { @Nullable private String preference; - private BytesReference querySource; - private boolean querySourceUnsafe; + private BytesReference source; + private boolean sourceUnsafe; private String[] types = Strings.EMPTY_ARRAY; @@ -90,9 +90,9 @@ public ActionRequestValidationException validate() { @Override protected void beforeStart() { - if (querySourceUnsafe) { - querySource = querySource.copyBytesArray(); - querySourceUnsafe = false; + if (sourceUnsafe) { + source = source.copyBytesArray(); + sourceUnsafe = false; } } @@ -113,69 +113,67 @@ public CountRequest minScore(float minScore) { } /** - * The query source to execute. + * The source to execute. */ - BytesReference querySource() { - return querySource; + BytesReference source() { + return source; } /** - * The query source to execute. - * - * @see org.elasticsearch.index.query.QueryBuilders + * The source to execute. */ - public CountRequest query(QueryBuilder queryBuilder) { - this.querySource = queryBuilder.buildAsBytes(); - this.querySourceUnsafe = false; + public CountRequest source(QuerySourceBuilder sourceBuilder) { + this.source = sourceBuilder.buildAsBytes(contentType); + this.sourceUnsafe = false; return this; } /** - * The query source to execute in the form of a map. + * The source to execute in the form of a map. */ - public CountRequest query(Map querySource) { + public CountRequest source(Map querySource) { try { XContentBuilder builder = XContentFactory.contentBuilder(contentType); builder.map(querySource); - return query(builder); + return source(builder); } catch (IOException e) { throw new ElasticSearchGenerationException("Failed to generate [" + querySource + "]", e); } } - public CountRequest query(XContentBuilder builder) { - this.querySource = builder.bytes(); - this.querySourceUnsafe = false; + public CountRequest source(XContentBuilder builder) { + this.source = builder.bytes(); + this.sourceUnsafe = false; return this; } /** - * The query source to execute. It is preferable to use either {@link #query(byte[])} - * or {@link #query(org.elasticsearch.index.query.QueryBuilder)}. + * The source to execute. It is preferable to use either {@link #source(byte[])} + * or {@link #source(QuerySourceBuilder)}. */ - public CountRequest query(String querySource) { - this.querySource = new BytesArray(querySource); - this.querySourceUnsafe = false; + public CountRequest source(String querySource) { + this.source = new BytesArray(querySource); + this.sourceUnsafe = false; return this; } /** - * The query source to execute. + * The source to execute. */ - public CountRequest query(byte[] querySource) { - return query(querySource, 0, querySource.length, false); + public CountRequest source(byte[] querySource) { + return source(querySource, 0, querySource.length, false); } /** - * The query source to execute. + * The source to execute. */ - public CountRequest query(byte[] querySource, int offset, int length, boolean unsafe) { - return query(new BytesArray(querySource, offset, length), unsafe); + public CountRequest source(byte[] querySource, int offset, int length, boolean unsafe) { + return source(new BytesArray(querySource, offset, length), unsafe); } - public CountRequest query(BytesReference querySource, boolean unsafe) { - this.querySource = querySource; - this.querySourceUnsafe = unsafe; + public CountRequest source(BytesReference querySource, boolean unsafe) { + this.source = querySource; + this.sourceUnsafe = unsafe; return this; } @@ -232,8 +230,8 @@ public void readFrom(StreamInput in) throws IOException { minScore = in.readFloat(); routing = in.readOptionalString(); preference = in.readOptionalString(); - querySourceUnsafe = false; - querySource = in.readBytesReference(); + sourceUnsafe = false; + source = in.readBytesReference(); types = in.readStringArray(); } @@ -243,7 +241,7 @@ public void writeTo(StreamOutput out) throws IOException { out.writeFloat(minScore); out.writeOptionalString(routing); out.writeOptionalString(preference); - out.writeBytesReference(querySource); + out.writeBytesReference(source); out.writeStringArray(types); } @@ -251,10 +249,10 @@ public void writeTo(StreamOutput out) throws IOException { public String toString() { String sSource = "_na_"; try { - sSource = XContentHelper.convertToJson(querySource, false); + sSource = XContentHelper.convertToJson(source, false); } catch (Exception e) { // ignore } - return "[" + Arrays.toString(indices) + "]" + Arrays.toString(types) + ", querySource[" + sSource + "]"; + return "[" + Arrays.toString(indices) + "]" + Arrays.toString(types) + ", source[" + sSource + "]"; } } diff --git a/src/main/java/org/elasticsearch/action/count/CountRequestBuilder.java b/src/main/java/org/elasticsearch/action/count/CountRequestBuilder.java index d31bb7935d196..75a8d14a9991b 100644 --- a/src/main/java/org/elasticsearch/action/count/CountRequestBuilder.java +++ b/src/main/java/org/elasticsearch/action/count/CountRequestBuilder.java @@ -20,6 +20,7 @@ package org.elasticsearch.action.count; import org.elasticsearch.action.ActionListener; +import org.elasticsearch.action.support.QuerySourceBuilder; import org.elasticsearch.action.support.broadcast.BroadcastOperationRequestBuilder; import org.elasticsearch.client.Client; import org.elasticsearch.client.internal.InternalClient; @@ -31,6 +32,8 @@ */ public class CountRequestBuilder extends BroadcastOperationRequestBuilder { + private QuerySourceBuilder sourceBuilder; + public CountRequestBuilder(Client client) { super((InternalClient) client, new CountRequest()); } @@ -85,42 +88,47 @@ public CountRequestBuilder setRouting(String... routing) { * @see org.elasticsearch.index.query.QueryBuilders */ public CountRequestBuilder setQuery(QueryBuilder queryBuilder) { - request.query(queryBuilder); + sourceBuilder().setQuery(queryBuilder); return this; } /** - * The query source to execute. - * - * @see org.elasticsearch.index.query.QueryBuilders + * The source to execute. */ - public CountRequestBuilder setQuery(BytesReference querySource) { - request.query(querySource, false); + public CountRequestBuilder setSource(BytesReference source) { + request().source(source, false); return this; } /** - * The query source to execute. - * - * @see org.elasticsearch.index.query.QueryBuilders + * The source to execute. */ - public CountRequestBuilder setQuery(BytesReference querySource, boolean unsafe) { - request.query(querySource, unsafe); + public CountRequestBuilder setSource(BytesReference source, boolean unsafe) { + request().source(source, unsafe); return this; } /** * The query source to execute. - * - * @see org.elasticsearch.index.query.QueryBuilders */ - public CountRequestBuilder setQuery(byte[] querySource) { - request.query(querySource); + public CountRequestBuilder setSource(byte[] querySource) { + request.source(querySource); return this; } @Override protected void doExecute(ActionListener listener) { + if (sourceBuilder != null) { + request.source(sourceBuilder); + } + ((InternalClient) client).count(request, listener); } + + private QuerySourceBuilder sourceBuilder() { + if (sourceBuilder == null) { + sourceBuilder = new QuerySourceBuilder(); + } + return sourceBuilder; + } } diff --git a/src/main/java/org/elasticsearch/action/count/ShardCountRequest.java b/src/main/java/org/elasticsearch/action/count/ShardCountRequest.java index 3c8bb95fb499d..5f8da4da95de7 100644 --- a/src/main/java/org/elasticsearch/action/count/ShardCountRequest.java +++ b/src/main/java/org/elasticsearch/action/count/ShardCountRequest.java @@ -52,7 +52,7 @@ class ShardCountRequest extends BroadcastShardOperationRequest { public ShardCountRequest(String index, int shardId, @Nullable String[] filteringAliases, CountRequest request) { super(index, shardId, request); this.minScore = request.minScore(); - this.querySource = request.querySource(); + this.querySource = request.source(); this.types = request.types(); this.filteringAliases = filteringAliases; this.nowInMillis = request.nowInMillis; diff --git a/src/main/java/org/elasticsearch/action/count/TransportCountAction.java b/src/main/java/org/elasticsearch/action/count/TransportCountAction.java index 076723b29c169..b2fdb4fe8fb1b 100644 --- a/src/main/java/org/elasticsearch/action/count/TransportCountAction.java +++ b/src/main/java/org/elasticsearch/action/count/TransportCountAction.java @@ -172,11 +172,11 @@ protected ShardCountResponse shardOperation(ShardCountRequest request) throws El if (request.minScore() != -1) { context.minimumScore(request.minScore()); } - BytesReference querySource = request.querySource(); - if (querySource != null && querySource.length() > 0) { + BytesReference source = request.querySource(); + if (source != null && source.length() > 0) { try { QueryParseContext.setTypes(request.types()); - context.parsedQuery(indexService.queryParserService().parse(querySource)); + context.parsedQuery(indexService.queryParserService().parseQuery(source)); } finally { QueryParseContext.removeTypes(); } diff --git a/src/main/java/org/elasticsearch/action/deletebyquery/DeleteByQueryRequest.java b/src/main/java/org/elasticsearch/action/deletebyquery/DeleteByQueryRequest.java index f0daa8e433982..49668e99aae49 100644 --- a/src/main/java/org/elasticsearch/action/deletebyquery/DeleteByQueryRequest.java +++ b/src/main/java/org/elasticsearch/action/deletebyquery/DeleteByQueryRequest.java @@ -22,6 +22,7 @@ import com.google.common.base.Charsets; import org.elasticsearch.ElasticSearchGenerationException; import org.elasticsearch.action.ActionRequestValidationException; +import org.elasticsearch.action.support.QuerySourceBuilder; import org.elasticsearch.action.support.replication.IndicesReplicationOperationRequest; import org.elasticsearch.client.Requests; import org.elasticsearch.common.Nullable; @@ -34,7 +35,6 @@ import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.common.xcontent.XContentType; -import org.elasticsearch.index.query.QueryBuilder; import java.io.IOException; import java.util.Arrays; @@ -46,8 +46,8 @@ * A request to delete all documents that matching a specific query. Best created with * {@link org.elasticsearch.client.Requests#deleteByQueryRequest(String...)}. *

- *

The request requires the query source to be set either using {@link #query(org.elasticsearch.index.query.QueryBuilder)}, - * or {@link #query(byte[])}. + *

The request requires the source to be set either using {@link #source(QuerySourceBuilder)}, + * or {@link #source(byte[])}. * * @see DeleteByQueryResponse * @see org.elasticsearch.client.Requests#deleteByQueryRequest(String...) @@ -57,8 +57,8 @@ public class DeleteByQueryRequest extends IndicesReplicationOperationRequest { + private QuerySourceBuilder sourceBuilder; + public DeleteByQueryRequestBuilder(Client client) { super((InternalClient) client, new DeleteByQueryRequest()); } @@ -66,69 +69,69 @@ public DeleteByQueryRequestBuilder setRouting(String... routing) { /** - * The query source to execute. + * The query to delete documents for. * * @see org.elasticsearch.index.query.QueryBuilders */ public DeleteByQueryRequestBuilder setQuery(QueryBuilder queryBuilder) { - request.query(queryBuilder); + sourceBuilder().setQuery(queryBuilder); return this; } /** - * The query source to execute. It is preferable to use either {@link #setQuery(byte[])} - * or {@link #setQuery(org.elasticsearch.index.query.QueryBuilder)}. + * The source to execute. It is preferable to use either {@link #setSource(byte[])} + * or {@link #setQuery(QueryBuilder)}. */ - public DeleteByQueryRequestBuilder setQuery(String querySource) { - request.query(querySource); + public DeleteByQueryRequestBuilder setSource(String source) { + request().source(source); return this; } /** - * The query source to execute in the form of a map. + * The source to execute in the form of a map. */ - public DeleteByQueryRequestBuilder setQuery(Map querySource) { - request.query(querySource); + public DeleteByQueryRequestBuilder setSource(Map source) { + request().source(source); return this; } /** - * The query source to execute in the form of a builder. + * The source to execute in the form of a builder. */ - public DeleteByQueryRequestBuilder setQuery(XContentBuilder builder) { - request.query(builder); + public DeleteByQueryRequestBuilder setSource(XContentBuilder builder) { + request().source(builder); return this; } /** - * The query source to execute. + * The source to execute. */ - public DeleteByQueryRequestBuilder setQuery(byte[] querySource) { - request.query(querySource); + public DeleteByQueryRequestBuilder setSource(byte[] source) { + request().source(source); return this; } /** - * The query source to execute. + * The source to execute. */ - public DeleteByQueryRequestBuilder setQuery(BytesReference querySource) { - request.query(querySource, false); + public DeleteByQueryRequestBuilder setSource(BytesReference source) { + request().source(source, false); return this; } /** - * The query source to execute. + * The source to execute. */ - public DeleteByQueryRequestBuilder setQuery(BytesReference querySource, boolean unsafe) { - request.query(querySource, unsafe); + public DeleteByQueryRequestBuilder setSource(BytesReference source, boolean unsafe) { + request().source(source, unsafe); return this; } /** - * The query source to execute. + * The source to execute. */ - public DeleteByQueryRequestBuilder setQuery(byte[] querySource, int offset, int length, boolean unsafe) { - request.query(querySource, offset, length, unsafe); + public DeleteByQueryRequestBuilder setSource(byte[] source, int offset, int length, boolean unsafe) { + request().source(source, offset, length, unsafe); return this; } @@ -155,6 +158,17 @@ public DeleteByQueryRequestBuilder setConsistencyLevel(WriteConsistencyLevel con @Override protected void doExecute(ActionListener listener) { + if (sourceBuilder != null) { + request.source(sourceBuilder); + } + ((Client) client).deleteByQuery(request, listener); } + + private QuerySourceBuilder sourceBuilder() { + if (sourceBuilder == null) { + sourceBuilder = new QuerySourceBuilder(); + } + return sourceBuilder; + } } diff --git a/src/main/java/org/elasticsearch/action/deletebyquery/IndexDeleteByQueryRequest.java b/src/main/java/org/elasticsearch/action/deletebyquery/IndexDeleteByQueryRequest.java index 3e171f33fb535..f5f104da2dc55 100644 --- a/src/main/java/org/elasticsearch/action/deletebyquery/IndexDeleteByQueryRequest.java +++ b/src/main/java/org/elasticsearch/action/deletebyquery/IndexDeleteByQueryRequest.java @@ -39,7 +39,7 @@ */ public class IndexDeleteByQueryRequest extends IndexReplicationOperationRequest { - private BytesReference querySource; + private BytesReference source; private String[] types = Strings.EMPTY_ARRAY; @Nullable private Set routing; @@ -49,7 +49,7 @@ public class IndexDeleteByQueryRequest extends IndexReplicationOperationRequest< IndexDeleteByQueryRequest(DeleteByQueryRequest request, String index, @Nullable Set routing, @Nullable String[] filteringAliases) { this.index = index; this.timeout = request.timeout(); - this.querySource = request.querySource(); + this.source = request.source(); this.types = request.types(); this.replicationType = request.replicationType(); this.consistencyLevel = request.consistencyLevel(); @@ -60,15 +60,15 @@ public class IndexDeleteByQueryRequest extends IndexReplicationOperationRequest< IndexDeleteByQueryRequest() { } - BytesReference querySource() { - return querySource; + BytesReference source() { + return source; } @Override public ActionRequestValidationException validate() { ActionRequestValidationException validationException = super.validate(); - if (querySource == null) { - validationException = addValidationError("querySource is missing", validationException); + if (source == null) { + validationException = addValidationError("source is missing", validationException); } return validationException; } @@ -92,7 +92,7 @@ public IndexDeleteByQueryRequest timeout(TimeValue timeout) { public void readFrom(StreamInput in) throws IOException { super.readFrom(in); - querySource = in.readBytesReference(); + source = in.readBytesReference(); int typesSize = in.readVInt(); if (typesSize > 0) { types = new String[typesSize]; @@ -118,7 +118,7 @@ public void readFrom(StreamInput in) throws IOException { public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); - out.writeBytesReference(querySource); + out.writeBytesReference(source); out.writeVInt(types.length); for (String type : types) { out.writeString(type); diff --git a/src/main/java/org/elasticsearch/action/deletebyquery/ShardDeleteByQueryRequest.java b/src/main/java/org/elasticsearch/action/deletebyquery/ShardDeleteByQueryRequest.java index 005b2e1cb8673..37c710aab82c7 100644 --- a/src/main/java/org/elasticsearch/action/deletebyquery/ShardDeleteByQueryRequest.java +++ b/src/main/java/org/elasticsearch/action/deletebyquery/ShardDeleteByQueryRequest.java @@ -41,7 +41,7 @@ public class ShardDeleteByQueryRequest extends ShardReplicationOperationRequest { private int shardId; - private BytesReference querySource; + private BytesReference source; private String[] types = Strings.EMPTY_ARRAY; @Nullable private Set routing; @@ -51,7 +51,7 @@ public class ShardDeleteByQueryRequest extends ShardReplicationOperationRequest< ShardDeleteByQueryRequest(IndexDeleteByQueryRequest request, int shardId) { super(request); this.index = request.index(); - this.querySource = request.querySource(); + this.source = request.source(); this.types = request.types(); this.shardId = shardId; replicationType(request.replicationType()); @@ -67,8 +67,8 @@ public class ShardDeleteByQueryRequest extends ShardReplicationOperationRequest< @Override public ActionRequestValidationException validate() { ActionRequestValidationException validationException = super.validate(); - if (querySource == null) { - addValidationError("querySource is missing", validationException); + if (source == null) { + addValidationError("source is missing", validationException); } return validationException; } @@ -77,8 +77,8 @@ public int shardId() { return this.shardId; } - BytesReference querySource() { - return querySource; + BytesReference source() { + return source; } public String[] types() { @@ -96,7 +96,7 @@ public String[] filteringAliases() { @Override public void readFrom(StreamInput in) throws IOException { super.readFrom(in); - querySource = in.readBytesReference(); + source = in.readBytesReference(); shardId = in.readVInt(); types = in.readStringArray(); int routingSize = in.readVInt(); @@ -118,7 +118,7 @@ public void readFrom(StreamInput in) throws IOException { @Override public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); - out.writeBytesReference(querySource); + out.writeBytesReference(source); out.writeVInt(shardId); out.writeStringArray(types); if (routing != null) { @@ -143,7 +143,7 @@ public void writeTo(StreamOutput out) throws IOException { public String toString() { String sSource = "_na_"; try { - sSource = XContentHelper.convertToJson(querySource, false); + sSource = XContentHelper.convertToJson(source, false); } catch (Exception e) { // ignore } diff --git a/src/main/java/org/elasticsearch/action/deletebyquery/TransportShardDeleteByQueryAction.java b/src/main/java/org/elasticsearch/action/deletebyquery/TransportShardDeleteByQueryAction.java index 3b076f0e2372e..034d2ffc391fb 100644 --- a/src/main/java/org/elasticsearch/action/deletebyquery/TransportShardDeleteByQueryAction.java +++ b/src/main/java/org/elasticsearch/action/deletebyquery/TransportShardDeleteByQueryAction.java @@ -111,7 +111,7 @@ protected PrimaryResponse SearchContext.setCurrent(new DefaultSearchContext(0, new ShardSearchRequest().types(request.types()), null, indexShard.acquireSearcher("delete_by_query"), indexService, indexShard, scriptService, cacheRecycler)); try { - Engine.DeleteByQuery deleteByQuery = indexShard.prepareDeleteByQuery(request.querySource(), request.filteringAliases(), request.types()) + Engine.DeleteByQuery deleteByQuery = indexShard.prepareDeleteByQuery(request.source(), request.filteringAliases(), request.types()) .origin(Engine.Operation.Origin.PRIMARY); SearchContext.current().parsedQuery(new ParsedQuery(deleteByQuery.query(), ImmutableMap.of())); indexShard.deleteByQuery(deleteByQuery); @@ -133,7 +133,7 @@ protected void shardOperationOnReplica(ReplicaOperationRequest shardRequest) { SearchContext.setCurrent(new DefaultSearchContext(0, new ShardSearchRequest().types(request.types()), null, indexShard.acquireSearcher("delete_by_query", IndexShard.Mode.WRITE), indexService, indexShard, scriptService, cacheRecycler)); try { - Engine.DeleteByQuery deleteByQuery = indexShard.prepareDeleteByQuery(request.querySource(), request.filteringAliases(), request.types()) + Engine.DeleteByQuery deleteByQuery = indexShard.prepareDeleteByQuery(request.source(), request.filteringAliases(), request.types()) .origin(Engine.Operation.Origin.REPLICA); SearchContext.current().parsedQuery(new ParsedQuery(deleteByQuery.query(), ImmutableMap.of())); indexShard.deleteByQuery(deleteByQuery); diff --git a/src/main/java/org/elasticsearch/action/explain/ExplainRequest.java b/src/main/java/org/elasticsearch/action/explain/ExplainRequest.java index d14c6124812c3..4ccda0299c579 100644 --- a/src/main/java/org/elasticsearch/action/explain/ExplainRequest.java +++ b/src/main/java/org/elasticsearch/action/explain/ExplainRequest.java @@ -22,6 +22,7 @@ import org.elasticsearch.Version; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.ValidateActions; +import org.elasticsearch.action.support.QuerySourceBuilder; import org.elasticsearch.action.support.single.shard.SingleShardOperationRequest; import org.elasticsearch.client.Requests; import org.elasticsearch.common.Strings; @@ -114,7 +115,7 @@ public boolean sourceUnsafe() { return sourceUnsafe; } - public ExplainRequest source(ExplainSourceBuilder sourceBuilder) { + public ExplainRequest source(QuerySourceBuilder sourceBuilder) { this.source = sourceBuilder.buildAsBytes(contentType); this.sourceUnsafe = false; return this; diff --git a/src/main/java/org/elasticsearch/action/explain/ExplainRequestBuilder.java b/src/main/java/org/elasticsearch/action/explain/ExplainRequestBuilder.java index 358d88c8127c1..51bae212fce44 100644 --- a/src/main/java/org/elasticsearch/action/explain/ExplainRequestBuilder.java +++ b/src/main/java/org/elasticsearch/action/explain/ExplainRequestBuilder.java @@ -20,6 +20,7 @@ package org.elasticsearch.action.explain; import org.elasticsearch.action.ActionListener; +import org.elasticsearch.action.support.QuerySourceBuilder; import org.elasticsearch.action.support.single.shard.SingleShardOperationRequestBuilder; import org.elasticsearch.client.Client; import org.elasticsearch.client.internal.InternalClient; @@ -34,7 +35,7 @@ */ public class ExplainRequestBuilder extends SingleShardOperationRequestBuilder { - private ExplainSourceBuilder sourceBuilder; + private QuerySourceBuilder sourceBuilder; ExplainRequestBuilder(Client client) { super((InternalClient) client, new ExplainRequest()); @@ -183,9 +184,9 @@ protected void doExecute(ActionListener listener) { ((Client) client).explain(request, listener); } - private ExplainSourceBuilder sourceBuilder() { + private QuerySourceBuilder sourceBuilder() { if (sourceBuilder == null) { - sourceBuilder = new ExplainSourceBuilder(); + sourceBuilder = new QuerySourceBuilder(); } return sourceBuilder; } diff --git a/src/main/java/org/elasticsearch/action/explain/TransportExplainAction.java b/src/main/java/org/elasticsearch/action/explain/TransportExplainAction.java index 6732bff5c909b..7042e5ebbc617 100644 --- a/src/main/java/org/elasticsearch/action/explain/TransportExplainAction.java +++ b/src/main/java/org/elasticsearch/action/explain/TransportExplainAction.java @@ -32,14 +32,10 @@ import org.elasticsearch.cluster.routing.ShardIterator; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.xcontent.XContentFactory; -import org.elasticsearch.common.xcontent.XContentHelper; -import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.index.engine.Engine; import org.elasticsearch.index.get.GetResult; import org.elasticsearch.index.mapper.Uid; import org.elasticsearch.index.mapper.internal.UidFieldMapper; -import org.elasticsearch.index.query.ParsedQuery; import org.elasticsearch.index.service.IndexService; import org.elasticsearch.index.shard.service.IndexShard; import org.elasticsearch.indices.IndicesService; @@ -117,7 +113,7 @@ protected ExplainResponse shardOperation(ExplainRequest request, int shardId) th SearchContext.setCurrent(context); try { - context.parsedQuery(parseQuery(request, indexService)); + context.parsedQuery(indexService.queryParserService().parseQuery(request.source())); context.preProcess(); int topLevelDocId = result.docIdAndVersion().docId + result.docIdAndVersion().context.docBase; Explanation explanation; @@ -145,28 +141,6 @@ protected ExplainResponse shardOperation(ExplainRequest request, int shardId) th } } - private ParsedQuery parseQuery(ExplainRequest request, IndexService indexService) { - try { - XContentParser parser = XContentHelper.createParser(request.source()); - for (XContentParser.Token token = parser.nextToken(); token != XContentParser.Token.END_OBJECT; token = parser.nextToken()) { - if (token == XContentParser.Token.FIELD_NAME) { - String fieldName = parser.currentName(); - if ("query".equals(fieldName)) { - return indexService.queryParserService().parse(parser); - } else if ("query_binary".equals(fieldName)) { - byte[] querySource = parser.binaryValue(); - XContentParser qSourceParser = XContentFactory.xContent(querySource).createParser(querySource); - return indexService.queryParserService().parse(qSourceParser); - } - } - } - } catch (Exception e) { - throw new ElasticSearchException("Couldn't parse query from source.", e); - } - - throw new ElasticSearchException("No query specified"); - } - protected ExplainRequest newRequest() { return new ExplainRequest(); } diff --git a/src/main/java/org/elasticsearch/action/explain/ExplainSourceBuilder.java b/src/main/java/org/elasticsearch/action/support/QuerySourceBuilder.java similarity index 91% rename from src/main/java/org/elasticsearch/action/explain/ExplainSourceBuilder.java rename to src/main/java/org/elasticsearch/action/support/QuerySourceBuilder.java index e5d4060f6d4db..c12761b828fc4 100644 --- a/src/main/java/org/elasticsearch/action/explain/ExplainSourceBuilder.java +++ b/src/main/java/org/elasticsearch/action/support/QuerySourceBuilder.java @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.action.explain; +package org.elasticsearch.action.support; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.xcontent.ToXContent; @@ -29,18 +29,18 @@ import java.io.IOException; -public class ExplainSourceBuilder implements ToXContent { +public class QuerySourceBuilder implements ToXContent { private QueryBuilder queryBuilder; private BytesReference queryBinary; - public ExplainSourceBuilder setQuery(QueryBuilder query) { + public QuerySourceBuilder setQuery(QueryBuilder query) { this.queryBuilder = query; return this; } - public ExplainSourceBuilder setQuery(BytesReference queryBinary) { + public QuerySourceBuilder setQuery(BytesReference queryBinary) { this.queryBinary = queryBinary; return this; } diff --git a/src/main/java/org/elasticsearch/index/query/IndexQueryParserService.java b/src/main/java/org/elasticsearch/index/query/IndexQueryParserService.java index d73c7fff422cf..2cbabaa41f62b 100644 --- a/src/main/java/org/elasticsearch/index/query/IndexQueryParserService.java +++ b/src/main/java/org/elasticsearch/index/query/IndexQueryParserService.java @@ -31,6 +31,7 @@ import org.elasticsearch.common.lucene.search.Queries; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentFactory; +import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.index.AbstractIndexComponent; import org.elasticsearch.index.Index; @@ -279,6 +280,35 @@ public Query parseInnerQuery(XContentParser parser) throws IOException { return context.parseInnerQuery(); } + /** + * Selectively parses a query from a top level query or query_binary json field from the specified source. + */ + public ParsedQuery parseQuery(BytesReference source) { + try { + XContentParser parser = XContentHelper.createParser(source); + for (XContentParser.Token token = parser.nextToken(); token != XContentParser.Token.END_OBJECT; token = parser.nextToken()) { + if (token == XContentParser.Token.FIELD_NAME) { + String fieldName = parser.currentName(); + if ("query".equals(fieldName)) { + return parse(parser); + } else if ("query_binary".equals(fieldName) || "queryBinary".equals(fieldName)) { + byte[] querySource = parser.binaryValue(); + XContentParser qSourceParser = XContentFactory.xContent(querySource).createParser(querySource); + return parse(qSourceParser); + } else { + throw new QueryParsingException(index(), "request does not support [" + fieldName + "]"); + } + } + } + } catch (QueryParsingException e) { + throw e; + } catch (Throwable e) { + throw new QueryParsingException(index, "Failed to parse", e); + } + + throw new QueryParsingException(index(), "Required query is missing"); + } + private ParsedQuery parse(QueryParseContext parseContext, XContentParser parser) throws IOException, QueryParsingException { parseContext.reset(parser); Query query = parseContext.parseInnerQuery(); diff --git a/src/main/java/org/elasticsearch/index/shard/service/IndexShard.java b/src/main/java/org/elasticsearch/index/shard/service/IndexShard.java index 3273365f00061..d13f1687d7cc6 100644 --- a/src/main/java/org/elasticsearch/index/shard/service/IndexShard.java +++ b/src/main/java/org/elasticsearch/index/shard/service/IndexShard.java @@ -134,7 +134,7 @@ public interface IndexShard extends IndexShardComponent { void delete(Engine.Delete delete) throws ElasticSearchException; - Engine.DeleteByQuery prepareDeleteByQuery(BytesReference querySource, @Nullable String[] filteringAliases, String... types) throws ElasticSearchException; + Engine.DeleteByQuery prepareDeleteByQuery(BytesReference source, @Nullable String[] filteringAliases, String... types) throws ElasticSearchException; void deleteByQuery(Engine.DeleteByQuery deleteByQuery) throws ElasticSearchException; diff --git a/src/main/java/org/elasticsearch/index/shard/service/InternalIndexShard.java b/src/main/java/org/elasticsearch/index/shard/service/InternalIndexShard.java index 806e6812293e3..c25e0d3ba735b 100644 --- a/src/main/java/org/elasticsearch/index/shard/service/InternalIndexShard.java +++ b/src/main/java/org/elasticsearch/index/shard/service/InternalIndexShard.java @@ -435,17 +435,17 @@ public void delete(Engine.Delete delete) throws ElasticSearchException { } @Override - public Engine.DeleteByQuery prepareDeleteByQuery(BytesReference querySource, @Nullable String[] filteringAliases, String... types) throws ElasticSearchException { + public Engine.DeleteByQuery prepareDeleteByQuery(BytesReference source, @Nullable String[] filteringAliases, String... types) throws ElasticSearchException { long startTime = System.nanoTime(); if (types == null) { types = Strings.EMPTY_ARRAY; } - Query query = queryParserService.parse(querySource).query(); + Query query = queryParserService.parseQuery(source).query(); query = filterQueryIfNeeded(query, types); Filter aliasFilter = indexAliasesService.aliasFilter(filteringAliases); Filter parentFilter = mapperService.hasNested() ? indexCache.filter().cache(NonNestedDocsFilter.INSTANCE) : null; - return new Engine.DeleteByQuery(query, querySource, filteringAliases, aliasFilter, parentFilter, types).startTime(startTime); + return new Engine.DeleteByQuery(query, source, filteringAliases, aliasFilter, parentFilter, types).startTime(startTime); } @Override diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/validate/query/RestValidateQueryAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/validate/query/RestValidateQueryAction.java index af93be66abc65..d85d4b0bee1c9 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/validate/query/RestValidateQueryAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/validate/query/RestValidateQueryAction.java @@ -24,10 +24,10 @@ import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryRequest; import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryResponse; import org.elasticsearch.action.support.IgnoreIndices; +import org.elasticsearch.action.support.QuerySourceBuilder; import org.elasticsearch.action.support.broadcast.BroadcastOperationThreading; import org.elasticsearch.client.Client; import org.elasticsearch.common.Strings; -import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; @@ -74,15 +74,15 @@ public void handleRequest(final RestRequest request, final RestChannel channel) } validateQueryRequest.operationThreading(operationThreading); if (request.hasContent()) { - validateQueryRequest.query(request.content(), request.contentUnsafe()); + validateQueryRequest.source(request.content(), request.contentUnsafe()); } else { String source = request.param("source"); if (source != null) { - validateQueryRequest.query(source); + validateQueryRequest.source(source); } else { - BytesReference querySource = RestActions.parseQuerySource(request); - if (querySource != null) { - validateQueryRequest.query(querySource, false); + QuerySourceBuilder querySourceBuilder = RestActions.parseQuerySource(request); + if (querySourceBuilder != null) { + validateQueryRequest.source(querySourceBuilder); } } } diff --git a/src/main/java/org/elasticsearch/rest/action/cat/RestCountAction.java b/src/main/java/org/elasticsearch/rest/action/cat/RestCountAction.java index c3d8333f32610..b3bf43f054a9a 100644 --- a/src/main/java/org/elasticsearch/rest/action/cat/RestCountAction.java +++ b/src/main/java/org/elasticsearch/rest/action/cat/RestCountAction.java @@ -22,11 +22,11 @@ import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.count.CountRequest; import org.elasticsearch.action.count.CountResponse; +import org.elasticsearch.action.support.QuerySourceBuilder; import org.elasticsearch.action.support.broadcast.BroadcastOperationThreading; import org.elasticsearch.client.Client; import org.elasticsearch.common.Strings; import org.elasticsearch.common.Table; -import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.rest.RestChannel; @@ -65,11 +65,11 @@ public void doRequest(final RestRequest request, final RestChannel channel) { String source = request.param("source"); if (source != null) { - countRequest.query(source); + countRequest.source(source); } else { - BytesReference querySource = RestActions.parseQuerySource(request); - if (querySource != null) { - countRequest.query(querySource, false); + QuerySourceBuilder querySourceBuilder = RestActions.parseQuerySource(request); + if (querySourceBuilder != null) { + countRequest.source(querySourceBuilder); } } diff --git a/src/main/java/org/elasticsearch/rest/action/count/RestCountAction.java b/src/main/java/org/elasticsearch/rest/action/count/RestCountAction.java index ba4a71cd9cd0d..dabd950230559 100644 --- a/src/main/java/org/elasticsearch/rest/action/count/RestCountAction.java +++ b/src/main/java/org/elasticsearch/rest/action/count/RestCountAction.java @@ -23,10 +23,10 @@ import org.elasticsearch.action.count.CountRequest; import org.elasticsearch.action.count.CountResponse; import org.elasticsearch.action.support.IgnoreIndices; +import org.elasticsearch.action.support.QuerySourceBuilder; import org.elasticsearch.action.support.broadcast.BroadcastOperationThreading; import org.elasticsearch.client.Client; import org.elasticsearch.common.Strings; -import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; @@ -73,15 +73,15 @@ public void handleRequest(final RestRequest request, final RestChannel channel) } countRequest.operationThreading(operationThreading); if (request.hasContent()) { - countRequest.query(request.content(), request.contentUnsafe()); + countRequest.source(request.content(), request.contentUnsafe()); } else { String source = request.param("source"); if (source != null) { - countRequest.query(source); + countRequest.source(source); } else { - BytesReference querySource = RestActions.parseQuerySource(request); - if (querySource != null) { - countRequest.query(querySource, false); + QuerySourceBuilder querySourceBuilder = RestActions.parseQuerySource(request); + if (querySourceBuilder != null) { + countRequest.source(querySourceBuilder); } } } diff --git a/src/main/java/org/elasticsearch/rest/action/deletebyquery/RestDeleteByQueryAction.java b/src/main/java/org/elasticsearch/rest/action/deletebyquery/RestDeleteByQueryAction.java index b6b9e8d559fb7..8d3735221ef5e 100644 --- a/src/main/java/org/elasticsearch/rest/action/deletebyquery/RestDeleteByQueryAction.java +++ b/src/main/java/org/elasticsearch/rest/action/deletebyquery/RestDeleteByQueryAction.java @@ -26,10 +26,10 @@ import org.elasticsearch.action.deletebyquery.IndexDeleteByQueryResponse; import org.elasticsearch.action.deletebyquery.ShardDeleteByQueryRequest; import org.elasticsearch.action.support.IgnoreIndices; +import org.elasticsearch.action.support.QuerySourceBuilder; import org.elasticsearch.action.support.replication.ReplicationType; import org.elasticsearch.client.Client; import org.elasticsearch.common.Strings; -import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; @@ -60,14 +60,16 @@ public void handleRequest(final RestRequest request, final RestChannel channel) deleteByQueryRequest.listenerThreaded(false); try { if (request.hasContent()) { - deleteByQueryRequest.query(request.content(), request.contentUnsafe()); + deleteByQueryRequest.source(request.content(), request.contentUnsafe()); } else { String source = request.param("source"); if (source != null) { - deleteByQueryRequest.query(source); + deleteByQueryRequest.source(source); } else { - BytesReference bytes = RestActions.parseQuerySource(request); - deleteByQueryRequest.query(bytes, false); + QuerySourceBuilder querySourceBuilder = RestActions.parseQuerySource(request); + if (querySourceBuilder != null) { + deleteByQueryRequest.source(querySourceBuilder); + } } } deleteByQueryRequest.types(Strings.splitStringByCommaToArray(request.param("type"))); diff --git a/src/main/java/org/elasticsearch/rest/action/explain/RestExplainAction.java b/src/main/java/org/elasticsearch/rest/action/explain/RestExplainAction.java index 68211ffb45d78..13fe52175b4eb 100644 --- a/src/main/java/org/elasticsearch/rest/action/explain/RestExplainAction.java +++ b/src/main/java/org/elasticsearch/rest/action/explain/RestExplainAction.java @@ -24,9 +24,8 @@ import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.explain.ExplainRequest; import org.elasticsearch.action.explain.ExplainResponse; -import org.elasticsearch.action.explain.ExplainSourceBuilder; +import org.elasticsearch.action.support.QuerySourceBuilder; import org.elasticsearch.client.Client; -import org.elasticsearch.common.Booleans; import org.elasticsearch.common.Strings; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.inject.Inject; @@ -89,9 +88,9 @@ public void handleRequest(final RestRequest request, final RestChannel channel) } } - ExplainSourceBuilder explainSourceBuilder = new ExplainSourceBuilder(); - explainSourceBuilder.setQuery(queryStringBuilder); - explainRequest.source(explainSourceBuilder); + QuerySourceBuilder querySourceBuilder = new QuerySourceBuilder(); + querySourceBuilder.setQuery(queryStringBuilder); + explainRequest.source(querySourceBuilder); } String sField = request.param("fields"); diff --git a/src/main/java/org/elasticsearch/rest/action/support/RestActions.java b/src/main/java/org/elasticsearch/rest/action/support/RestActions.java index 7df94db304ae8..da455b0901e05 100644 --- a/src/main/java/org/elasticsearch/rest/action/support/RestActions.java +++ b/src/main/java/org/elasticsearch/rest/action/support/RestActions.java @@ -21,8 +21,8 @@ import org.elasticsearch.ElasticSearchIllegalArgumentException; import org.elasticsearch.action.ShardOperationFailedException; +import org.elasticsearch.action.support.QuerySourceBuilder; import org.elasticsearch.action.support.broadcast.BroadcastOperationResponse; -import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilderString; import org.elasticsearch.index.query.QueryBuilders; @@ -81,7 +81,7 @@ public static void buildBroadcastShardsHeader(XContentBuilder builder, Broadcast builder.endObject(); } - public static BytesReference parseQuerySource(RestRequest request) { + public static QuerySourceBuilder parseQuerySource(RestRequest request) { String queryString = request.param("q"); if (queryString == null) { return null; @@ -99,6 +99,6 @@ public static BytesReference parseQuerySource(RestRequest request) { throw new ElasticSearchIllegalArgumentException("Unsupported defaultOperator [" + defaultOperator + "], can either be [OR] or [AND]"); } } - return queryBuilder.buildAsBytes(); + return new QuerySourceBuilder().setQuery(queryBuilder); } } diff --git a/src/test/java/org/elasticsearch/ElasticSearchExceptionTests.java b/src/test/java/org/elasticsearch/ElasticSearchExceptionTests.java index a7d8d335a24cd..63645e7d0c1d4 100644 --- a/src/test/java/org/elasticsearch/ElasticSearchExceptionTests.java +++ b/src/test/java/org/elasticsearch/ElasticSearchExceptionTests.java @@ -26,7 +26,6 @@ import org.elasticsearch.transport.RemoteTransportException; import org.junit.Test; -import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; public class ElasticSearchExceptionTests extends ElasticsearchTestCase { diff --git a/src/test/java/org/elasticsearch/broadcast/BroadcastActionsTests.java b/src/test/java/org/elasticsearch/broadcast/BroadcastActionsTests.java index 3d3b4c3c85b34..c98e78827133a 100644 --- a/src/test/java/org/elasticsearch/broadcast/BroadcastActionsTests.java +++ b/src/test/java/org/elasticsearch/broadcast/BroadcastActionsTests.java @@ -61,7 +61,9 @@ public void testBroadcastOperations() throws IOException { // check count for (int i = 0; i < 5; i++) { // test successful - CountResponse countResponse = client().count(countRequest("test").query(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.NO_THREADS)).actionGet(); + CountResponse countResponse = client().prepareCount("test") + .setQuery(termQuery("_type", "type1")) + .setOperationThreading(BroadcastOperationThreading.NO_THREADS).get(); assertThat(countResponse.getCount(), equalTo(2l)); assertThat(countResponse.getTotalShards(), equalTo(5)); assertThat(countResponse.getSuccessfulShards(), equalTo(5)); @@ -69,7 +71,9 @@ public void testBroadcastOperations() throws IOException { } for (int i = 0; i < 5; i++) { - CountResponse countResponse = client().count(countRequest("test").query(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.SINGLE_THREAD)).actionGet(); + CountResponse countResponse = client().prepareCount("test") + .setQuery(termQuery("_type", "type1")) + .setOperationThreading(BroadcastOperationThreading.SINGLE_THREAD).get(); assertThat(countResponse.getCount(), equalTo(2l)); assertThat(countResponse.getTotalShards(), equalTo(5)); assertThat(countResponse.getSuccessfulShards(), equalTo(5)); @@ -77,7 +81,9 @@ public void testBroadcastOperations() throws IOException { } for (int i = 0; i < 5; i++) { - CountResponse countResponse = client().count(countRequest("test").query(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.THREAD_PER_SHARD)).actionGet(); + CountResponse countResponse = client().prepareCount("test") + .setQuery(termQuery("_type", "type1")) + .setOperationThreading(BroadcastOperationThreading.THREAD_PER_SHARD).get(); assertThat(countResponse.getCount(), equalTo(2l)); assertThat(countResponse.getTotalShards(), equalTo(5)); assertThat(countResponse.getSuccessfulShards(), equalTo(5)); @@ -86,7 +92,7 @@ public void testBroadcastOperations() throws IOException { for (int i = 0; i < 5; i++) { // test failed (simply query that can't be parsed) - CountResponse countResponse = client().count(countRequest("test").query("{ term : { _type : \"type1 } }".getBytes(Charsets.UTF_8))).actionGet(); + CountResponse countResponse = client().count(countRequest("test").source("{ term : { _type : \"type1 } }".getBytes(Charsets.UTF_8))).actionGet(); assertThat(countResponse.getCount(), equalTo(0l)); assertThat(countResponse.getTotalShards(), equalTo(5)); diff --git a/src/test/java/org/elasticsearch/count/query/SimpleQueryTests.java b/src/test/java/org/elasticsearch/count/query/SimpleQueryTests.java index bd24847d7f631..ccc38381f1312 100644 --- a/src/test/java/org/elasticsearch/count/query/SimpleQueryTests.java +++ b/src/test/java/org/elasticsearch/count/query/SimpleQueryTests.java @@ -51,7 +51,7 @@ public void passQueryAsStringTest() throws Exception { client().prepareIndex("test", "type1", "1").setSource("field1", "value1_1", "field2", "value2_1").setRefresh(true).get(); - CountResponse countResponse = client().prepareCount().setQuery(new BytesArray("{ \"term\" : { \"field1\" : \"value1_1\" }}").array()).get(); + CountResponse countResponse = client().prepareCount().setSource(new BytesArray("{ \"query\" : { \"term\" : { \"field1\" : \"value1_1\" }}}").array()).get(); assertHitCount(countResponse, 1l); } @@ -103,7 +103,7 @@ public void testCommonTermsQuery() throws Exception { countResponse = client().prepareCount().setQuery(QueryBuilders.commonTerms("field1", "the lazy fox brown").cutoffFrequency(1).highFreqMinimumShouldMatch("4")).get(); assertHitCount(countResponse, 1l); - countResponse = client().prepareCount().setQuery(new BytesArray("{ \"common\" : { \"field1\" : { \"query\" : \"the lazy fox brown\", \"cutoff_frequency\" : 1, \"minimum_should_match\" : { \"high_freq\" : 4 } } } }").array()).get(); + countResponse = client().prepareCount().setSource(new BytesArray("{ \"query\" : { \"common\" : { \"field1\" : { \"query\" : \"the lazy fox brown\", \"cutoff_frequency\" : 1, \"minimum_should_match\" : { \"high_freq\" : 4 } } } } }").array()).get(); assertHitCount(countResponse, 1l); // Default diff --git a/src/test/java/org/elasticsearch/document/DocumentActionsTests.java b/src/test/java/org/elasticsearch/document/DocumentActionsTests.java index a5dc769f3f677..65329576cc4a3 100644 --- a/src/test/java/org/elasticsearch/document/DocumentActionsTests.java +++ b/src/test/java/org/elasticsearch/document/DocumentActionsTests.java @@ -168,18 +168,23 @@ public void testIndexActions() throws Exception { assertThat(countResponse.getSuccessfulShards(), equalTo(5)); assertThat(countResponse.getFailedShards(), equalTo(0)); - countResponse = client().count(countRequest("test").query(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.SINGLE_THREAD)).actionGet(); + countResponse = client().prepareCount("test") + .setQuery(termQuery("_type", "type1")) + .setOperationThreading(BroadcastOperationThreading.SINGLE_THREAD) + .get(); assertThat(countResponse.getCount(), equalTo(2l)); assertThat(countResponse.getSuccessfulShards(), equalTo(5)); assertThat(countResponse.getFailedShards(), equalTo(0)); - countResponse = client().count(countRequest("test").query(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.THREAD_PER_SHARD)).actionGet(); + countResponse = client().prepareCount("test") + .setQuery(termQuery("_type", "type1")) + .setOperationThreading(BroadcastOperationThreading.THREAD_PER_SHARD).get(); assertThat(countResponse.getCount(), equalTo(2l)); assertThat(countResponse.getSuccessfulShards(), equalTo(5)); assertThat(countResponse.getFailedShards(), equalTo(0)); // test failed (simply query that can't be parsed) - countResponse = client().count(countRequest("test").query("{ term : { _type : \"type1 } }".getBytes(Charsets.UTF_8))).actionGet(); + countResponse = client().count(countRequest("test").source("{ term : { _type : \"type1 } }".getBytes(Charsets.UTF_8))).actionGet(); assertThat(countResponse.getCount(), equalTo(0l)); assertThat(countResponse.getSuccessfulShards(), equalTo(0)); diff --git a/src/test/java/org/elasticsearch/validate/SimpleValidateQueryTests.java b/src/test/java/org/elasticsearch/validate/SimpleValidateQueryTests.java index 47a1db39d2c49..8576d8313ce31 100644 --- a/src/test/java/org/elasticsearch/validate/SimpleValidateQueryTests.java +++ b/src/test/java/org/elasticsearch/validate/SimpleValidateQueryTests.java @@ -62,7 +62,7 @@ public void simpleValidateQuery() throws Exception { client().admin().indices().prepareRefresh().execute().actionGet(); - assertThat(client().admin().indices().prepareValidateQuery("test").setQuery("foo".getBytes(Charsets.UTF_8)).execute().actionGet().isValid(), equalTo(false)); + assertThat(client().admin().indices().prepareValidateQuery("test").setSource("foo".getBytes(Charsets.UTF_8)).execute().actionGet().isValid(), equalTo(false)); assertThat(client().admin().indices().prepareValidateQuery("test").setQuery(QueryBuilders.queryString("_id:1")).execute().actionGet().isValid(), equalTo(true)); assertThat(client().admin().indices().prepareValidateQuery("test").setQuery(QueryBuilders.queryString("_i:d:1")).execute().actionGet().isValid(), equalTo(false)); @@ -101,7 +101,7 @@ public void explainValidateQuery() throws Exception { ValidateQueryResponse response; response = client().admin().indices().prepareValidateQuery("test") - .setQuery("foo".getBytes(Charsets.UTF_8)) + .setSource("foo".getBytes(Charsets.UTF_8)) .setExplain(true) .execute().actionGet(); assertThat(response.isValid(), equalTo(false)); @@ -207,7 +207,7 @@ public void explainValidateQueryTwoNodes() throws IOException { for (Client client : cluster()) { ValidateQueryResponse response = client.admin().indices().prepareValidateQuery("test") - .setQuery("foo".getBytes(Charsets.UTF_8)) + .setSource("foo".getBytes(Charsets.UTF_8)) .setExplain(true) .execute().actionGet(); assertThat(response.isValid(), equalTo(false));