2014-10-29 60 views
0

我想迎合以下示例與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 
+0

我想過的一個想法是添加一個名爲「StateIdGuid」的額外可搜索字段,並使用評分配置文件來匹配此值。 – Nagoh 2014-10-29 05:10:16

+0

您的數據存儲在哪裏,您使用的是Azure表格存儲? – Abhijeet 2014-10-29 06:39:55

+0

這是使用Azure搜索 - http://azure.microsoft.com/en-us/services/search/ – Nagoh 2014-10-29 09:49:27

回答

0

的情況下,我們目前不支持使用配置文件建模此場景。這已經出現了多次,所以這是我們想補充的。

與此同時,作爲解決方法,您可以將StateId值添加到其中一個可搜索字段(例如,將其附加到文本末尾)。然後,在搜索過程中將狀態ID作爲搜索字符串的一部分,這應該會將結果歪曲爲符合狀態ID的文檔(或者,如果沒有它,這可能是很好的相關性,取決於具體情況)。

在顯示期間,如果顯示此文本字段,則必須從字符串末尾去除狀態ID(或使用其他字段)。

+0

感謝您的回覆。但這對我來說並不是一個真正有用的解決方法。我想我委託做2個查詢。第一個得到'StateId eq 123'的地方,第二個'StateId ne 123 AND geo.distance(location,..., – Nagoh 2014-10-29 10:16:40