@@ -295,6 +295,19 @@ private static Consumer<ResultSet> sortedResultSetChecker(String column,
295
295
.query ("select _MAP['state'] from elastic.zips order by _MAP['city']" )
296
296
.returnsCount (ZIPS_SIZE );
297
297
298
+ CalciteAssert .that ()
299
+ .with (newConnectionFactory ())
300
+ .query ("select * from elastic.zips where _MAP['state'] = 'NY' or "
301
+ + "_MAP['city'] = 'BROOKLYN'"
302
+ + " order by _MAP['city']" )
303
+ .queryContains (
304
+ ElasticsearchChecker .elasticsearchChecker (
305
+ "query:{'dis_max':{'queries':[{'bool':{'should':"
306
+ + "[{'term':{'state':'NY'}},{'term':"
307
+ + "{'city':'BROOKLYN'}}]}}]}},'sort':[{'city':'asc'}]" ,
308
+ String .format (Locale .ROOT , "size:%s" ,
309
+ ElasticsearchTransport .DEFAULT_FETCH_SIZE )));
310
+
298
311
CalciteAssert .that ()
299
312
.with (newConnectionFactory ())
300
313
.query ("select _MAP['city'] from elastic.zips where _MAP['state'] = 'NY' "
@@ -421,6 +434,34 @@ private static Consumer<ResultSet> sortedResultSetChecker(String column,
421
434
.explainContains (explain );
422
435
}
423
436
437
+ @ Test public void testDismaxQuery () {
438
+ final String sql = "select * from zips\n "
439
+ + "where state = 'CA' or pop >= 94000\n "
440
+ + "order by state, pop" ;
441
+ final String explain = "PLAN=ElasticsearchToEnumerableConverter\n "
442
+ + " ElasticsearchSort(sort0=[$4], sort1=[$3], dir0=[ASC], dir1=[ASC])\n "
443
+ + " ElasticsearchProject(city=[CAST(ITEM($0, 'city')):VARCHAR(20)], longitude=[CAST(ITEM(ITEM($0, 'loc'), 0)):FLOAT], latitude=[CAST(ITEM(ITEM($0, 'loc'), 1)):FLOAT], pop=[CAST(ITEM($0, 'pop')):INTEGER], state=[CAST(ITEM($0, 'state')):VARCHAR(2)], id=[CAST(ITEM($0, 'id')):VARCHAR(5)])\n "
444
+ + " ElasticsearchFilter(condition=[OR(=(CAST(ITEM($0, 'state')):VARCHAR(2), 'CA'), >=(CAST(ITEM($0, 'pop')):INTEGER, 94000))])\n "
445
+ + " ElasticsearchTableScan(table=[[elastic, zips]])\n \n " ;
446
+ calciteAssert ()
447
+ .query (sql )
448
+ .queryContains (
449
+ ElasticsearchChecker .elasticsearchChecker ("'query' : "
450
+ + "{'dis_max':{'queries':[{bool:"
451
+ + "{should:[{term:{state:'CA'}},"
452
+ + "{range:{pop:{gte:94000}}}]}}]}}" ,
453
+ "'script_fields': {longitude:{script:'params._source.loc[0]'}, "
454
+ + "latitude:{script:'params._source.loc[1]'}, "
455
+ + "city:{script: 'params._source.city'}, "
456
+ + "pop:{script: 'params._source.pop'}, "
457
+ + "state:{script: 'params._source.state'}, "
458
+ + "id:{script: 'params._source.id'}}" ,
459
+ "sort: [ {state: 'asc'}, {pop: 'asc'}]" ,
460
+ String .format (Locale .ROOT , "size:%s" ,
461
+ ElasticsearchTransport .DEFAULT_FETCH_SIZE )))
462
+ .explainContains (explain );
463
+ }
464
+
424
465
@ Test void testFilterSortDesc () {
425
466
final String sql = "select * from zips\n "
426
467
+ "where pop BETWEEN 95000 AND 100000\n "
0 commit comments