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.