全部產品
Search
文件中心

OpenSearch:附近人搜尋

更新時間:Jul 13, 2024

OpenSearch支援類似附近人或地點的搜尋。如果希望按照地點或附近人傳入的座標,那麼可以使用本文介紹的方式,提高搜尋效率,也同時提供排序功能。

解決方案

  1. 配置GEO_POINT類型的應用結構欄位以及地理位置索引,用於檢索,召回結果。

  2. GEO_POINT類型的欄位設定資料來源處理外掛程式。

  3. 搜尋測試文法介紹,添加排序功能介紹。

配置步驟

1.建立應用結構配置

在OpenSearch應用結構表中增加lon和lat的DOUBLE類型地理位置座標,再建立一個GEO_POINT類型的company_lon_lat欄位(欄位名稱自訂) 。索引結構定義中,為company_lon_lat設定分析器為地理位置分析器,並添加為屬性欄位。123完整建立應用流程請參考文檔:快速搭建應用

2.資料來源配置

欄位對應時,將company_lon_lat這個應用結構欄位配置StringCatenateExtractor外掛程式,將現有的經度欄位lon和緯度欄位lat,聯合起來。通過空格聯合,產生到目標欄位company_lon_lat。

4

注意:目標欄位company_lon_lat的映射欄位可忽略:

5

外掛程式具體說明請參考文檔:資料來源外掛程式說明

3.搜尋測試

例如query=name:'Alibaba' AND company_lon_lat:'circle(116.5806 39.99624, 1000)'說明:表示查詢公司名為Alibaba,並且在座標’116.5806 39.99624’附近1000米(1公裡)以內的文檔。文法query=spatial_index:'circle(LON LAT,Radius)'

  • LON表示經度,LAT表示緯度,Radius為半徑,單位米;半徑10公裡內效能最佳,超過10公裡效能會大幅變差。

  • 具體功能及文法可參考文檔:Range範圍查詢

4.新增精排運算式

其中距離排序也可以採用如下方式實現,使用者座標通過kvpairs傳遞: kvpairs=longtitude_in_query:120.34256, latitude_in_query:30.56982

精排運算式為:

-distance(longitude_in_doc,latitude_in_doc,longtitude_in_query, latitude_in_query, distance_value)

文法說明:

distance(location1, location2, outputname, defaultvalue)

參數說明:

  • location1: GEO_POINT類型的欄位名稱

  • location2: 使用者查詢串中kvpairs字句中設定的一個欄位名,值為GEO_POINT欄位要求的格式:LON LAT

  • outputname:如果需要在結果中返回距離值,可以通過制定outputname值得到,如果不需要,可以不指定。

  • defaultvalue: 用於指定當文檔中location1的值非法時,distance返回的距離值,可以不指定,不指定時預設返回100000

說明:樣本中long_lat_in_query需要在kvpairs中設定,例如:kvpairs=long_lat_in_query:120.34256 30.56982