是否可以使用从 SQL 生成的 file_data json 对象作为 Azure 搜索文档提取认知技能的输入?

Is it possible to use file_data json object generated from SQL as input for Azure Search Document Extraction cognitive skill?

是否可以使用从 SQL 视图获得的 file_data 输入来使用文档提取技能提取数据?简而言之,我想做的是从存储在 blob 中的文档中提取数据,并将其添加到我的索引中的可搜索字段中。

我已尝试 return JSON 对象作为从 SQL 视图检索数据的一部分。

       (
            select 
                top 1 
                'file' as [$type],
                '.....') as [url] 
            for json path, WITHOUT_ARRAY_WRAPPER 
        ) file_data

我也试过添加一个空的 'sasToken' 属性

我收到的错误是:

Required skill input was not in the expected format. Name: 'file_data', Source: '$(/document/file_data)', Error: 'Missing file reference object'

当我调试技能时 file_data 被转义 json

file_data "{ \"$type\":\"文件\",\"url\":\"https:.....\" }"

如果我复制 url 并取消转义正斜杠 \\/ 我可以在网络浏览器中打开文档。

如果我尝试计算 file_data 表达式(在调试器中)以尝试提取 url 部分,我没有得到任何结果

file_data expression

作为参考,文档提取技能可以接受的输入格式记录在此处:https://docs.microsoft.com/en-us/azure/search/cognitive-search-skill-document-extraction#skill-inputs

数据必须是 JSON 中的 BASE64 编码二进制内容,如下所示:

{
  "$type": "file",
  "data": "BASE64 encoded string of the file"
}

或者引用一个 blob,像这样:

{
  "$type": "file",
  "url": "URL to download file",
  "sasToken": "OPTIONAL: SAS token for authentication if the URL provided is for a file in blob storage"
}

所以您的 JSON 具有正确的形状,这不是问题(并且不需要包含空标记)。问题是 JSON 被转义了,如果您尝试从 SQL 端构建对象,恐怕这是不可避免的。

幸运的是,还有另一种方法,即使用整形器技能从 Azure 认知搜索端的简单类型创建对象。

首先,从 SQL 端发出您需要的 URL 数据作为一个简单的字符串:

(select top 1 '.....') as [url])

根据您的具体情况进行调整,以便您将 url 作为进入索引器的数据中的单个字符串。

然后,将塑形技能添加到您的技能组合中,如下所示:

{
  "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
  "context": "/document",
  "inputs": [
    {
      "name": "$type",
      "source": "=\"file\""
    },
    {
      "name": "url",
      "source": "/document/url"
    }
  ],
  "outputs": [
    {
      "name": "output",
      "targetName": "file_data"
    }
  ]
}

这需要 url 并从中创建一个正确形状的 file_data 对象和 $type 的文字字符串。然后,您可以将其与文档提取技能一起使用。