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"}]
您的视图中列出的列应与您的索引架构完全匹配。您将需要在您的索引上创建一个名为 Room
的 Collection(Edm.ComplexType)
类型的字段,它将包含子字段,例如 Description
.
更多信息请看这里:
https://docs.microsoft.com/en-us/azure/search/index-sql-relational-data
使用 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"}]
您的视图中列出的列应与您的索引架构完全匹配。您将需要在您的索引上创建一个名为 Room
的 Collection(Edm.ComplexType)
类型的字段,它将包含子字段,例如 Description
.
更多信息请看这里: https://docs.microsoft.com/en-us/azure/search/index-sql-relational-data