首页 > 解决方案 > 用于复杂数据类型的 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"]

关于我如何做到这一点的任何指示?我唯一的想法是拥有多个索引器。一个用于基本信息,其他用于每种复杂数据类型。但这似乎不是很优雅。

谢谢!

标签: azure-cognitive-search

解决方案


为了索引两个表,您需要创建两个索引器(数据源 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 中的字段索引到索引中。

如果还有更多问题,请告诉我。


推荐阅读