4
4
import java .util .List ;
5
5
import java .util .ArrayList ;
6
6
7
- import org .elasticsearch .action .search .SearchAction ;
8
- import org .elasticsearch .action .search .SearchRequestBuilder ;
9
- import org .elasticsearch .action .search .SearchType ;
7
+ import org .elasticsearch .action .search .*;
10
8
import org .elasticsearch .client .Client ;
11
9
import org .elasticsearch .common .unit .TimeValue ;
12
10
import org .elasticsearch .index .query .BoolQueryBuilder ;
@@ -41,7 +39,18 @@ public void intialize(SearchRequestBuilder request) throws SqlParseException {
41
39
42
40
@ Override
43
41
public SqlElasticSearchRequestBuilder explain () throws SqlParseException {
44
- this .request = new SearchRequestBuilder (client , SearchAction .INSTANCE );
42
+ Hint scrollHint = null ;
43
+ for (Hint hint : select .getHints ()) {
44
+ if (hint .getType () == HintType .USE_SCROLL ) {
45
+ scrollHint = hint ;
46
+ break ;
47
+ }
48
+ }
49
+ if (scrollHint != null && scrollHint .getParams ()[0 ] instanceof String ) {
50
+ return new SqlElasticSearchRequestBuilder (new SearchScrollRequestBuilder (client , SearchScrollAction .INSTANCE , (String ) scrollHint .getParams ()[0 ]).setScroll (new TimeValue ((Integer ) scrollHint .getParams ()[1 ])));
51
+ }
52
+
53
+ this .request = new SearchRequestBuilder (client , SearchAction .INSTANCE );
45
54
setIndicesAndTypes ();
46
55
47
56
setFields (select .getFields ());
@@ -50,11 +59,15 @@ public SqlElasticSearchRequestBuilder explain() throws SqlParseException {
50
59
setSorts (select .getOrderBys ());
51
60
setLimit (select .getOffset (), select .getRowCount ());
52
61
53
- boolean usedScroll = useScrollIfNeeded (select .isOrderdSelect ());
54
- if (!usedScroll ) {
55
- request .setSearchType (SearchType .DFS_QUERY_THEN_FETCH );
56
- }
57
- updateRequestWithIndexAndRoutingOptions (select , request );
62
+ //
63
+ if (scrollHint != null ) {
64
+ if (!select .isOrderdSelect ())
65
+ request .addSort (FieldSortBuilder .DOC_FIELD_NAME , SortOrder .ASC );
66
+ request .setSize ((Integer ) scrollHint .getParams ()[0 ]).setScroll (new TimeValue ((Integer ) scrollHint .getParams ()[1 ]));
67
+ } else {
68
+ request .setSearchType (SearchType .DFS_QUERY_THEN_FETCH );
69
+ }
70
+ updateRequestWithIndexAndRoutingOptions (select , request );
58
71
updateRequestWithHighlight (select , request );
59
72
updateRequestWithCollapse (select , request );
60
73
updateRequestWithPostFilter (select , request );
@@ -63,24 +76,6 @@ public SqlElasticSearchRequestBuilder explain() throws SqlParseException {
63
76
return sqlElasticRequestBuilder ;
64
77
}
65
78
66
- private boolean useScrollIfNeeded (boolean existsOrderBy ) {
67
- Hint scrollHint = null ;
68
- for (Hint hint : select .getHints ()) {
69
- if (hint .getType () == HintType .USE_SCROLL ) {
70
- scrollHint = hint ;
71
- break ;
72
- }
73
- }
74
- if (scrollHint != null ) {
75
- int scrollSize = (Integer ) scrollHint .getParams ()[0 ];
76
- int timeoutInMilli = (Integer ) scrollHint .getParams ()[1 ];
77
- if (!existsOrderBy )
78
- request .addSort (FieldSortBuilder .DOC_FIELD_NAME , SortOrder .ASC );
79
- request .setScroll (new TimeValue (timeoutInMilli )).setSize (scrollSize );
80
- }
81
- return scrollHint != null ;
82
- }
83
-
84
79
/**
85
80
* Set indices and types to the search request.
86
81
*/
0 commit comments