微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Collection(Edm.String) 的现有“内容”字段索引 blob 内容?

如何解决如何使用 Collection(Edm.String) 的现有“内容”字段索引 blob 内容?

我可以使用 Azure 搜索从 blob 存储中成功索引文档(如 PDF 等),并且认情况下它会进入一个名为 content 的字段。

但我想要实现的是:

  • 将 blob 文件内容索引到名为 fileContent (Edm.String) 的字段
  • 一个用于其他用途的字段,称为 content (Collection(Edm.String))

而且我无法在没有错误的情况下完成这项工作。我已经尝试了一切并取得了一些成功,但据我所知,不可能将数据重定向content 以外的其他字段,同时还定义了一个 content 字段,即 Collection(Edm.String) .

这是我尝试过的:

设置输出字段映射,以便内容进入名为“fileContent”的字段。例如:

  "outputFieldMappings": [
    {
      "sourceFieldName": "/document/content","targetFieldName": "fileContent"
    }
  ]

这工作正常,文件内容进入定义为 fileContentEdm.String 字段。但是,如果我在定义为 content 的索引中创建添加一个名为 Collection(Edm.String)自定义字段,我会在索引操作期间收到异常:

文档中键为“1234”的数据字段“内容”具有无效的“Edm.String”类型值(字符串映射到 Edm.String)。预期的类型是“Collection(Edm.String)”。

当我将 content 映射到不同的字段时,为什么它会关心我的数据类型是什么?

我已经验证,如果我将 content 字段设为 Edm.String,我不会收到错误,但现在我在索引中有重复的条目,因为 content 和 {{1 }} 包含相同的信息。

根据 documentation 可以将字段从 fileContent 更改为其他内容(但它没有告诉您如何):

内容字段对于 blob 内容很常见。它包含从 blob 中提取的文本。您对该字段的定义可能与上述类似。您不需要使用此名称,但这样做可以让您利用隐式字段映射。 blob 索引器可以将 blob 内容发送到索引中的内容 Edm.String 字段,无需字段映射。

我还尝试使用普通(非输出content 将输入 fieldMappings 字段重定向content 但如果 fileContent 是也用 content

定义
Collection(Edm.String)

我还尝试通过技能集重定向内容,但即使我可以在自定义字段中捕获该输出,只要我添加 { "sourceFieldName": "content","targetFieldName": "fileContent","mappingFunction": null } (content),一切都会爆炸。

>

非常感谢任何指针。

更新 事实证明,只要 Collection(Edm.String) 类型只是 fileContent,上述(非输出)fieldMapping 就可以工作。但是,如果您想添加一个技能组来处理此数据,则需要将该数据重定向到另一个字段。它不允许您将其重定向Edm.String 并且您最终会出现如下错误:“Target 参数名称:浓缩目标名称 'fileContent' 与现有的 '/document/fileContent' 冲突。因此,您似乎最终需要将原始 blob 文档数据存储在一个字段中,如果您想处理它,它需要另一个字段,这很烦人。

解决方法

索引器将尝试通过匹配索引字段名称来索引尽可能多的内容,这就是它尝试将 blob content 字符串放入索引字段 content 集合(但失败)的原因。

要解决此问题,您需要添加一个(非输出)字段从 content 映射到另一个不是索引字段名称的名称,例如 blobContent 以防止索引器过于急切。然后在技能组中,您可以通过以下任一方式使用 blobContent

  1. 将所有出现的 /document/content 替换为 /document/blobContent,或
  2. /document/content 设置一个值,该值只能在技能组(和输出字段映射)中访问,并带有 conditional skill 以尽量减少对技能组的其他更改
{
    "@odata.type": "#Microsoft.Skills.Util.ConditionalSkill","context": "/document","inputs": [
        { "name": "condition","source": "= true" },{ "name": "whenTrue","source": "/document/blobContent" },{ "name": "whenFalse","source": "= null" }
    ],"outputs": [ { "name": "output","targetName": "content" } ]
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。