Azure 搜索中的复杂字段如何在数据库中表示?

How are complex fields in Azure Search represented in a database?

使用 Azure 认知搜索时,您可以使用 JSON 将复杂字段推送到索引,就像这样(使用官方酒店示例的简化版本):

{
      "HotelId": "1",
      "HotelName": "Secret Point Hotel",
      "Category": "Boutique",
      "Tags": [ "view", "air conditioning", "concierge" ],
      "Address": {
        "StreetAddress": "677 5th Ave",
        "City": "New York",
        "StateProvince": "NY",
        "PostalCode": "10022",
        "Country": "USA"
      },
      "Rooms": [
        {
          "Description": "Budget Room, 1 Queen Bed (Cityside)",
          "Description_fr": "Chambre Économique, 1 grand lit (côté ville)",
          "Type": "Budget Room",
          "BaseRate": 96.99,
          "BedOptions": "1 Queen Bed",
          "SleepsCount": 2,
          "SmokingAllowed": true,
          "Tags": [ "vcr/dvd" ]
        },
        {
          "Description": "Budget Room, 1 King Bed (Mountain View)",
          "Description_fr": "Chambre Économique, 1 très grand lit (Mountain View)",
          "Type": "Budget Room",
          "BaseRate": 80.99,
          "BedOptions": "1 King Bed",
          "SleepsCount": 2,
          "SmokingAllowed": true,
          "Tags": [ "vcr/dvd", "jacuzzi tub" ]
        },
     ]
}

注意这里有几个复杂的字段类型,标签、地址和房间。由于 Rooms 是三个中最难的,让我们为 Rooms 建模。官方 SQL 脚本不包含任何类型的房间数据创建,因此我看不出索引器如何 find/read 该数据。

我需要如何表示我的数据(在索引器正在读取的视图中)才能创建复杂的集合,例如上面的 Rooms 示例?

如果这不可能,是否可以在数据库中表示 Address,以便在下面的架构中将其传输到 Azure 搜索?

您需要创建一个附加到包含所有酒店数据的 SQL 视图的数据源。您的视图应包含包含代表复杂类型的嵌入式 JSON 的列(标签、地址、房间)。

这是使用 'Rooms' 列创建视图的示例,该列将包含房间 table 中的数据:

CREATE VIEW [dbo].[HotelRooms]
AS
SELECT *, (SELECT *
         FROM dbo.Rooms
         WHERE dbo.Rooms.HotelID = dbo.Hotels.HotelID FOR JSON AUTO) AS Rooms
FROM dbo.Hotels
GO

此视图将包含一列 Room,其中将填充一个 JSON 数组,例如:[{"Description": "Budget Room"},{"Description": "Another Room"}]

您的视图中列出的列应与您的索引架构完全匹配。您将需要在您的索引上创建一个名为 RoomCollection(Edm.ComplexType) 类型的字段,它将包含子字段,例如 Description.

更多信息请看这里: https://docs.microsoft.com/en-us/azure/search/index-sql-relational-data