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

Azure Search技能集无法使用contains运算符,求解决方案

解决办法

方案1:使用indexOf函数替代contains

Azure Cognitive Search的ConditionalSkill支持OData表达式中的indexOf函数,通过判断目标子字符串的索引是否大于等于0,即可实现“包含”的判断逻辑。修改后的ConditionalSkill配置如下:

{
  "@odata.type": "#Microsoft.Skills.Util.ConditionalSkill",
  "name": "SetModeBasedOnPath",
  "description": "Sets mode based on metadata_spo_item_path",
  "context": "/document",
  "inputs": [
    {
      "name": "condition",
      "source": "= indexOf($(/document/metadata_spo_item_path), '/Multimodel Doc/') >= 0"
    },
    {
      "name": "whenTrue",
      "source": "= 'multimodel'"
    },
    {
      "name": "whenFalse",
      "source": "= 'non-multimodel'"
    }
  ],
  "outputs": [
    {
      "name": "output",
      "targetName": "mode"
    }
  ]
}

原理:indexOf(string, substring)会返回子字符串在原字符串中的起始位置,若返回值≥0则说明原字符串包含该子字符串,返回-1则不包含。

方案2:拆分路径后检查片段(适合复杂层级判断)

如果需要更精准地匹配文件夹名称(而非路径片段),可以先通过SplitSkill将路径按斜杠分割为片段数组,再用ConditionalSkill判断数组中是否存在目标文件夹名:

第一步:添加SplitSkill拆分路径

{
  "@odata.type": "#Microsoft.Skills.Text.SplitSkill",
  "name": "SplitPathSegments",
  "description": "Split SharePoint path into segments using slash as delimiter",
  "context": "/document",
  "inputs": [
    {
      "name": "text",
      "source": "/document/metadata_spo_item_path"
    },
    {
      "name": "delimiter",
      "source": "= '/'"
    }
  ],
  "outputs": [
    {
      "name": "items",
      "targetName": "pathSegments"
    }
  ]
}

第二步:修改ConditionalSkill判断数组元素

{
  "@odata.type": "#Microsoft.Skills.Util.ConditionalSkill",
  "name": "SetModeBasedOnPathSegment",
  "description": "Sets mode based on path segments",
  "context": "/document",
  "inputs": [
    {
      "name": "condition",
      "source": "= $(/document/pathSegments/any(segment: segment eq 'Multimodel Doc'))"
    },
    {
      "name": "whenTrue",
      "source": "= 'multimodel'"
    },
    {
      "name": "whenFalse",
      "source": "= 'non-multimodel'"
    }
  ],
  "outputs": [
    {
      "name": "output",
      "targetName": "mode"
    }
  ]
}

原理:SplitSkill将路径拆分为数组后,使用OData的any函数检查数组中是否存在等于"Multimodel Doc"的元素,以此判断文档是否位于目标文件夹下。

方案3:索引器字段映射直接处理(简化场景)

如果不需要在技能集中处理,也可以在索引器的字段映射中直接计算mode字段:

{
  "fieldMappings": [
    {
      "sourceFieldName": "metadata_spo_item_path",
      "targetFieldName": "mode",
      "mappingFunction": {
        "name": "conditional",
        "parameters": {
          "condition": "indexOf(source, '/Multimodel Doc/') >= 0",
          "whenTrue": "multimodel",
          "whenFalse": "non-multimodel"
        }
      }
    }
  ]
}

这种方式无需额外添加技能集,适合逻辑简单的场景。

内容的提问来源于stack exchange,提问作者Mad Max

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:48:23