我尝试使用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
答案 0 :(得分:0)
我们目前不支持使用评分配置文件对此方案进行建模。这已经多次出现了,所以我们想补充一下。
同时,您可以做的一件事就是将StateId值添加到其中一个可搜索的字段中(例如,只需将其附加到文本的末尾)。然后在搜索期间将状态id包括为搜索字符串的一部分,这应该将结果偏向那些与状态id匹配的文档(或者没有它的情况下是非常好的匹配,根据情况,这可能是良好的相关性)。
在显示期间,如果显示此文本字段,则必须从字符串末尾删除状态ID(或使用其他字段)。