如何解决如何使用 Collection(Edm.String) 的现有“内容”字段索引 blob 内容?
我可以使用 Azure 搜索从 blob 存储中成功索引文档(如 PDF 等),并且默认情况下它会进入一个名为 content
的字段。
但我想要实现的是:
而且我无法在没有错误的情况下完成这项工作。我已经尝试了一切并取得了一些成功,但据我所知,不可能将数据重定向到 content
以外的其他字段,同时还定义了一个 content
字段,即 Collection(Edm.String)
.
这是我尝试过的:
设置输出字段映射,以便内容进入名为“fileContent”的字段。例如:
"outputFieldMappings": [
{
"sourceFieldName": "/document/content","targetFieldName": "fileContent"
}
]
这工作正常,文件内容进入定义为 fileContent
的 Edm.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
- 将所有出现的
/document/content
替换为/document/blobContent
,或 - 为
/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 举报,一经查实,本站将立刻删除。