0

Azure Search を使用して、次の例に対応しようとしています。次のインデックス スキーマがあるとします。

{
  "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
4

1 に答える 1