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