我正在尝试使用 Azure 搜索来满足以下示例。给定以下索引架构:
{
"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
值,所以我不相信使用评分配置文件是一个可行的解决方案。
有人遇到过类似的情况吗?
编辑:
试图进一步解释 - 如果我要在 Psuedo-SQL 中解释这一点,这基本上就是我要处理的情况
ORDER BY (CASE WHEN StateId = @StateId THEN 1 ELSE 0 END) DESC, Location