ES7學習筆記(十三)GEO位置搜尋

2022-02-11 03:46:27 字數 2546 閱讀 8229

geo型別的字段是不能使用動態對映自動生成的,我們需要在建立索引時指定欄位的型別為geo_pointgeo_point型別的字段儲存的經緯度,我們看看經緯度是怎麼定義的,

英文簡寫

正數負數

維度latitude

lat北緯

南緯經度

longitude

lon或lng

東經西經

經度的簡寫有2個,一般常用的是lon,lng則在第三方地圖的開放平台中使用比較多。下面我們先建立乙個帶有geo_point型別欄位的索引,如下:

put /my_geo}}

},"dynamic_date_formats":[

"mm/dd/yyyy",

"yyyy/mm/dd hh:mm:ss",

"yyyy-mm-dd",

"yyyy-mm-dd hh:mm:ss"

],"properties":}}

}

建立了乙個my_geo索引,在索引中有一些基礎的配置,預設ik分詞器,動態對映的時間格式。重點是最後我們新增了乙個欄位location,它的型別是geo_point

索引建立完了,我們新增兩條資料吧,假設,路人甲在北京站,路人乙在朝陽公園。那麼我們怎麼「北京站」和「朝陽公園」的經緯度呢?我們在做專案時,前端都會接地圖控制項,經緯度的資訊可以呼叫地圖控制項的api獲取。在咱們的示例中,也不接地圖控制項了,太麻煩了,直接在網上找到「北京站」和「朝陽公園」的座標吧。

我們查到「北京站」的座標如下:

然後新增一條資料:

post /my_geo/_doc

}

再查「朝陽公園」的座標

再新增「路人乙」的資訊

post /my_geo/_doc

}

我們再用elasticsearch-head外掛程式看一下索引中的資料:

「路人甲」和「路人乙」的資訊都有了,但是沒有location欄位的資訊,因為location是特性型別的字段,在這裡是展示不出來的。我們搜尋一下吧,看看怎麼用geo搜尋,假設「我」的位置在「工體」,我們先要查到「工體」的座標,

然後再查詢5km範圍內都有誰,傳送請求如下:

post /my_geo/_search}}}}}

在查詢的時候用的是filter查詢,再filter查詢裡再使用geo_distance查詢,我們定義距離distance為5km,再指定geo型別的字段location,當前的座標為:39.93031708627304n,116.4470385453491e。查詢一下,看看結果:

}},}}]}

看來,我們站在「工體」,「北京站」的路人甲和「朝陽公園」的路人乙都在5km的範圍內。把範圍縮短一點如何,改為3km看看,搜尋的請求不變,只是把distance改為3km,看看結果吧,

}}]

}

只有在「朝陽公園」的路人乙被搜尋了出來。完全符合預期,我們再看看程式中怎麼使用geo搜尋。

在定義實體類時,對應的geo欄位要使用特殊的型別,如下:

@setter@getter

public class mygeo

location的型別是geopoint,新增資料的方法沒有變化,轉化成json就可以了。再看看查詢怎麼用,

public void searchgeo() throws ioexception 

}

執行一下,看看結果,

}
只有在「朝陽公園」的路人乙被查詢了出來,符合預期。

有的小夥伴可能會有這樣的疑問,我不想按照距離去查詢,只想把查詢結果按照離「我」的距離排序,該怎麼做呢?再看一下,

public void searchgeosort() throws ioexception 

}

這次查詢並沒有設定查詢條件,而是建立了乙個geo距離排序,同樣,先指定geo欄位location,和當前的座標工體,再設定排序是公升序。執行一下,看看結果,

}

}

ES7 學習筆記

es7只有2個特性 他是乙個替代indexof 開發人員用來檢查某個字在陣列中是否存在的。indexof 驗證陣列中是否存在某個元素,這時需要根據返回值是否為 1來判斷。includes 驗證陣列中是否存在某個元素,這樣更加直觀簡單,直接返回 true 或 false。let arr react a...

ES7特性總結

不知道小夥伴們es6的特性學的怎麼樣了?es2016 es7 和es2017 es8 都已經要出來了,本文為大家整理介紹一下es7的新特性。es7特性只有兩個 array.prototype.includes value 任意值 boolean includes 方法用來判斷乙個陣列是否包含乙個指定...

es7查詢總結

put nba create 1 put nba doc 2 put nba doc 3 put nba doc 4 put nba doc 5 put nba doc 6 put nba doc 7 查詢英文名稱為 golden state warriors 的球隊資訊 get nba searc...