You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2018/03/06 13:17:23 UTC
[camel] branch master updated: CAMEL-12034: camel-elasticsearch5 -
Add support for specify from/size in search query header map/json string so
you can limit the search results.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new 4fe56b7 CAMEL-12034: camel-elasticsearch5 - Add support for specify from/size in search query header map/json string so you can limit the search results.
4fe56b7 is described below
commit 4fe56b7e8d981d70450e15f5fb88c286d2f733b2
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Mar 6 14:16:40 2018 +0100
CAMEL-12034: camel-elasticsearch5 - Add support for specify from/size in search query header map/json string so you can limit the search results.
---
.../elasticsearch5/ElasticsearchConstants.java | 2 ++
.../ElasticsearchActionRequestConverter.java | 30 ++++++++++++++++++--
...asticsearchGetSearchDeleteExistsUpdateTest.java | 33 ++++++++++++++++++++++
3 files changed, 63 insertions(+), 2 deletions(-)
diff --git a/components/camel-elasticsearch5/src/main/java/org/apache/camel/component/elasticsearch5/ElasticsearchConstants.java b/components/camel-elasticsearch5/src/main/java/org/apache/camel/component/elasticsearch5/ElasticsearchConstants.java
index c77f32f..a882275 100644
--- a/components/camel-elasticsearch5/src/main/java/org/apache/camel/component/elasticsearch5/ElasticsearchConstants.java
+++ b/components/camel-elasticsearch5/src/main/java/org/apache/camel/component/elasticsearch5/ElasticsearchConstants.java
@@ -38,4 +38,6 @@ public interface ElasticsearchConstants {
String TRANSPORT_ADDRESSES_SEPARATOR_REGEX = ",";
String IP_PORT_SEPARATOR_REGEX = ":";
String ES_QUERY_DSL_PREFIX = "query";
+ String ES_QUERY_SIZE = "size";
+ String ES_QUERY_FROM = "from";
}
diff --git a/components/camel-elasticsearch5/src/main/java/org/apache/camel/component/elasticsearch5/converter/ElasticsearchActionRequestConverter.java b/components/camel-elasticsearch5/src/main/java/org/apache/camel/component/elasticsearch5/converter/ElasticsearchActionRequestConverter.java
index febfdfd..c9decf7 100644
--- a/components/camel-elasticsearch5/src/main/java/org/apache/camel/component/elasticsearch5/converter/ElasticsearchActionRequestConverter.java
+++ b/components/camel-elasticsearch5/src/main/java/org/apache/camel/component/elasticsearch5/converter/ElasticsearchActionRequestConverter.java
@@ -45,6 +45,9 @@ import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static org.apache.camel.component.elasticsearch5.ElasticsearchConstants.ES_QUERY_FROM;
+import static org.apache.camel.component.elasticsearch5.ElasticsearchConstants.ES_QUERY_SIZE;
+
@Converter
public final class ElasticsearchActionRequestConverter {
private static final Logger LOG = LoggerFactory.getLogger(ElasticsearchActionRequestConverter.class);
@@ -187,9 +190,18 @@ public final class ElasticsearchActionRequestConverter {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
String queryText = null;
-
+
+ Integer size = null;
+ Integer from = null;
+
if (queryObject instanceof Map<?, ?>) {
Map<String, Object> mapQuery = (Map<String, Object>)queryObject;
+ if (mapQuery.containsKey(ES_QUERY_SIZE)) {
+ size = exchange.getContext().getTypeConverter().tryConvertTo(Integer.class, mapQuery.get(ES_QUERY_SIZE));
+ }
+ if (mapQuery.containsKey(ES_QUERY_FROM)) {
+ from = exchange.getContext().getTypeConverter().tryConvertTo(Integer.class, mapQuery.get(ES_QUERY_FROM));
+ }
// Remove 'query' prefix from the query object for backward compatibility
if (mapQuery.containsKey(ElasticsearchConstants.ES_QUERY_DSL_PREFIX)) {
mapQuery = (Map<String, Object>)mapQuery.get(ElasticsearchConstants.ES_QUERY_DSL_PREFIX);
@@ -209,6 +221,14 @@ public final class ElasticsearchActionRequestConverter {
if (parentJsonNode != null) {
queryText = parentJsonNode.toString();
}
+ JsonNode sizeNode = jsonTextObject.get(ES_QUERY_SIZE);
+ if (sizeNode != null) {
+ size = sizeNode.asInt();
+ }
+ JsonNode fromNode = jsonTextObject.get(ES_QUERY_FROM);
+ if (fromNode != null) {
+ from = fromNode.asInt();
+ }
} catch (IOException e) {
LOG.error(e.getMessage());
}
@@ -216,8 +236,14 @@ public final class ElasticsearchActionRequestConverter {
// Cannot convert the queryObject into SearchRequest
return null;
}
-
+
searchSourceBuilder.query(QueryBuilders.wrapperQuery(queryText));
+ if (size != null) {
+ searchSourceBuilder.size(size);
+ }
+ if (from != null) {
+ searchSourceBuilder.from(from);
+ }
searchRequest.source(searchSourceBuilder);
return searchRequest;
diff --git a/components/camel-elasticsearch5/src/test/java/org/apache/camel/component/elasticsearch5/ElasticsearchGetSearchDeleteExistsUpdateTest.java b/components/camel-elasticsearch5/src/test/java/org/apache/camel/component/elasticsearch5/ElasticsearchGetSearchDeleteExistsUpdateTest.java
index 660d854..62a0f23 100644
--- a/components/camel-elasticsearch5/src/test/java/org/apache/camel/component/elasticsearch5/ElasticsearchGetSearchDeleteExistsUpdateTest.java
+++ b/components/camel-elasticsearch5/src/test/java/org/apache/camel/component/elasticsearch5/ElasticsearchGetSearchDeleteExistsUpdateTest.java
@@ -98,6 +98,26 @@ public class ElasticsearchGetSearchDeleteExistsUpdateTest extends ElasticsearchB
}
@Test
+ public void testSearchWithMapQueryFromAndSize() throws Exception {
+ //first, INDEX a value
+ Map<String, String> map = createIndexedData();
+ sendBody("direct:index", map);
+
+ //now, verify GET succeeded
+ Map<String, Object> actualQuery = new HashMap<String, Object>();
+ actualQuery.put("content", "searchtest");
+ Map<String, Object> match = new HashMap<String, Object>();
+ match.put("match", actualQuery);
+ Map<String, Object> query = new HashMap<String, Object>();
+ query.put("query", match);
+ query.put("size", "5");
+ query.put("from", "0");
+ SearchResponse response = template.requestBody("direct:search", query, SearchResponse.class);
+ assertNotNull("response should not be null", response);
+ assertNotNull("response hits should be == 1", response.getHits().totalHits());
+ }
+
+ @Test
public void testSearchWithStringQuery() throws Exception {
//first, INDEX a value
Map<String, String> map = createIndexedData();
@@ -111,6 +131,19 @@ public class ElasticsearchGetSearchDeleteExistsUpdateTest extends ElasticsearchB
}
@Test
+ public void testSearchWithStringQueryFromAndSize() throws Exception {
+ //first, INDEX a value
+ Map<String, String> map = createIndexedData();
+ sendBody("direct:index", map);
+
+ //now, verify GET succeeded
+ String query = "{\"query\":{\"match\":{\"content\":\"searchtest\"}},\"from\": 0,\"size\": 10}";
+ SearchResponse response = template.requestBody("direct:search", query, SearchResponse.class);
+ assertNotNull("response should not be null", response);
+ assertNotNull("response hits should be == 1", response.getHits().totalHits());
+ }
+
+ @Test
public void testUpdate() throws Exception {
Map<String, String> map = createIndexedData();
String indexId = template.requestBody("direct:index", map, String.class);
--
To stop receiving notification emails like this one, please contact
davsclaus@apache.org.