如何解决将索引键设置为输出字段映射
在索引中,我有一个名为id
的字段。在扩充管道中,我计算了一个名为/document/documentId
的值,试图将其映射到id
字段。但是,此映射似乎不起作用,因为id
似乎总是一个看起来像哈希的长值。我所有其他输出字段映射均按预期工作。
索引部分:
{
'name': 'id','type': 'Edm.String','facetable': false,'filterable': true,'key': true,'retrievable': true,'searchable': true,'sortable': true,'analyzer': null,'indexAnalyzer': null,'searchAnalyzer': null,'synonymMaps': [],'fields': []
}
索引器的部分:
'outputFieldMappings': [
{
'sourceFieldName': '/document/documentId','targetFieldName': 'id'
}
]
期望值:4b160942-050f-42b3-bbbb-f4531eb4ad7c
实际值:aHR0cHM6Ly9zdGRvY3VtZW50c2Rldi5ibG9iLmNvcmUud2luZG93cy5uZXQvMDNiZTBmMzEtNGMyZC00NDRjLTkzOTQtODJkZDY2YTc4MjNmL29yaWdpbmFscy80YjE2MDk0Mi0wNTBmLTQyYjMtYmJiYi1mNDUzMWViNGFkN2MucGRm0
任何有关如何解决此问题的想法将不胜感激!
解决方法
您可以使用常规字段映射而不是输出字段映射。如果您在Azure门户中创建了索引器,则您的密钥(即“ id”,因为在上面的“ id”的索引定义中密钥为true)可能是base64编码的(默认情况下选中该选项)。您将需要对其进行base64解码以获得原始值,或者您可以存储原始值的第二个副本而无需对其进行编码(密钥需要进行编码)。后者的操作方法如下-这可以代替您的输出字段映射:
"fieldMappings": [
{
"sourceFieldName": "documentId","targetFieldName": "documentId"
},{
"sourceFieldName": "documentId","targetFieldName": "id","mappingFunction": {
"name": "base64Encode"
}
}
]
请注意,由于还需要以原始格式存储它,因此您还需要在索引中添加一个documentId字段。
{
'name': 'documentId','type': 'Edm.String','facetable': false,'filterable': true,'key': false,'retrievable': true,'searchable': true,'sortable': true,'analyzer': null,'indexAnalyzer': null,'searchAnalyzer': null,'synonymMaps': [],'fields': []
}
或者,您可以只进行base64编码(在存储时)和解码(在检索时)id值。此密钥值是base64编码的,因此可以安全用作Azure Cognitive Search文档密钥。查看https://docs.microsoft.com/azure/search/search-indexer-field-mappings了解更多信息。
,TL; DR-无法将输出字段映射用于键。只能使用源字段。
根据Microsoft,无法使用输出字段映射设置文档密钥。显然,在删除文档的情况下会出现问题,因此密钥必须直接存在于文档之外。
我最终在fieldMappings中使用了映射功能。
"fieldMappings": [
{
"sourceFieldName": "metadata_storage_name","targetFieldName": "filename"
},{
"sourceFieldName": "metadata_storage_name","mappingFunction": {
"name": "extractTokenAtPosition","parameters": {
"delimiter": ".","position": 0
}
}
}
]
由于我的文件名类似于4b160942-050f-42b3-bbbb-f4531eb4ad7c.pdf
,所以最终将映射正确映射到我的ID。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。