【问题标题】:How to index complex types into Edm.ComplexType with Azure Cognitive Search如何使用 Azure 认知搜索将复杂类型索引到 Edm.ComplexType
【发布时间】:2020-07-20 12:07:33
【问题描述】:

我正在将数据索引到由自定义技能生成的 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.

【问题讨论】:

    标签: azure azure-cognitive-search


    【解决方案1】:

    这可能与您的技能上下文有关。除了将上下文设置为/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 上的文档。

    【讨论】:

    • 那行。我错误地假设将上下文设置为不存在的上下文(例如/document/mycomplex)会导致创建该上下文。
    猜你喜欢
    • 2021-10-18
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 2020-03-27
    相关资源
    最近更新 更多