使用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
相关产品推荐
相关产品推荐

