This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch camel-2.20.x in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-2.20.x by this push: new a7815ab CAMEL-12034: camel-elasticsearch5 - Add support for specify from/size in search query header map/json string so you can limit the search results. a7815ab is described below commit a7815ab7eeff371115b614a36e25ebcf04971b39 Author: Claus Ibsen <claus.ib...@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 davscl...@apache.org.