range date group by your config
SELECT online FROM online GROUP BY date_range(field='insert_time','format'='yyyy-MM-dd' ,'2014-08-18','2014-08-17','now-8d','now-7d','now-6d','now') 地理查询Elasticsearch 可以把地理位置、全文搜索、结构化搜索和分析结合到一起。而Elasticsearch-sql 也基本支持所有地理位置相关的查询,对应 Elasticsearch的章节内容为Geolocation。
1、地理坐标盒模型过滤器
地理坐标盒模型过滤器(Geo Bounding Box Filter),指定一个矩形的顶部,底部,左边界和右边界,然后过滤器只需判断坐标的经度是否在左右边界之间,纬度是否在上下边界之间。
语法:
GEO_BOUNDING_BOX(fieldName,topLeftLongitude,topLeftLatitude,bottomRightLongitude,bottomRightLatitude)示例:
SELECT * FROM location WHERE GEO_BOUNDING_BOX(center,100.0,1.0,101,0.0)2、地理距离过滤器
地理距离过滤器( geo_distance ),以给定位置为圆心画一个圆,来找出那些地理坐标落在指定距离范围的文档。
语法:
GEO_DISTANCE(fieldName,distance,fromLongitude,fromLatitude)示例:
SELECT * FROM location WHERE GEO_DISTANCE(center,'1km',100.5,0.5)3、地理距离区间过滤器
范围距离过滤器(Range Distance filter),以给定位置为圆心,分别以两个给定的距离画圆,找出与指定点距离在给定最小距离和最大距离之间的点,和geo_distance filter的唯一差别在于Range Distance filter是一个环状的,它会排除掉落在内圈中的那部分文档。
语法:
GEO_DISTANCE_RANGE(fieldName,distanceFrom,distanceTo,fromLongitude,fromLatitude)示例:
SELECT * FROM location WHERE GEO_DISTANCE_RANGE(center,'1m','1km',100.5,0.50001)4、Polygon filter (works on points)
找出落在多边形中的点。 这个过滤器使用代价很大 。当你觉得自己需要使用它,最好先看看 geo-shapes 。
语法:
GEO_POLYGON(fieldName,lon1,lat1,lon2,lat2,lon3,lat3,...)示例:
SELECT * FROM location WHERE GEO_POLYGON(center,100,0,100.5,2,101.0,0)5、GeoShape Intersects filter (works on geoshapes)
这里需要使用WKT表示查询时的形状。
语法:
示例:
SELECT * FROM location WHERE GEO_INTERSECTS(place,'POLYGON ((102 2, 103 2, 103 3, 102 3, 102 2))更多关于地理的查询可以参考这里。
实战用法我们以本系列的第一篇教程中我们创建的索引 nba来作示例,如下:
1、查询 nba 所有球队信息
:9200/_sql?sql=select * from nba limit 10查询结果:
2、查询当家球星是詹姆斯的球队信息
:9200/_sql?sql=select * from nba where topStar = "勒布朗·詹姆斯"查询结果:
3、根据建队时间降序排列
:9200/_sql?sql=select * from nba order by date desc查询结果:
4、查询拥有总冠军超过5个的球队信息
:9200/_sql?sql=select * from nba where championship >= 5查询结果:
5、查询总冠军数量分别在1-5,5-10,10-15,15-20范围之间球队的数量
:9200/_sql?sql=SELECT COUNT(championship) FROM nba GROUP BY range(championship, 1,5,10,15,20)查询结果:
当然还有更多的写法,具体实现在这里就不多诉了,感兴趣的读者可以自己搭建个项目然后尝试下,更多特色SQL写法可以参考这里:
基本条件查询
地理查询
聚合查询
额外SQL功能
Scan and scroll
功能有限的连接查询
Show Commands
Script Fields
NestedTypes support
Union & Minus support
Java实现上面已经介绍了 Elasticsearch-SQL的安装和使用,那么我们如何在项目中使用它,Elasticsearch-SQL底层是使用Java语言开发的,通过解析SQL 转换为 DSL 语言,然后得出查询结果,解析结果成key-value的固定格式返回。
引入依赖