You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2017/05/10 03:54:31 UTC

[29/43] metamodel git commit: METAMODEL-1128: Fixed

METAMODEL-1128: Fixed

Fixes #136

Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/f18ae8b7
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/f18ae8b7
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/f18ae8b7

Branch: refs/heads/5.x
Commit: f18ae8b75f5baf4832a3c1942a9fd82373fa7355
Parents: 11710af
Author: kaspersorensen <i....@gmail.com>
Authored: Fri Nov 11 13:38:28 2016 -0800
Committer: kaspersorensen <i....@gmail.com>
Committed: Fri Nov 11 13:38:28 2016 -0800

----------------------------------------------------------------------
 .../rest/ElasticSearchRestDataContext.java            | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/f18ae8b7/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
----------------------------------------------------------------------
diff --git a/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java b/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
index b55db13..920217f 100644
--- a/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
+++ b/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
@@ -95,6 +95,9 @@ public class ElasticSearchRestDataContext extends QueryPostprocessDataContext im
     // 1 minute timeout
     public static final String TIMEOUT_SCROLL = "1m";
 
+    // we scroll when more than 400 rows are expected
+    private static final int SCROLL_THRESHOLD = 400;
+
     private final JestClient elasticSearchClient;
 
     private final String indexName;
@@ -265,13 +268,18 @@ public class ElasticSearchRestDataContext extends QueryPostprocessDataContext im
         if (queryBuilder != null) {
             // where clause can be pushed down to an ElasticSearch query
             SearchSourceBuilder searchSourceBuilder = createSearchRequest(firstRow, maxRows, queryBuilder);
-            SearchResult result = executeSearch(table, searchSourceBuilder, false);
+            SearchResult result = executeSearch(table, searchSourceBuilder, scrollNeeded(maxRows));
 
             return new JestElasticSearchDataSet(elasticSearchClient, result, selectItems);
         }
         return super.materializeMainSchemaTable(table, selectItems, whereItems, firstRow, maxRows);
     }
 
+    private boolean scrollNeeded(int maxRows) {
+        // if either we don't know about max rows or max rows is set higher than threshold
+        return !limitMaxRowsIsSet(maxRows) || maxRows > SCROLL_THRESHOLD;
+    }
+
     private SearchResult executeSearch(Table table, SearchSourceBuilder searchSourceBuilder, boolean scroll) {
         Search.Builder builder = new Search.Builder(searchSourceBuilder.toString()).addIndex(getIndexName()).addType(
                 table.getName());
@@ -292,7 +300,7 @@ public class ElasticSearchRestDataContext extends QueryPostprocessDataContext im
 
     @Override
     protected DataSet materializeMainSchemaTable(Table table, Column[] columns, int maxRows) {
-        SearchResult searchResult = executeSearch(table, createSearchRequest(1, maxRows, null), limitMaxRowsIsSet(
+        SearchResult searchResult = executeSearch(table, createSearchRequest(1, maxRows, null), scrollNeeded(
                 maxRows));
 
         return new JestElasticSearchDataSet(elasticSearchClient, searchResult, columns);
@@ -306,6 +314,8 @@ public class ElasticSearchRestDataContext extends QueryPostprocessDataContext im
         }
         if (limitMaxRowsIsSet(maxRows)) {
             searchRequest.size(maxRows);
+        } else {
+            searchRequest.size(Integer.MAX_VALUE);
         }
 
         if (queryBuilder != null) {