如何使用 Azure 认知搜索将复杂类型索引到 Edm.ComplexType
How to index complex types into Edm.ComplexType with Azure Cognitive Search
我正在将数据编入由自定义技能生成的 Azure 搜索索引中。此自定义技能会生成复杂的数据,我想将其保存到 Azure 搜索索引中。
源数据来自 blob 存储,我只能使用 REST API,而没有 非常 使用 .NET SDK 的可靠论据。
当前代码
以下是我目前拥有的内容的简要概述。我无法更改索引的字段或自定义技能使用的端点生成的数据格式。
复杂数据
以下是自定义技能生成的复杂数据的示例(采用正确的value/recordId/etc.
格式):
{
"field1": 0.135412,
"field2": 0.123513,
"field3": 0.243655
}
自定义技能
这是创建上述数据的自定义技能:
{
"@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
"uri": "https://myfunction.azurewebsites.com/api,
"httpHeaders": {},
"httpMethod": "POST",
"timeout": "PT3M50S",
"batchSize": 1,
"degreeOfParallelism": 5,
"name": "MySkill",
"context": "/document/mycomplex
"inputs": [
{
"name": "text",
"source": "/document/content"
}
],
"outputs": [
{
"name": "field1",
"targetName": "field1"
},
{
"name": "field2",
"targetName": "field2"
},
{
"name": "field3",
"targetName": "field3"
}
]
}
我尝试了几种变体,值得注意的是使用 ShaperSkill,每个字段作为输入,输出 "targetName"
作为 "mycomplex"
(具有适当的上下文)。
索引器
这是技能的索引器输出字段映射:
{
"sourceFieldName": "/document/mycomplex,
"targetFieldName": "mycomplex"
}
我尝试了几种变体,例如 "sourceFieldName": "/document/mycomplex/*
。
搜索索引
这是目标索引字段:
{
"name": "mycomplex",
"type": "Edm.ComplexType",
"fields": [
{
"name": "field1",
"type": "Edm.Double",
"retrievable": true,
"filterable": true,
"sortable": true,
"facetable": false,
"searchable": false
},
{
"name": "field2",
"type": "Edm.Double",
"retrievable": true,
"filterable": true,
"sortable": true,
"facetable": false,
"searchable": false
},
{
"name": "field3",
"type": "Edm.Double",
"retrievable": true,
"filterable": true,
"sortable": true,
"facetable": false,
"searchable": false
}
]
}
结果
我的结果通常类似于 Could not map output field 'mycomplex' to search index. Check your indexer's 'outputFieldMappings' property.
。
这可能是您技能上下文的错误。除了将上下文设置为 /document/mycomplex
,您可以尝试将其设置为 /document
吗?然后,您可以添加一个 ShaperSkill
,上下文也设置为 /document
,输出字段为 mycomplex
,以生成预期的复杂类型形状
示例技能:
"skills":
[
{
"@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
"uri": "https://myfunction.azurewebsites.com/api,
"httpHeaders": {},
"httpMethod": "POST",
"timeout": "PT3M50S",
"batchSize": 1,
"degreeOfParallelism": 5,
"name": "MySkill",
"context": "/document"
"inputs": [
{
"name": "text",
"source": "/document/content"
}
],
"outputs": [
{
"name": "field1",
"targetName": "field1"
},
{
"name": "field2",
"targetName": "field2"
},
{
"name": "field3",
"targetName": "field3"
}
]
},
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"context": "/document",
"inputs": [
{
"name": "field1",
"source": "/document/field1"
},
{
"name": "field2",
"source": "/document/field2"
},
{
"name": "field3",
"source": "/document/field3"
}
],
"outputs": [
{
"name": "output",
"targetName": "mycomplex"
}
]
}
]
具体请参考shaper skill上的文档。
我正在将数据编入由自定义技能生成的 Azure 搜索索引中。此自定义技能会生成复杂的数据,我想将其保存到 Azure 搜索索引中。
源数据来自 blob 存储,我只能使用 REST API,而没有 非常 使用 .NET SDK 的可靠论据。
当前代码
以下是我目前拥有的内容的简要概述。我无法更改索引的字段或自定义技能使用的端点生成的数据格式。
复杂数据
以下是自定义技能生成的复杂数据的示例(采用正确的value/recordId/etc.
格式):
{
"field1": 0.135412,
"field2": 0.123513,
"field3": 0.243655
}
自定义技能
这是创建上述数据的自定义技能:
{
"@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
"uri": "https://myfunction.azurewebsites.com/api,
"httpHeaders": {},
"httpMethod": "POST",
"timeout": "PT3M50S",
"batchSize": 1,
"degreeOfParallelism": 5,
"name": "MySkill",
"context": "/document/mycomplex
"inputs": [
{
"name": "text",
"source": "/document/content"
}
],
"outputs": [
{
"name": "field1",
"targetName": "field1"
},
{
"name": "field2",
"targetName": "field2"
},
{
"name": "field3",
"targetName": "field3"
}
]
}
我尝试了几种变体,值得注意的是使用 ShaperSkill,每个字段作为输入,输出 "targetName"
作为 "mycomplex"
(具有适当的上下文)。
索引器
这是技能的索引器输出字段映射:
{
"sourceFieldName": "/document/mycomplex,
"targetFieldName": "mycomplex"
}
我尝试了几种变体,例如 "sourceFieldName": "/document/mycomplex/*
。
搜索索引
这是目标索引字段:
{
"name": "mycomplex",
"type": "Edm.ComplexType",
"fields": [
{
"name": "field1",
"type": "Edm.Double",
"retrievable": true,
"filterable": true,
"sortable": true,
"facetable": false,
"searchable": false
},
{
"name": "field2",
"type": "Edm.Double",
"retrievable": true,
"filterable": true,
"sortable": true,
"facetable": false,
"searchable": false
},
{
"name": "field3",
"type": "Edm.Double",
"retrievable": true,
"filterable": true,
"sortable": true,
"facetable": false,
"searchable": false
}
]
}
结果
我的结果通常类似于 Could not map output field 'mycomplex' to search index. Check your indexer's 'outputFieldMappings' property.
。
这可能是您技能上下文的错误。除了将上下文设置为 /document/mycomplex
,您可以尝试将其设置为 /document
吗?然后,您可以添加一个 ShaperSkill
,上下文也设置为 /document
,输出字段为 mycomplex
,以生成预期的复杂类型形状
示例技能:
"skills":
[
{
"@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
"uri": "https://myfunction.azurewebsites.com/api,
"httpHeaders": {},
"httpMethod": "POST",
"timeout": "PT3M50S",
"batchSize": 1,
"degreeOfParallelism": 5,
"name": "MySkill",
"context": "/document"
"inputs": [
{
"name": "text",
"source": "/document/content"
}
],
"outputs": [
{
"name": "field1",
"targetName": "field1"
},
{
"name": "field2",
"targetName": "field2"
},
{
"name": "field3",
"targetName": "field3"
}
]
},
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"context": "/document",
"inputs": [
{
"name": "field1",
"source": "/document/field1"
},
{
"name": "field2",
"source": "/document/field2"
},
{
"name": "field3",
"source": "/document/field3"
}
],
"outputs": [
{
"name": "output",
"targetName": "mycomplex"
}
]
}
]
具体请参考shaper skill上的文档。