【问题标题】:Azure Search Indexer for Complex Data Type用于复杂数据类型的 Azure 搜索索引器
【发布时间】:2019-06-21 02:30:19
【问题描述】:

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

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

对于我们当前的实现,我们已经扁平化了我们的数据,将几个多值字段放入列表中,以便可以将它们带入索引中。如果我们能够避免这种扁平化,那就太棒了。

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

歌曲ID:S9182
标题:我很棒的新歌
作者 ID:["A12345","A67890"]
作者姓名:["John Smith","Sally Smith"]

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

谢谢!

【问题讨论】:

  • 您的数据在被展平并存储在 SQL 数据库中之前是如何存储的?如果您的数据源和索引已经为复杂类型设置,那么索引器应该“正常工作”。
  • 我在我的问题中添加了更多信息,但基本上有一个基表“Song”,然后是单独的表,例如“Author”。可以有多个作者,但这些表通过 SongID 链接。那么,您是否建议我为基表设置一个索引器,然后为 Authors 设置第二个索引器?

标签: azure-cognitive-search


【解决方案1】:

为了对两个表建立索引,您需要创建两个索引器(数据源 1 用于表 1,数据源 2 用于表 2;索引器 1 用于数据源 1,索引器 2 用于数据源 2)。您可以在两个表之间创建一个视图,但是您会失去集成的更改跟踪。

听起来你已经把复杂的索引字段部分散列了。但要彻底并提供一个例子: 如果您的数据在 SQL 字段中存储为 JSON,并且相应的索引字段设置为复杂类型,则索引器将自动索引 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 中的字段索引到索引中。

如果还有其他问题,请告诉我。

【讨论】:

  • 感谢您的详细回复。这是我认为我必须采取的方法。我将无法在一周内处理此问题,但一旦我弄清楚了,我会回帖。谢谢!
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 2021-04-25
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 2021-01-02
  • 2011-05-02
相关资源
最近更新 更多