几个月前,我开始使用Azure搜索,但是blobfiles的元数据存在问题。
我需要文件的元数据(来自Azure Blob)才能在我的customkill中使用它。 (更具体地说,我需要存储它的blob文件的URL)。
要做到这一点,我需要我的技能,我会在this image中做类似的事情。但这是不可能的,因为源必须以/ document开头?如果我将“ / document / metadata_storage_path / ”用作“ 源”,那么我最后得到的是空值吗?
是否有一种方法可以获取文件的元数据作为输入以进一步使用它?
谢谢!
答案 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”作为我的海关技能的输入。