You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Cognitive Search中关联多张表并生成单一索引?

在Azure Cognitive Search中关联多张表创建单一索引的可行方案及操作方法

Azure Cognitive Search完全支持将多张关联表的数据整合到单一索引中,主要有两种常用实现方式,以下是具体操作步骤:

方式一:通过ETL预处理关联数据后导入

  • 先在数据源端(比如Azure SQL Database)编写JOIN查询,将多张表的关联数据合并为扁平数据集或包含嵌套结构的数据集
  • 使用Azure Data Factory、SSIS或自定义.NET代码完成数据的抽取、转换和加载(ETL),将处理后的数据写入中间存储(如单表、Blob存储的JSON文件)
  • 基于预处理后的数据源创建Azure Cognitive Search索引器,将数据同步到目标索引中
  • 示例:若有Orders和Customers表,可通过SQL查询生成扁平数据:
    SELECT o.OrderId, o.OrderDate, c.CustomerName, c.Email 
    FROM Orders o JOIN Customers c ON o.CustomerId = c.CustomerId
    

方式二:直接使用索引器的自定义查询关联多张表

针对支持复杂查询的数据源(如Azure SQL Database、SQL Server),无需预处理,可直接在数据源配置中指定关联查询:

  • 步骤:
    1. 在Azure门户或通过.NET SDK创建数据源,指定类型(如azuresql),并将query属性设为包含JOIN逻辑的查询语句
    2. 创建匹配关联数据结构的搜索索引,包含所有需检索的字段(如订单ID、日期、客户名称等)
    3. 创建索引器,关联上述数据源和索引,配置同步周期后启动,即可自动完成数据同步
  • 简化版.NET代码示例:
    var dataSource = new SearchIndexerDataSourceConnection(
        name: "joined-datasource",
        type: SearchIndexerDataSourceType.AzureSql,
        connectionString: "<你的SQL连接字符串>",
        query: "SELECT o.OrderId, o.OrderDate, c.CustomerName, c.Email FROM Orders o JOIN Customers c ON o.CustomerId = c.CustomerId"
    );
    await searchClient.CreateOrUpdateDataSourceConnectionAsync(dataSource);
    

处理嵌套关联数据(可选)

若需保留表的层级关系(如一个订单对应多个明细),可在索引中定义嵌套字段:

  • 将明细字段设置为Collection(Edm.ComplexType)类型
  • 通过SQL的FOR JSON AUTO语法生成嵌套JSON结构,或在ETL过程中构造嵌套对象
  • 示例SQL查询生成嵌套数据:
    SELECT o.OrderId, o.OrderDate, c.CustomerName,
           (SELECT ProductId, Quantity FROM OrderDetails od WHERE od.OrderId = o.OrderId FOR JSON PATH) AS OrderDetails
    FROM Orders o JOIN Customers c ON o.CustomerId = c.CustomerId
    FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER
    

导入这类嵌套JSON数据后,即可支持嵌套字段的检索。

内容的提问来源于stack exchange,提问作者Azure Cloud Enthusiast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:15:43