适用于复杂数据类型的Azure搜索索引器

时间:2019-06-17 23:20:23

标签: azure-search

我们使用Azure搜索已有很多年了,并且运行良好。我刚意识到新的复杂数据类型,并对实现它们非常感兴趣。我可以找到有关如何创建索引的很好的示例,但是我面临的挑战是如何实现索引器。

我们在SQL Server数据库中使用索引器,并且启用了集成的更改检测,以便在运行索引器时自动更新索引。为此,数据源必须指向表。

对于当前的实现,我们将数据展平以将多个多值字段放入列表中,以便可以将它们带入索引。如果我们可以避免必须进行这种拼合,那就太好了。

作为示例,假设我们正在索引歌曲数据,并且该数据包括SongID,Title,AuthorID和AuthorName。源数据来自Song表和Author表,两者均包含SongID。我们当前的展平表包含以下条目:

SongID:S9182
标题:我很棒的新歌
作者ID:[“ A12345”,“ A67890”]
作者名称:[“ John Smith”,“ Sally Smith”]

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

让我知道是否还有更多问题。