是否可以将元数据用作天蓝色搜索中自定义技能的输入?

时间:2019-01-04 15:43:34

标签: azure search metadata azure-search

几个月前,我开始使用Azure搜索,但是blobfiles的元数据存在问题。

我需要文件的元数据(来自Azure Blob)才能在我的customkill中使用它。 (更具体地说,我需要存储它的blob文件的URL)。

要做到这一点,我需要我的技能,我会在this image中做类似的事情。但这是不可能的,因为源必须以/ document开头?如果我将“ / document / metadata_storage_path / ”用作“ ”,那么我最后得到的是空值吗?

是否有一种方法可以获取文件的元数据作为输入以进一步使用它?

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为您的源路径必须是“ / document / metadata_storage_path”,结尾没有多余的“ /”。使用额外的“ /”,源路径将解释为元数据_存储_路径中名称为“”(空字符串)的目录。

答案 1 :(得分:0)

我发现了为什么它(以及解决方案)对我不起作用。我希望我能帮助遇到此问题的其他人。

Sophiac上面提到的语法是正确的。因此,在我的情况下,我使用“ metadata_storage_path”作为技能组中的输入:

{
      "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
      "description": "Our new substring custom skill",
      "uri": "https://customskillsubstring.azurewebsites.net/api/Translate?code=OkzL7G3wX----jCqQylUyJJPaggSaFQCaQ==",
      "batchSize":1,
      "context": "/document",
      "inputs": [
        {
          "name": "text", "source": "/document/metadata_storage_path"
        }
      ],
      "outputs": [
        {
          "name": "text",
          "targetName": "metadata_storage_path_wathever"
        }
      ]
    }

问题出在索引器中。我在将“ metadata_storage_path”映射到其他内容的映射(在我的情况下为“ blob_uri”)。问题在于这实际上不是映射,而是更像是替换。因此,技能集中的“ metadata_storage_path”为空,因为它已被替换。

但是,如果我使用“ blob_uri”,它可以工作。 解决方案是,您可以将一个输入映射到索引器中的多个对象:

"fieldMappings" : [
        {
          "sourceFieldName" : "metadata_storage_name",
          "targetFieldName" : "id",
          "mappingFunction" :
            { "name" : "base64Encode" }
        },
        {
          "sourceFieldName" : "content",
          "targetFieldName" : "content"
        },
        {
          "sourceFieldName" : "metadata_storage_path",
          "targetFieldName" : "blob_uri"
        },
        {
          "sourceFieldName" : "metadata_storage_path",
          "targetFieldName" : "metadata_storage_path"
        }
   ], 

现在,我可以使用“ blob_uri”和“ metadata_storage_path”作为我的海关技能的输入。