如何使用MS Graph API仅搜索OneDrive文件名而非文件内容
针对MS Graph API仅检索OneDrive文件名的解决方案
方案1:使用filter参数枚举子项(推荐,无内容匹配干扰)
该方案完全不触发内容检索,仅校验文件名称,匹配结果100%精准:
- 文件名匹配规则通过OData的
$filter参数实现,匹配以WKP开头的文件写法为:$filter=startswith(name,'WKP') - 多层子文件夹遍历通过
$expand参数递归嵌套实现,最多支持嵌套20层,如需遍历3层子文件夹的写法如下:
GET /v1.0/sites/{siteId}/drive/items/{指定文件夹ItemId}?$expand=children($expand=children($expand=children;$filter=startswith(name,'WKP'));$filter=startswith(name,'WKP'))&$select=id,name,webUrl
返回结果会同时包含指定根文件夹下所有层级中文件名符合要求的文件条目,可直接提取name、id等所需字段。
方案2:调整search接口的查询语法
如果必须使用search接口,需要使用SharePoint搜索托管属性的标准写法,此前小写的filename:前缀不生效是因为托管属性名要求首字母大写,正确写法如下:
- q参数写法:
q='FileName:WKP*',FileName为官方指定的文件名托管属性名,后缀加*匹配以指定字符开头的所有文件名 - 完整接口示例:
GET /v1.0/sites/{siteId}/drive/items/{ItemId}/search(q='FileName:WKP*')
该方案依赖站点搜索索引的更新时效,新上传文件可能存在数分钟的检索延迟。
内容的提问来源于stack exchange,提问作者Jony
相关产品推荐
相关产品推荐

