You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2015/12/26 12:39:50 UTC
[2/3] camel git commit: CAMEL-9452: Camel-Elasticsearch: Support
Multisearch operation
CAMEL-9452: Camel-Elasticsearch: Support Multisearch operation
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/0b274ec3
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/0b274ec3
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/0b274ec3
Branch: refs/heads/master
Commit: 0b274ec3fb29bc6e3ce253105db813b753f6fa5f
Parents: a2b6ab7
Author: Andrea Cosentino <an...@gmail.com>
Authored: Sat Dec 26 12:35:52 2015 +0100
Committer: Andrea Cosentino <an...@gmail.com>
Committed: Sat Dec 26 12:37:35 2015 +0100
----------------------------------------------------------------------
.../elasticsearch/ElasticsearchConstants.java | 1 +
.../elasticsearch/ElasticsearchProducer.java | 6 ++++
.../ElasticsearchActionRequestConverter.java | 13 ++++++++
.../elasticsearch/ElasticsearchBaseTest.java | 4 +--
...icsearchGetSearchDeleteExistsUpdateTest.java | 33 +++++++++++++++++++-
5 files changed, 54 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/0b274ec3/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchConstants.java
----------------------------------------------------------------------
diff --git a/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchConstants.java b/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchConstants.java
index dab1cc8..e4f2f39 100644
--- a/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchConstants.java
+++ b/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchConstants.java
@@ -30,6 +30,7 @@ public interface ElasticsearchConstants {
String OPERATION_MULTIGET = "MULTIGET";
String OPERATION_DELETE = "DELETE";
String OPERATION_SEARCH = "SEARCH";
+ String OPERATION_MULTISEARCH = "MULTISEARCH";
String OPERATION_EXISTS = "EXISTS";
String PARAM_INDEX_ID = "indexId";
String PARAM_DATA = "data";
http://git-wip-us.apache.org/repos/asf/camel/blob/0b274ec3/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchProducer.java b/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchProducer.java
index 3e52607..136b610 100644
--- a/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchProducer.java
+++ b/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchProducer.java
@@ -29,6 +29,7 @@ import org.elasticsearch.action.exists.ExistsRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.MultiGetRequest;
import org.elasticsearch.action.index.IndexRequest;
+import org.elasticsearch.action.search.MultiSearchRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.Client;
@@ -79,6 +80,8 @@ public class ElasticsearchProducer extends DefaultProducer {
return ElasticsearchConstants.OPERATION_EXISTS;
} else if (request instanceof SearchRequest) {
return ElasticsearchConstants.OPERATION_SEARCH;
+ } else if (request instanceof MultiGetRequest) {
+ return ElasticsearchConstants.OPERATION_MULTISEARCH;
}
String operationConfig = exchange.getIn().getHeader(ElasticsearchConstants.PARAM_OPERATION, String.class);
@@ -160,6 +163,9 @@ public class ElasticsearchProducer extends DefaultProducer {
} else if (ElasticsearchConstants.OPERATION_SEARCH.equals(operation)) {
SearchRequest searchRequest = message.getBody(SearchRequest.class);
message.setBody(client.search(searchRequest).actionGet());
+ } else if (ElasticsearchConstants.OPERATION_MULTISEARCH.equals(operation)) {
+ MultiSearchRequest multiSearchRequest = message.getBody(MultiSearchRequest.class);
+ message.setBody(client.multiSearch(multiSearchRequest));
} else {
throw new IllegalArgumentException(ElasticsearchConstants.PARAM_OPERATION + " value '" + operation + "' is not supported");
}
http://git-wip-us.apache.org/repos/asf/camel/blob/0b274ec3/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java
----------------------------------------------------------------------
diff --git a/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java b/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java
index 98957c9..aa50563 100644
--- a/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java
+++ b/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java
@@ -31,6 +31,7 @@ import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.MultiGetRequest;
import org.elasticsearch.action.get.MultiGetRequest.Item;
import org.elasticsearch.action.index.IndexRequest;
+import org.elasticsearch.action.search.MultiSearchRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -135,6 +136,18 @@ public final class ElasticsearchActionRequestConverter {
}
return multiGetRequest;
}
+
+ @Converter
+ public static MultiSearchRequest toMultiSearchRequest(Object document, Exchange exchange) {
+ List<SearchRequest> items = (List<SearchRequest>) document;
+ MultiSearchRequest multiSearchRequest = new MultiSearchRequest();
+ Iterator<SearchRequest> it = items.iterator();
+ while (it.hasNext()) {
+ SearchRequest item = (SearchRequest) it.next();
+ multiSearchRequest.add(item);
+ }
+ return multiSearchRequest;
+ }
@Converter
public static DeleteRequest toDeleteRequest(String id, Exchange exchange) {
http://git-wip-us.apache.org/repos/asf/camel/blob/0b274ec3/components/camel-elasticsearch/src/test/java/org/apache/camel/component/elasticsearch/ElasticsearchBaseTest.java
----------------------------------------------------------------------
diff --git a/components/camel-elasticsearch/src/test/java/org/apache/camel/component/elasticsearch/ElasticsearchBaseTest.java b/components/camel-elasticsearch/src/test/java/org/apache/camel/component/elasticsearch/ElasticsearchBaseTest.java
index c04c77a..7ac2730 100644
--- a/components/camel-elasticsearch/src/test/java/org/apache/camel/component/elasticsearch/ElasticsearchBaseTest.java
+++ b/components/camel-elasticsearch/src/test/java/org/apache/camel/component/elasticsearch/ElasticsearchBaseTest.java
@@ -31,8 +31,8 @@ import static org.elasticsearch.node.NodeBuilder.nodeBuilder;
public class ElasticsearchBaseTest extends CamelTestSupport {
- private static Node node;
- private static Client client;
+ public static Node node;
+ public static Client client;
@BeforeClass
public static void cleanupOnce() {
http://git-wip-us.apache.org/repos/asf/camel/blob/0b274ec3/components/camel-elasticsearch/src/test/java/org/apache/camel/component/elasticsearch/ElasticsearchGetSearchDeleteExistsUpdateTest.java
----------------------------------------------------------------------
diff --git a/components/camel-elasticsearch/src/test/java/org/apache/camel/component/elasticsearch/ElasticsearchGetSearchDeleteExistsUpdateTest.java b/components/camel-elasticsearch/src/test/java/org/apache/camel/component/elasticsearch/ElasticsearchGetSearchDeleteExistsUpdateTest.java
index a70251d..70ac14f 100644
--- a/components/camel-elasticsearch/src/test/java/org/apache/camel/component/elasticsearch/ElasticsearchGetSearchDeleteExistsUpdateTest.java
+++ b/components/camel-elasticsearch/src/test/java/org/apache/camel/component/elasticsearch/ElasticsearchGetSearchDeleteExistsUpdateTest.java
@@ -24,14 +24,17 @@ import java.util.Map;
import org.apache.camel.builder.RouteBuilder;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
-import org.elasticsearch.action.exists.ExistsResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetRequest.Item;
import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.index.IndexRequest;
+import org.elasticsearch.action.search.MultiSearchResponse;
+import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.index.query.QueryBuilders;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.equalTo;
@@ -185,6 +188,33 @@ public class ElasticsearchGetSearchDeleteExistsUpdateTest extends ElasticsearchB
assertFalse("response 2 should be ok", responses[1].isFailed());
assertTrue("response 3 should be failed", responses[2].isFailed());
}
+
+ @Test
+ public void testMultiSearch() throws Exception {
+ //first, INDEX two values
+ Map<String, Object> headers = new HashMap<String, Object>();
+
+ node.client().prepareIndex("test", "type", "1").setSource("field", "xxx").execute().actionGet();
+ node.client().prepareIndex("test", "type", "2").setSource("field", "yyy").execute().actionGet();
+
+ //now, verify MULTISEARCH
+ headers.put(ElasticsearchConstants.PARAM_OPERATION, ElasticsearchConstants.OPERATION_MULTISEARCH);
+ SearchRequestBuilder srb1 = node.client().prepareSearch("test").setTypes("type").setQuery(QueryBuilders.termQuery("field", "xxx"));
+ SearchRequestBuilder srb2 = node.client().prepareSearch("test").setTypes("type").setQuery(QueryBuilders.termQuery("field", "yyy"));
+ SearchRequestBuilder srb3= node.client().prepareSearch("instagram")
+ .setTypes("type").setQuery(QueryBuilders.termQuery("test-multisearchkey", "test-multisearchvalue"));
+ List<SearchRequest> list = new ArrayList<>();
+ list.add(srb1.request());
+ list.add(srb2.request());
+ list.add(srb3.request());
+ MultiSearchResponse response = template.requestBodyAndHeaders("direct:multisearch", list, headers, MultiSearchResponse.class);
+ MultiSearchResponse.Item[] responses = response.getResponses();
+ assertNotNull("response should not be null", response);
+ assertEquals("response should contains three multiSearchResponse object", 3, response.getResponses().length);
+ assertFalse("response 1 should be ok", responses[0].isFailure());
+ assertFalse("response 2 should be ok", responses[1].isFailure());
+ assertTrue("response 3 should be failed", responses[2].isFailure());
+ }
@Test
public void testDeleteWithHeaders() throws Exception {
@@ -286,6 +316,7 @@ public class ElasticsearchGetSearchDeleteExistsUpdateTest extends ElasticsearchB
from("direct:search").to("elasticsearch://local?operation=SEARCH&indexName=twitter&indexType=tweet");
from("direct:update").to("elasticsearch://local?operation=UPDATE&indexName=twitter&indexType=tweet");
from("direct:exists").to("elasticsearch://local?operation=EXISTS");
+ from("direct:multisearch").to("elasticsearch://local?operation=MULTISEARCH&indexName=test");
}
};
}