mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-27 18:38:41 +00:00
more work on the groovy client - count/terms api
This commit is contained in:
parent
7e041c43e0
commit
96a185e107
@ -36,8 +36,8 @@ import java.util.Arrays;
|
||||
* A request to count the number of documents matching a specific query. Best created with
|
||||
* {@link org.elasticsearch.client.Requests#countRequest(String...)}.
|
||||
*
|
||||
* <p>The request requires the query source to be set either using {@link #querySource(org.elasticsearch.index.query.QueryBuilder)},
|
||||
* or {@link #querySource(byte[])}.
|
||||
* <p>The request requires the query source to be set either using {@link #query(org.elasticsearch.index.query.QueryBuilder)},
|
||||
* or {@link #query(byte[])}.
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
* @see CountResponse
|
||||
@ -80,6 +80,11 @@ public class CountRequest extends BroadcastOperationRequest {
|
||||
return this;
|
||||
}
|
||||
|
||||
public CountRequest indices(String... indices) {
|
||||
this.indices = indices;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* A query hint to optionally later be used when routing the request.
|
||||
*/
|
||||
@ -116,22 +121,22 @@ public class CountRequest extends BroadcastOperationRequest {
|
||||
*
|
||||
* @see org.elasticsearch.index.query.json.JsonQueryBuilders
|
||||
*/
|
||||
@Required public CountRequest querySource(QueryBuilder queryBuilder) {
|
||||
return querySource(queryBuilder.buildAsBytes());
|
||||
@Required public CountRequest query(QueryBuilder queryBuilder) {
|
||||
return query(queryBuilder.buildAsBytes());
|
||||
}
|
||||
|
||||
/**
|
||||
* The query source to execute. It is preferable to use either {@link #querySource(byte[])}
|
||||
* or {@link #querySource(org.elasticsearch.index.query.QueryBuilder)}.
|
||||
* The query source to execute. It is preferable to use either {@link #query(byte[])}
|
||||
* or {@link #query(org.elasticsearch.index.query.QueryBuilder)}.
|
||||
*/
|
||||
@Required public CountRequest querySource(String querySource) {
|
||||
return querySource(Unicode.fromStringAsBytes(querySource));
|
||||
@Required public CountRequest query(String querySource) {
|
||||
return query(Unicode.fromStringAsBytes(querySource));
|
||||
}
|
||||
|
||||
/**
|
||||
* The query source to execute.
|
||||
*/
|
||||
@Required public CountRequest querySource(byte[] querySource) {
|
||||
@Required public CountRequest query(byte[] querySource) {
|
||||
this.querySource = querySource;
|
||||
return this;
|
||||
}
|
||||
|
@ -52,6 +52,13 @@ public class CountResponse extends BroadcastOperationResponse {
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* The count of documents matching the query provided.
|
||||
*/
|
||||
public long getCount() {
|
||||
return count;
|
||||
}
|
||||
|
||||
@Override public void readFrom(StreamInput in) throws IOException {
|
||||
super.readFrom(in);
|
||||
count = in.readVLong();
|
||||
|
@ -53,12 +53,19 @@ public class FieldTermsFreq implements Streamable, Iterable<TermFreq> {
|
||||
}
|
||||
|
||||
/**
|
||||
* The fields name.
|
||||
* The field name.
|
||||
*/
|
||||
public String fieldName() {
|
||||
return this.fieldName;
|
||||
}
|
||||
|
||||
/**
|
||||
* The field name.
|
||||
*/
|
||||
public String getFieldName() {
|
||||
return fieldName;
|
||||
}
|
||||
|
||||
/**
|
||||
* The term frequencies of the field.
|
||||
*/
|
||||
@ -66,6 +73,13 @@ public class FieldTermsFreq implements Streamable, Iterable<TermFreq> {
|
||||
return this.termsFreqs;
|
||||
}
|
||||
|
||||
/**
|
||||
* The term frequencies of the field.
|
||||
*/
|
||||
public TermFreq[] getTermsFreqs() {
|
||||
return termsFreqs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the document frequency of a term, <tt>-1</tt> if the term does not exists.
|
||||
*/
|
||||
|
@ -100,6 +100,13 @@ public class TermFreq implements Streamable {
|
||||
return term;
|
||||
}
|
||||
|
||||
/**
|
||||
* The term.
|
||||
*/
|
||||
public Object getTerm() {
|
||||
return term;
|
||||
}
|
||||
|
||||
public String termAsString() {
|
||||
return term.toString();
|
||||
}
|
||||
@ -111,6 +118,13 @@ public class TermFreq implements Streamable {
|
||||
return docFreq;
|
||||
}
|
||||
|
||||
/**
|
||||
* The document frequency of the term (in how many documents this term exists).
|
||||
*/
|
||||
public int getDocFreq() {
|
||||
return docFreq;
|
||||
}
|
||||
|
||||
public static TermFreq readTermFreq(StreamInput in) throws IOException {
|
||||
TermFreq termFreq = new TermFreq();
|
||||
termFreq.readFrom(in);
|
||||
|
@ -70,6 +70,13 @@ public class TermsResponse extends BroadcastOperationResponse implements Iterabl
|
||||
return this.numDocs;
|
||||
}
|
||||
|
||||
/**
|
||||
* The total number of documents.
|
||||
*/
|
||||
public long getNumDocs() {
|
||||
return numDocs;
|
||||
}
|
||||
|
||||
/**
|
||||
* The total maximum number of documents (including deletions).
|
||||
*/
|
||||
@ -77,6 +84,13 @@ public class TermsResponse extends BroadcastOperationResponse implements Iterabl
|
||||
return this.maxDoc;
|
||||
}
|
||||
|
||||
/**
|
||||
* The total maximum number of documents (including deletions).
|
||||
*/
|
||||
public long getMaxDoc() {
|
||||
return maxDoc;
|
||||
}
|
||||
|
||||
/**
|
||||
* The number of deleted docs.
|
||||
*/
|
||||
@ -84,6 +98,13 @@ public class TermsResponse extends BroadcastOperationResponse implements Iterabl
|
||||
return this.numDeletedDocs;
|
||||
}
|
||||
|
||||
/**
|
||||
* The number of deleted docs.
|
||||
*/
|
||||
public long getNumDeletedDocs() {
|
||||
return numDeletedDocs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Iterates over the {@link FieldTermsFreq}.
|
||||
*/
|
||||
@ -109,6 +130,10 @@ public class TermsResponse extends BroadcastOperationResponse implements Iterabl
|
||||
return this.fieldsTermsFreq;
|
||||
}
|
||||
|
||||
public Map<String, FieldTermsFreq> getFields() {
|
||||
return fieldsAsMap();
|
||||
}
|
||||
|
||||
/**
|
||||
* The pair of field name to {@link FieldTermsFreq} as map for simpler usage.
|
||||
*/
|
||||
|
@ -64,7 +64,7 @@ public class RestCountAction extends BaseRestHandler {
|
||||
operationThreading = BroadcastOperationThreading.SINGLE_THREAD;
|
||||
}
|
||||
countRequest.operationThreading(operationThreading);
|
||||
countRequest.querySource(RestActions.parseQuerySource(request));
|
||||
countRequest.query(RestActions.parseQuerySource(request));
|
||||
countRequest.queryParserName(request.param("query_parser_name"));
|
||||
countRequest.queryHint(request.param("query_hint"));
|
||||
countRequest.minScore(request.paramAsFloat("min_score", DEFAULT_MIN_SCORE));
|
||||
|
@ -41,7 +41,7 @@ import static org.elasticsearch.rest.RestResponse.Status.*;
|
||||
import static org.elasticsearch.rest.action.support.RestActions.*;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class RestTermsAction extends BaseRestHandler {
|
||||
|
||||
|
@ -75,7 +75,7 @@ public class BroadcastActionsTests extends AbstractNodesTests {
|
||||
// check count
|
||||
for (int i = 0; i < 5; i++) {
|
||||
// test successful
|
||||
CountResponse countResponse = client("server1").count(countRequest("test").querySource(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.NO_THREADS)).actionGet();
|
||||
CountResponse countResponse = client("server1").count(countRequest("test").query(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.NO_THREADS)).actionGet();
|
||||
assertThat(countResponse.count(), equalTo(2l));
|
||||
assertThat(countResponse.totalShards(), equalTo(5));
|
||||
assertThat(countResponse.successfulShards(), equalTo(5));
|
||||
@ -83,7 +83,7 @@ public class BroadcastActionsTests extends AbstractNodesTests {
|
||||
}
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
CountResponse countResponse = client("server1").count(countRequest("test").querySource(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.SINGLE_THREAD)).actionGet();
|
||||
CountResponse countResponse = client("server1").count(countRequest("test").query(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.SINGLE_THREAD)).actionGet();
|
||||
assertThat(countResponse.count(), equalTo(2l));
|
||||
assertThat(countResponse.totalShards(), equalTo(5));
|
||||
assertThat(countResponse.successfulShards(), equalTo(5));
|
||||
@ -91,7 +91,7 @@ public class BroadcastActionsTests extends AbstractNodesTests {
|
||||
}
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
CountResponse countResponse = client("server1").count(countRequest("test").querySource(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.THREAD_PER_SHARD)).actionGet();
|
||||
CountResponse countResponse = client("server1").count(countRequest("test").query(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.THREAD_PER_SHARD)).actionGet();
|
||||
assertThat(countResponse.count(), equalTo(2l));
|
||||
assertThat(countResponse.totalShards(), equalTo(5));
|
||||
assertThat(countResponse.successfulShards(), equalTo(5));
|
||||
@ -100,7 +100,7 @@ public class BroadcastActionsTests extends AbstractNodesTests {
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
// test failed (simply query that can't be parsed)
|
||||
CountResponse countResponse = client("server1").count(countRequest("test").querySource(Unicode.fromStringAsBytes("{ term : { _type : \"type1 } }"))).actionGet();
|
||||
CountResponse countResponse = client("server1").count(countRequest("test").query(Unicode.fromStringAsBytes("{ term : { _type : \"type1 } }"))).actionGet();
|
||||
|
||||
assertThat(countResponse.count(), equalTo(0l));
|
||||
assertThat(countResponse.totalShards(), equalTo(5));
|
||||
|
@ -170,23 +170,23 @@ public class DocumentActionsTests extends AbstractNodesTests {
|
||||
// check count
|
||||
for (int i = 0; i < 5; i++) {
|
||||
// test successful
|
||||
CountResponse countResponse = client1.count(countRequest("test").querySource(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.NO_THREADS)).actionGet();
|
||||
CountResponse countResponse = client1.count(countRequest("test").query(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.NO_THREADS)).actionGet();
|
||||
assertThat(countResponse.count(), equalTo(2l));
|
||||
assertThat(countResponse.successfulShards(), equalTo(5));
|
||||
assertThat(countResponse.failedShards(), equalTo(0));
|
||||
|
||||
countResponse = client1.count(countRequest("test").querySource(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.SINGLE_THREAD)).actionGet();
|
||||
countResponse = client1.count(countRequest("test").query(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.SINGLE_THREAD)).actionGet();
|
||||
assertThat(countResponse.count(), equalTo(2l));
|
||||
assertThat(countResponse.successfulShards(), equalTo(5));
|
||||
assertThat(countResponse.failedShards(), equalTo(0));
|
||||
|
||||
countResponse = client1.count(countRequest("test").querySource(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.THREAD_PER_SHARD)).actionGet();
|
||||
countResponse = client1.count(countRequest("test").query(termQuery("_type", "type1")).operationThreading(BroadcastOperationThreading.THREAD_PER_SHARD)).actionGet();
|
||||
assertThat(countResponse.count(), equalTo(2l));
|
||||
assertThat(countResponse.successfulShards(), equalTo(5));
|
||||
assertThat(countResponse.failedShards(), equalTo(0));
|
||||
|
||||
// test failed (simply query that can't be parsed)
|
||||
countResponse = client1.count(countRequest("test").querySource(Unicode.fromStringAsBytes("{ term : { _type : \"type1 } }"))).actionGet();
|
||||
countResponse = client1.count(countRequest("test").query(Unicode.fromStringAsBytes("{ term : { _type : \"type1 } }"))).actionGet();
|
||||
|
||||
assertThat(countResponse.count(), equalTo(0l));
|
||||
assertThat(countResponse.successfulShards(), equalTo(0));
|
||||
|
@ -78,10 +78,10 @@ public class SimpleAttachmentIntegrationTests {
|
||||
.source(jsonBuilder().startObject().field("file", copyToBytesFromClasspath("/org/elasticsearch/plugin/attachments/index/mapper/testXHTML.html")).endObject())).actionGet();
|
||||
node.client().admin().indices().refresh(refreshRequest()).actionGet();
|
||||
|
||||
CountResponse countResponse = node.client().count(countRequest("test").querySource(fieldQuery("file.title", "test document"))).actionGet();
|
||||
CountResponse countResponse = node.client().count(countRequest("test").query(fieldQuery("file.title", "test document"))).actionGet();
|
||||
assertThat(countResponse.count(), equalTo(1l));
|
||||
|
||||
countResponse = node.client().count(countRequest("test").querySource(fieldQuery("file", "tests the ability"))).actionGet();
|
||||
countResponse = node.client().count(countRequest("test").query(fieldQuery("file", "tests the ability"))).actionGet();
|
||||
assertThat(countResponse.count(), equalTo(1l));
|
||||
}
|
||||
}
|
@ -20,6 +20,8 @@
|
||||
package org.elasticsearch.groovy.client
|
||||
|
||||
import org.elasticsearch.action.ActionListener
|
||||
import org.elasticsearch.action.count.CountRequest
|
||||
import org.elasticsearch.action.count.CountResponse
|
||||
import org.elasticsearch.action.delete.DeleteRequest
|
||||
import org.elasticsearch.action.delete.DeleteResponse
|
||||
import org.elasticsearch.action.deletebyquery.DeleteByQueryRequest
|
||||
@ -28,6 +30,8 @@ import org.elasticsearch.action.get.GetRequest
|
||||
import org.elasticsearch.action.get.GetResponse
|
||||
import org.elasticsearch.action.index.IndexRequest
|
||||
import org.elasticsearch.action.index.IndexResponse
|
||||
import org.elasticsearch.action.terms.TermsRequest
|
||||
import org.elasticsearch.action.terms.TermsResponse
|
||||
import org.elasticsearch.client.Client
|
||||
import org.elasticsearch.client.internal.InternalClient
|
||||
import org.elasticsearch.groovy.client.action.GActionFuture
|
||||
@ -52,10 +56,19 @@ class GClient {
|
||||
DeleteByQueryRequest.metaClass.query = {Closure c ->
|
||||
delegate.query(new JsonBuilder().buildAsBytes(c))
|
||||
}
|
||||
|
||||
CountRequest.metaClass.setQuery = {Closure c ->
|
||||
delegate.query(new JsonBuilder().buildAsBytes(c))
|
||||
}
|
||||
CountRequest.metaClass.query = {Closure c ->
|
||||
delegate.query(new JsonBuilder().buildAsBytes(c))
|
||||
}
|
||||
}
|
||||
|
||||
final Client client;
|
||||
|
||||
int resolveStrategy = Closure.DELEGATE_FIRST
|
||||
|
||||
private final InternalClient internalClient
|
||||
|
||||
final GAdminClient admin;
|
||||
@ -70,7 +83,7 @@ class GClient {
|
||||
GActionFuture<IndexResponse> index(Closure c) {
|
||||
IndexRequest request = new IndexRequest()
|
||||
c.setDelegate request
|
||||
c.resolveStrategy = Closure.DELEGATE_FIRST
|
||||
c.resolveStrategy = resolveStrategy
|
||||
c.call()
|
||||
index(request)
|
||||
}
|
||||
@ -88,7 +101,7 @@ class GClient {
|
||||
GActionFuture<GetResponse> get(Closure c) {
|
||||
GetRequest request = new GetRequest()
|
||||
c.setDelegate request
|
||||
c.resolveStrategy = Closure.DELEGATE_FIRST
|
||||
c.resolveStrategy = resolveStrategy
|
||||
c.call()
|
||||
get(request)
|
||||
}
|
||||
@ -105,7 +118,7 @@ class GClient {
|
||||
|
||||
GActionFuture<DeleteResponse> delete(Closure c) {
|
||||
DeleteRequest request = new DeleteRequest()
|
||||
c.resolveStrategy = Closure.DELEGATE_FIRST
|
||||
c.resolveStrategy = resolveStrategy
|
||||
c.setDelegate request
|
||||
c.call()
|
||||
delete(request)
|
||||
@ -123,7 +136,7 @@ class GClient {
|
||||
|
||||
GActionFuture<DeleteByQueryResponse> deleteByQuery(Closure c) {
|
||||
DeleteByQueryRequest request = new DeleteByQueryRequest()
|
||||
c.resolveStrategy = Closure.DELEGATE_FIRST
|
||||
c.resolveStrategy = resolveStrategy
|
||||
c.setDelegate request
|
||||
c.call()
|
||||
deleteByQuery(request)
|
||||
@ -138,4 +151,40 @@ class GClient {
|
||||
void deleteByQuery(DeleteByQueryRequest request, ActionListener<DeleteByQueryResponse> listener) {
|
||||
client.deleteByQuery(request, listener)
|
||||
}
|
||||
|
||||
GActionFuture<CountResponse> count(Closure c) {
|
||||
CountRequest request = new CountRequest()
|
||||
c.resolveStrategy = resolveStrategy
|
||||
c.setDelegate request
|
||||
c.call()
|
||||
count(request)
|
||||
}
|
||||
|
||||
GActionFuture<CountResponse> count(CountRequest request) {
|
||||
GActionFuture<CountResponse> future = new GActionFuture<CountResponse>(internalClient.threadPool(), request);
|
||||
client.count(request, future)
|
||||
return future
|
||||
}
|
||||
|
||||
void count(CountRequest request, ActionListener<CountResponse> listener) {
|
||||
client.count(request, listener)
|
||||
}
|
||||
|
||||
GActionFuture<TermsResponse> terms(Closure c) {
|
||||
TermsRequest request = new TermsRequest()
|
||||
c.resolveStrategy = resolveStrategy
|
||||
c.setDelegate request
|
||||
c.call()
|
||||
terms(request)
|
||||
}
|
||||
|
||||
GActionFuture<TermsResponse> terms(TermsRequest request) {
|
||||
GActionFuture<TermsResponse> future = new GActionFuture<TermsResponse>(internalClient.threadPool(), request);
|
||||
client.terms(request, future)
|
||||
return future
|
||||
}
|
||||
|
||||
void terms(TermsRequest request, ActionListener<TermsResponse> listener) {
|
||||
client.terms(request, listener)
|
||||
}
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ class GIndicesAdminClient {
|
||||
GActionFuture<RefreshResponse> refresh(Closure c) {
|
||||
RefreshRequest request = new RefreshRequest()
|
||||
c.setDelegate request
|
||||
c.resolveStrategy = Closure.DELEGATE_FIRST
|
||||
c.resolveStrategy = gClient.resolveStrategy
|
||||
c.call()
|
||||
refresh(request)
|
||||
}
|
||||
|
@ -157,6 +157,19 @@ class SimpleActionsTests extends GroovyTestCase {
|
||||
}
|
||||
assertTrue getR.response.exists
|
||||
|
||||
|
||||
def count = node.client.count {
|
||||
indices "test"
|
||||
types "type1"
|
||||
query {
|
||||
term {
|
||||
test = "value"
|
||||
}
|
||||
}
|
||||
}
|
||||
assertEquals 0, count.response.failedShards
|
||||
assertEquals 1, count.response.count
|
||||
|
||||
def deleteByQuery = node.client.deleteByQuery {
|
||||
indices "test"
|
||||
query {
|
||||
|
Loading…
x
Reference in New Issue
Block a user