我想迎合以下示例與Azure搜索。從給定的緯度/經度位置的距離Azure搜索 - OrderBy可過濾字段,然後通過距離
{
"name": "mySchema",
"fields": [
{
"name": "Id",
"type": "Edm.String",
"key": true,
"searchable": false,
"filterable": false,
"sortable": false,
"facetable": false,
"retrievable": true,
"suggestions": false
},
{
"name": "StateId",
"type": "Edm.Int32",
"key": false,
"searchable": false,
"filterable": true,
"sortable": false,
"facetable": false,
"retrievable": true,
"suggestions": false
},
{
"name": "Location",
"type": "Edm.GeographyPoint",
"key": false,
"searchable": false,
"filterable": true,
"sortable": true,
"facetable": false,
"retrievable": true,
"suggestions": false
},
],
}
我希望能夠首先下令對StateId
場我的結果,並然後: 給出下面的索引架構。
我知道我能夠在查詢時通過使用$filter= StateId eq x
組件來實現第一部分。但是,我確實希望仍然收到不在提供的StateId中但距離提供的位置有一定距離的結果(分數較低)。
我也認識到,這看起來應該能夠通過自定義評分配置文件來實現。我會用進球檔案想到,我能夠回到這樣的事情:
[
{
"@search.score":100.0,
"Id":"111",
"StateId":"123",
"Location": {"type": "Point details...."},
},
{
"@search.score":100.0,
"Id":"222",
"StateId":"123",
"Location": {"type": "Point details...."},
},
{
"@search.score":50.0,
"Id":"333",
"StateId":"789",
"Location": {"type": "Point details...."},
}
]
但是,我不能搜索的StateId
領域,因爲這是一個Edm.Int32
價值,所以我做的不相信使用評分檔案將是一個可行的解決方案。
任何人都會遇到類似的情況?
編輯:
試圖進一步解釋只是有點 - 如果我是僞SQL來解釋這一點,這基本上是我試圖處理
ORDER BY (CASE WHEN StateId = @StateId THEN 1 ELSE 0 END) DESC, Location
我想過的一個想法是添加一個名爲「StateIdGuid」的額外可搜索字段,並使用評分配置文件來匹配此值。 – Nagoh 2014-10-29 05:10:16
您的數據存儲在哪裏,您使用的是Azure表格存儲? – Abhijeet 2014-10-29 06:39:55
這是使用Azure搜索 - http://azure.microsoft.com/en-us/services/search/ – Nagoh 2014-10-29 09:49:27