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

使用Microsoft Graph API从OneDrive批量获取小文件返回重复项求助

Microsoft Graph Search API返回重复DriveItem且缺失唯一文档的问题

我正在开发一款基于Microsoft Graph API的应用,用于从OneDrive中按修改日期范围、关键词、作者等条件筛选内容。测试时遇到严重问题:API返回的结果里存在大量重复项,同时部分唯一文档缺失。我们的测试集是10000个唯一文件,API返回总数也是10000,但其中1098个是重复的,相当于实际只拿到了8902个唯一文档。

更奇怪的是,API返回的total字段准确显示总数为10000,但实际返回内容中约11%是重复项。

一开始我以为是使用的SDK有问题,但改用Online Microsoft Graph Explorer直接调用API后,问题依然存在。

测试步骤

  • 创建10000个唯一文本文件,统一设置修改日期为2024年4月15日,大小在1kb-5kb之间,确保无重复。
  • 通过OneDrive Windows客户端上传至测试账号,耗时数天完成。
  • 等待一周,确保文件在Microsoft Graph API服务中完全同步。
  • 在Online Microsoft Graph Explorer中发送POST请求到https://graph.microsoft.com/v1.0/search/query,使用以下查询参数:
{
    "requests": [
        {
            "entityTypes": [
                "driveItem"
            ],
            "query": {
                "queryString": "lastModifiedTime>=2024-04-10 AND lastModifiedTime<=2024-04-20"
            },
            "from": 0,
            "size": 100,
            "fields": [
                "id"
            ]
        }
    ]
}

该查询获取指定日期范围内的DriveItem,按每页100条分页,仅返回id字段用于重复项分析。

返回示例(简化)

{
    "value": [
        {
            "searchTerms": [],
            "hitsContainers": [
                {
                    "hits": [
                        {
                            "hitId": "01S4RUMYPHXG4DV57DVVBKNFDS45C5OXHY",
                            "rank": 1,
                            "resource": {
                                "@odata.type": "#microsoft.graph.driveItem",
                                "id": "01S4RUMYPHXG4DV57DVVBKNFDS45C5OXHY"
                            }
                        }
                    ],
                    "total": 10000,
                    "moreResultsAvailable": false
                }
            ]
        }
    ],
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.searchResponse)"
}

重复项验证代码

收集所有分页结果后,用以下JavaScript代码分析:

const hits = [/* 包含API返回的10000条结果的数组 */]

const unique = new Set();
const hitIds = hits.map(element => element.hitId);
const duplicates = hitIds.filter(hitId => {
    if (unique.has(hitId)) return hitId;
    unique.add(hitId);
});

console.log(unique.size, duplicates.length); // 输出: 8902 1098

已尝试的解决方法

  • 在请求中添加trimDuplicates参数
  • 调整分页大小为50或25

以上方法均未解决问题,希望熟悉Microsoft Graph API的朋友能提供排查思路或解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:42:08