在亞馬遜雲端搜尋中依地理位置搜尋並將結果排名 - Amazon CloudSearch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在亞馬遜雲端搜尋中依地理位置搜尋並將結果排名

如果您在文件資料中使用latlon欄位中,您可以使用haversin函數來計算兩個位置之間的距離。用文件資料存放位置亦方便您在特定區域內進行搜尋。

在某區域 Amazon CloudSearch

若要將位置與搜尋文件產生關聯,您可以使用十進位度數表示法將位置的經緯度存放於 latlon 欄位。使用以逗號分隔的清單指定其值lat,lon— 例如35.628611,-120.694152。位置與文件產生關聯讓您能夠利用 fq 參數輕鬆地將搜尋命中項目限制於特定區域。

使用週框方塊將結果限制於特定區域
  1. 判定您感興趣的區域其左上角和右下角的經緯度。

  2. 使用 fq 參數指定各個週框方塊座標以篩選相符的文件。例如,若您的每份文件皆包含 location 欄位,您可以將週框方塊篩選條件指定為 fq=location:['nn.n,nn.n','nn.n,nn.n'] 。在以下範例中,進行比對的 restaurant 已經過篩選,所以結果只會包含位於美國加州 Paso Robles 市區內的相符項目。

    q='restaurant'&fq=location:['35.628611,-120.694152','35.621966,-120.686706']&q.parser=structured

透過 Amazon CloudSearch 將結果依距離排序

您可以在搜尋請求中定義運算式,將結果依距離排序。Amazon CloudSearch 表達式支持haversin函數,可使用球面上兩個點的經緯度,計算該兩點間的大圓距離 (如需詳細資訊,請參閱半正矢公式)。算出的距離是以公里數傳回。

為了計算每份相符文件與使用者之間的距離,您要將使用者的位置傳入 haversin 函數並參考存放於 latlon 欄位的文件位置。請以十進位度數表示法指定使用者的經緯度,並透過 FIELD.latitudeFIELD.longitude 語法存取存放於 latlon 的緯度和經度。例如,。expr.distance=haversin(userlat,userlon, location.latitude,location.longitude)

若要使用運算式對搜尋結果進行排序,請指定 sort 參數。

例如,以下查詢會搜尋餐廳並將結果依其與使用者相隔的距離排序。

q=restaurant&expr.distance=haversin(35.621966,-120.686706,location.latitude,location.longitude)&sort=distance asc

請注意,您必須明確指定排序方向,即 ascdesc

透過使用 return 參數指定運算式的名稱,即可隨搜尋結果附上對每份文件算出的距離。例如,。return=distance

您也可以編寫更為複雜的運算式,利用距離值將其他特性因素 (例如文件的相關性 _score) 納入考量。在以下範例中,另一個排名運算式同時使用了對文件算出的 distance 及其相關性 _score

expr.distance=haversin(38.958687,-77.343149,latitude,longitude)&expr.myrank=_score/log10(distance)&sort=myrank+desc
提示

為使上述範例查詢能夠運作,您必須使用 欄位設定索引latlon且您的文件中已有 location 資料:

{ "fields": { "location": "40.05830,-74.40570" } }

若該欄位不存在,當您執行搜尋時可能會收到以下錯誤訊息:

Syntax error in query: field (location) does not exist.

如需如何使用運算式對搜尋結果進行排序的詳細資訊,請參閱控制搜尋結果