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

使用Microsoft Graph API搜索本地索引数据时URL路径过滤问题

Microsoft Graph Connector 特定路径搜索问题解决方案

问题描述

我正尝试搜索由本地Microsoft Graph Connector索引的数据,已有大量文件完成索引且在部分搜索中可见,但使用“URL”属性筛选特定文件夹下的数据时始终无法得到结果。

使用的查询语句如下:

search_query = {
    "requests": [
        {
            "entityTypes": [
                "microsoft.graph.externalItem"
            ],
            "contentSources": [
                f"/external/connections/{self.connection_id}"
            ],
            "query": {
                "queryString": value,
                "queryTemplate": '{searchTerms} url:\"O:\\_Some&Folder\\ClientName\\Projects\\Area\\ProjectName*\"'
            },
            "fields": [
                "title", "fileName", "fileExtension", "url", "fileWebLink", "ParentLink", "path", "modifiedBy", "fileID", "documentId"],
            "from": 0,
            "size": 25,
        }
    ]
}

请求发送至端点:https://graph.microsoft.com/v1.0/search/query

最终目标是仅返回本地文件系统中特定路径下的文件夹数据。尝试多种查询方式后,推测问题与索引的内部分词(tokenization)机制有关,但尚未找到解决办法。

理想情况下希望使用类似(URL: "path*" OR URL:"path*")的KQL语法,但目前发现仅当指定Projects文件夹两侧的部分路径(如O:\\_Some&Folder\\ClientName\\或Area\\ProjectName*\\)时,查询才会返回结果。另外,当URL属性不包裹引号时,路径会被拆分为多个小分词,虽能得到结果,但需要指定多个不同项目路径,这种方式会导致同名项目返回错误结果。

请问如何解决分词问题以实现完整URL过滤?或者该功能是否可行?

解决方案

1. 检查URL字段的索引配置

Microsoft Graph Connector对外部字段的分词规则由索引属性定义。默认情况下,url字段可能被配置为可分词的文本字段,导致路径中的特殊字符(如&、\\)被当作分隔符拆分:

  • 登录Microsoft 365管理中心,进入Microsoft Search > 连接器,找到你的本地文件连接器。
  • 查看字段映射,确认url字段的索引类型:如果是String类型且勾选了可搜索,会触发分词;需要改为不可搜索但可筛选的String类型,或使用Edm.String类型并设置filterable=true、searchable=false(自定义字段映射时)。

2. 使用path字段替代url筛选

从查询字段列表看,已包含path字段。本地文件连接器通常会将文件的本地路径映射到path字段,该字段的分词规则更适合路径匹配:

  • 修改queryTemplate为:
    '{searchTerms} path:\"O:\\_Some&Folder\\ClientName\\Projects\\Area\\ProjectName*\"'
    
  • 若path字段仍存在分词问题,尝试用通配符覆盖分词节点,将路径拆分为多个部分用*连接:
    '{searchTerms} path:\"O:*_Some&Folder*ClientName*Projects*Area*ProjectName*\"'
    

3. 利用KQL的startswith或eq运算符(需字段支持)

如果url或path字段被配置为可筛选的精确匹配字段,可使用KQL运算符实现精确前缀匹配:

  • 修改查询模板为:
    '{searchTerms} url:startswith("O:\\_Some&Folder\\ClientName\\Projects\\Area\\ProjectName")'
    
    注意:该方式要求字段必须支持startswith运算符,即索引配置中filterable设为true。

4. 自定义字段映射

若默认字段无法满足需求,可在连接器配置中添加自定义字段,将完整路径存储为不可分词的筛选字段:

  • 在连接器的字段映射步骤,添加新字段(如fullPath),映射到本地文件的完整路径。
  • 设置该字段的索引属性为filterable=true、searchable=false,确保路径作为整体存储,不被分词。
  • 查询时使用fullPath:\"O:\\_Some&Folder\\ClientName\\Projects\\Area\\ProjectName*\"进行筛选。

5. 多路径筛选的优化

若需同时匹配多个项目路径,使用KQL的OR运算符组合多个筛选条件,确保每个路径都使用正确的引号和通配符:

'{searchTerms} (path:\"O:\\_Some&Folder\\ClientName\\Projects\\Area\\Project1*\" OR path:\"O:\\_Some&Folder\\ClientName\\Projects\\Area\\Project2*\")'

内容的提问来源于stack exchange,提问作者Jakub Sowa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:52:31