我有以下问题 我有一个字段映射更新到索引.Payload是复杂的地方 我有:
{
"type": "abc",
"Party": [{
"Type": "abc",
"Id": "123",
"Name": "manasa",
"Phone": [{
"Type": "Office",
"Number": "12345"
}]
}]
}
现在我想为索引创建一个字段。字段名称是Collection(Edm.String)类型的语音 其中映射是
{
"sourceFieldName" : "/Party/Phone/Number",
"targetFieldName" : "phonenumber",
"mappingFunction" : { "name" : "jsonArrayToStringCollection" }
}
在http帖子中 但仍然在索引之后我得到的电话号码结果为null。这意味着映射出错了。如果你在源json中看到电话号码,它就在json数组中,它本身就是一个数组,结果需要存储在一个集合中一个字符串。我有可能实现这个目标吗? 如果这是不可能的,我至少想要字段映射,直到电话阵列即。,/ Party / Phone /
如果我将完整的聚会数组索引为文本,则在运行索引时会出现错误:
"Field 'partydetails' contains a term that is too large to process. The max length for UTF-8 encoded terms is 32766 bytes. The most likely cause of this error is that filtering, sorting, and/or faceting are enabled on this field, which causes the entire field value to be indexed as a single term. Please avoid the use of these options for large fields."
有人可以帮忙!
答案 0 :(得分:1)
请注意,Party和Phone是数组,因此您提到的字段映射无法正常工作。
您需要索引特定元素。例如:
{
"sourceFieldName": "/Party/0/Phone/0/Type",
"targetFieldName": "firstPhoneNumberTypeOfFirstParty"
}
你可能想要一试。
谢谢!
Luis Cabrera |项目经理| Azure搜索
答案 1 :(得分:1)
如果聚会是一个Json对象而不是一个数组而手机只是一个字符串数组,例如
{
"type": "abc",
"Party": {
"Type": "abc",
"Id": "123",
"Name": "manasa",
"Phone": [{
"12345",
"23463"
}]
}
}
然后我可以映射
{
"sourceFieldName" : "Party/Phonenumber",
"targetFieldName" : "phonenumbers",
"mappingFunction" : { "name" : "jsonArrayToStringCollection" }
}
它映射为odata EDM.string类型的集合。
所以要以更好,更直接的方式,
如果您在吸入之前知道,请使用正确的索引 @Luis Cabrera说,
“sourceFieldName”: “/Party/0/Phone/0/Type
这是天蓝色搜索方面的限制。