gpt4 book ai didi

azure - 如何在 azure 搜索中对复杂 json 对象(例如嵌套数组)进行字段映射

转载 作者:行者123 更新时间:2023-12-01 17:59:58 25 4
gpt4 key购买 nike

我有以下问题我有一个到索引的字段映射更新。有效负载很复杂,其中我有:

{
"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."

有人可以帮忙吗?

最佳答案

如果 party 是一个 Json 对象,而不是一个数组,而phone则只是一个字符串数组

{
"type": "abc",
"Party": {
"Type": "abc",
"Id": "123",
"Name": "manasa",
"Phone": [{
"12345",
"23463"
}]
}
}

然后我就可以映射

{
"sourceFieldName" : "Party/Phonenumber",
"targetFieldName" : "phonenumbers",
"mappingFunction" : { "name" : "jsonArrayToStringCollection" }
}

它映射为 odata EDM.string 类型的集合。

因此,为了更好、更直接地表达这一点,

  1. 要么将你的 json 转换为更扁平的东西(我的例子上面给出)或
  2. 如果您之前知道的话,请使用正确的索引: @Luis Cabrera 说,

        “sourceFieldName”: “/Party/0/Phone/0/Type

这是来自 azure 搜索端的限制。

关于azure - 如何在 azure 搜索中对复杂 json 对象(例如嵌套数组)进行字段映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48151575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com