地理坐標(biāo)點
可以用來計算兩個坐標(biāo)間的距離,還可以判斷一個坐標(biāo)是否在另一個區(qū)域中,或在聚合中。
地理坐標(biāo)點不能被動態(tài)映射(dynamic mapping)自動檢測,需要顯示聲明geo-point
經(jīng)緯度信息可以是字符串、數(shù)組或者對象
注意經(jīng)緯度的順序問題
通過地理坐標(biāo)點過濾
找出落在指定矩形框中的點:geo_bounding_box
找到與指定位置在給定距離內(nèi)的點:geo_distance
找出與指定點距離在給定最小距離和最大距離之間的點:geo_distance_range
找出落在多邊形中的點(代價很大):geo_polygon
地理坐標(biāo)過濾器使用代價昂貴。盡可能先使用其他過濾器過濾
地理坐標(biāo)盒模型過濾器
geo_bounding_box不需要把所有坐標(biāo)點都加載到內(nèi)存里,只需要簡單判斷l(xiāng)at和lon坐標(biāo)數(shù)據(jù)是否在給定范圍內(nèi)??梢杂玫古潘饕鲆粋€range過濾來實現(xiàn)目標(biāo)。
使用這種優(yōu)化方式,需要把geo_point字段用lat和lon的方式分別映射到索引中。
過濾時設(shè)置type為indexed明確告訴ES這個過濾器使用倒排索引
地理距離過濾器
代價昂貴,為了優(yōu)化性能,ES先使用一個盒模型來排除掉盡可能多的文檔
通常使用矩形模型也能滿足應(yīng)用需求
地理距離計算
arc:最慢最精確,將地球當(dāng)成球體來處理。精度受限于地體并不是完全的球體
plane:將地球當(dāng)成是平坦的來處理。在赤道附近精度最好
sloppy_arc:精度換速度,比arc塊4到5倍,精度達99.9%。默認的計算方式
按距離排序
當(dāng)你可以按距離排序時,按距離打分通常是一個更好的解決方案。
Geohashes
是一種將經(jīng)緯度坐標(biāo)編碼成字符串的方式。
Geohashes把整個世界分為32個單元的格子,4行8列
可以控制精度
Geohash單元查詢
geohash_cell,將經(jīng)緯度坐標(biāo)根據(jù)指定精度轉(zhuǎn)換成一個geohash,然后查找所有包含這個geohash的位置。
Geo aggs
geo_distance,地理位置距離,將文檔按照距離圍繞一個中心點來分組。
geo_bounding_box,geohash網(wǎng)格,將文檔按照geohash范圍來分組,用來顯示在地圖上。
地理位置邊界,返回一個包含所有地理位置坐標(biāo)點的邊界的經(jīng)緯度坐標(biāo)。
Geoshapes
地理形狀
geo-shapes:判斷查詢的形狀與索引的形狀的關(guān)系。不能用于計算距離、排序、打分以及聚合。
關(guān)系可以是,intersects有重疊,disjoint完全不重疊,within被包含。
映射地理形狀:需要考慮精度、距離誤差
索引地理形狀
查詢地理形狀,允許使用形狀來做查詢;在查詢中使用已索引的形狀