本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在亞馬遜雲端搜尋中依地理位置搜尋並將結果排名
如果您在文件資料中使用latlon
欄位中,您可以使用haversin
函數來計算兩個位置之間的距離。用文件資料存放位置亦方便您在特定區域內進行搜尋。
在某區域 Amazon CloudSearch
若要將位置與搜尋文件產生關聯,您可以使用十進位度數表示法將位置的經緯度存放於 latlon
欄位。使用以逗號分隔的清單指定其值lat,lon
— 例如35.628611,-120.694152
。位置與文件產生關聯讓您能夠利用 fq
參數輕鬆地將搜尋命中項目限制於特定區域。
使用週框方塊將結果限制於特定區域
判定您感興趣的區域其左上角和右下角的經緯度。
使用
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.latitude
和 FIELD.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
請注意,您必須明確指定排序方向,即 asc
或 desc
。
透過使用 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.
如需如何使用運算式對搜尋結果進行排序的詳細資訊,請參閱控制搜尋結果。