5分鐘掌握Elasticsearch的BBox查詢

在前面的文章中,筆者介紹過,Elasticsearch是可以支援空間型別儲存的,採用的資料型別為geo_point和geo_shape,索引方式主要為geohash。筆者在前面的文章中也介紹了geohash的基本原理。那麼,對於空間型別的資料,很常用的一種場景,就是檢索某個區域內的空間要素,比如,檢索出海澱區所有的銀行網點有哪些。

以上述場景為因子,筆者今天來講一下Elasticsearch所支援的Bbox查詢。所謂Bbox,其實就是透過兩個點確定的一個矩形框,一般採用左上加右下角(或者左下右上)的座標來唯一確定一個矩形框。

5分鐘掌握Elasticsearch的BBox查詢

1 準備索引和資料

PUT /my_locations{ “mappings”: { “properties”: { “pin”: { “properties”: { “location”: { “type”: “geo_point” } } } } }}// 插入銀行網點座標PUT /my_locations/_doc/1{ “pin” : { “location” : { “lat” : 40。12, “lon” : -71。34 } }}

2 實戰查詢query

可以採用geo_bouding_box過濾器來進行檢索

GET my_locations/_search{ “query”: { “bool” : { “must” : { “match_all” : {} }, “filter” : { “geo_bounding_box” : { “pin。location” : { “top_left” : { “lat” : 40。73, “lon” : -74。1 }, “bottom_right” : { “lat” : 40。01, “lon” : -71。12 } } } } } }}

3 支援多種座標點格式

構造查詢時,Bbox的左上和右下角座標的格式可以作為屬性輸入,也可以採用陣列的形式,還可以採用String格式,當然,也支援標準的WKT格式。由於Elasticsearch本身採用geohash索引,查詢也支援geohash輸入。

5分鐘掌握Elasticsearch的BBox查詢

4 Bbox定點設定

可以透過top_left和bottom_right或者top_right和bottom_left引數設定邊界框的定點。也支援駝峰的命名:topLeft,bottomRight或topRight,bottomLeft。除了承兌設定值之外,還可以分別用簡稱top,left,bottom和right分別設定值。

5分鐘掌握Elasticsearch的BBox查詢

5 filter的type設定

預設情況下,Bbox的執行型別設定為memory,即預設是在記憶體中檢查文件是在bbox範圍內的。在某些情況下,type的值設定為indexed,索引速度會更快一些。不過,如果設定type=indexed,geo_point型別必須對經緯度做了索引。

5分鐘掌握Elasticsearch的BBox查詢

歡迎關注筆者,每天分享架構乾貨。