0

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

1 回答 1

0

我们目前不支持使用评分配置文件对此场景进行建模。这已经出现了多次,所以这是我们想要添加的内容。

同时,作为一种变通方法,您可以做的一件事是将 StateId 值添加到可搜索字段之一(例如,只需将其附加到文本末尾)。然后在搜索过程中将状态 id 作为搜索字符串的一部分,这应该使结果偏向与状态 id 匹配的那些文档(或者没有它的非常好的匹配,这可能是很好的相关性,取决于具体情况)。

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

于 2014-10-29T10:13:49.367 回答