You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式选择JSON分隔符,适配Azure认知搜索多层JSON索引

解决Azure认知搜索中多层JSON的键值对拆分问题

由于Azure认知搜索(ACS)仅支持内置工具处理JSON,要拆分包含嵌套结构(如数组、嵌套对象)的JSON为顶级键值对token,需使用支持嵌套结构识别的正则表达式,避免误拆分嵌套内部的逗号分隔符。

适用的正则分隔符

使用以下正则表达式作为索引器的拆分分隔符:

^\{\s*|\s*\}$|,\s*(?=(?:(?:[^"\\]|\\.)*")*(?:[^"\\]|\\.)*$)(?![^\[\{\]]*[\]\}])

正则逻辑解释

  • ^\{\s*:匹配JSON开头的{及其后续空白字符,用于移除外层包裹的左大括号
  • \s*\}$:匹配JSON结尾的}及其前面的空白字符,用于移除外层包裹的右大括号
  • ,\s*(?=(?:(?:[^"\\]|\\.)*")*(?:[^"\\]|\\.)*$):通过正向预查确保逗号不在引号包裹的字符串内,避免拆分带逗号的字符串值
  • (?![^\[\{\]]*[\]\}]):通过负向预查确保逗号不在未闭合的[]或{}内部,忽略嵌套结构里的分隔符

配置与效果

将此正则配置到ACS索引器的字段拆分规则中,针对用户提供的样例JSON:

{
    "CategoryName":"Desktop",
    "ProductDescription":"Computer",
    "ExternalManufacturerName":[
        "Computer Maker A",
        "Computer Maker B"
    ],
    "Brand":"Computer Maker A"
}

拆分后将得到预期的独立token:

[
    "\"CategoryName\":\"Desktop\"",
    "\"ProductDescription\":\"Computer\"",
    "\"ExternalManufacturerName\":[\n        \"Computer Maker A\",\n        \"Computer Maker B\"\n    ]",
    "\"Brand\":\"Computer Maker A\""
]

注意事项

  • ACS使用.NET正则引擎,完全支持上述预查语法,无需额外配置
  • 若JSON包含更深层级的嵌套对象(如{"key":{"subkey":"value"}}),该正则同样适用,会忽略嵌套对象内部的逗号

内容的提问来源于stack exchange,提问作者Fruity Medley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:25:28