Azure搜索 - 然后通过距离按顺序筛选可过滤字段

时间:2014-10-29 04:36:19

标签: search azure azure-search

我尝试使用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

1 个答案:

答案 0 :(得分:0)

我们目前不支持使用评分配置文件对此方案进行建模。这已经多次出现了,所以我们想补充一下。

同时,您可以做的一件事就是将StateId值添加到其中一个可搜索的字段中(例如,只需将其附加到文本的末尾)。然后在搜索期间将状态id包括为搜索字符串的一部分,这应该将结果偏向那些与状态id匹配的文档(或者没有它的情况下是非常好的匹配,根据情况,这可能是良好的相关性)。

在显示期间,如果显示此文本字段,则必须从字符串末尾删除状态ID(或使用其他字段)。