azure-cognitive-search - 用于复杂数据类型的 Azure 搜索索引器
问题描述
我们使用 Azure 搜索已有多年,并且运行良好。我刚刚意识到新的复杂数据类型,并且对实现它们非常感兴趣。我可以找到如何创建索引的好例子,但我的挑战是如何实现索引器。
我们将索引器用于我们的 SQL Server 数据库,并启用集成的更改检测以在我们运行索引器时自动更新我们的索引。为此,数据源必须指向一个表。
对于我们当前的实现,我们已经扁平化了我们的数据,将几个多值字段放入列表中,以便可以将它们带入索引中。如果我们能避免这种扁平化,那就太棒了。
例如,假设我们正在索引歌曲数据,并且该数据包括 SongID、Title、AuthorIDs 和 AuthorNames。源数据来自 Song 表和 Author 表,两者都包含 SongID。我们当前的展平表包含以下条目:
SongID: S9182
Title: My awesome new song
AuthorIDs: ["A12345","A67890"]
AuthorNames: ["John Smith","Sally Smith"]
关于我如何做到这一点的任何指示?我唯一的想法是拥有多个索引器。一个用于基本信息,其他用于每种复杂数据类型。但这似乎不是很优雅。
谢谢!
解决方案
为了索引两个表,您需要创建两个索引器(数据源 1 用于表 1,数据源 2 用于表 2;索引器 1 用于数据源 1,索引器 2 用于数据源 2)。您可以在两个表之间创建一个视图,但是您将失去集成的更改跟踪。
听起来您已将复杂的索引字段部分散列出来。但要彻底并提供一个示例:如果您的数据以 JSON 形式存储在 SQL 字段中,并且相应的索引字段设置为复杂类型,则索引器将自动索引 JSON 中的字段。例如:
源数据:
{
"SongID": "S9182",
"Title": "My awesome new song",
"AuthorIDs": ["A12345", "A67890"],
"AuthorNames": ["John Smith", "Sally Smith"]
}
索引字段定义:
{
name: "fieldName",
type: "Edm.ComplexType",
fields:[
{
name: "songID",
type: "Edm.String"
},
{
name: "Title",
type: "Edm.String"
},
{
name: "AuthorIDs",
type: "Collection(Edm.String)"
},
{
name: "AuthorNames",
type: "Collection(Edm.String)"
}
]
}
使用上面的数据形状和索引定义,索引器会自动将 JSON 中的字段索引到索引中。
如果还有更多问题,请告诉我。
推荐阅读
- scala - 将包含链式函数调用的枚举传递给 Scala 中的 for...yield 理解
- python - 寻找以下代码的解释,了解如何找到长方体的坐标?
- arrays - 通过键在关联数组中搜索
- reactjs - 反应 js 中的 AWS polly(文本到语音)。无法获取 AWS 上下文以提供凭据
- firebase - 如何从 Firebase 身份验证更改电子邮件的电子邮件发件人姓名?
- angular - 回调按钮时角度删除查询参数
- javascript - 反应本机(博览会)网络视图错误 net::ERR_CACHE_MISS
- php - DiscriminatorMap 注解中的环境变量或函数
- laravel - Api Endpoint 中不存在 Authorizarion 标头 - Laravel
- javascript - 如何使最小填充图表js折线图