在这里发布这个是因为我在网络上的其他地方找不到任何注释或解决方案。
我目前在使用驱动器搜索工具栏时的搜索结果与应用程序脚本的DriveApp.searchFiles()
功能之间存在差异,如下所示。
云端硬盘搜索栏始终返回给定查询的完整结果 [查看文档和标题中的所有文本],但DriveApp.searchFiles()
不会。 某些文件丢失/未返回。
找到仅从驱动器搜索栏返回的给定文件(DriveApp 搜索未返回的文件(并打开它后,它开始出现/由DriveApp.searchFiles()
返回。
这个问题似乎进一步是特定于用户的问题。我们正在开发的脚本由多个用户和新用户(添加到现有文件系统然后为我们的工具的用户(使用,大多数文件都会遇到此问题。之后,当他们打开给定的"丢失"文件时,它再次开始出现在搜索结果中。
作为参考,我的代码如下:
var targetParam = 'title contains "'+target+'" or fullText contains "'+target+'"';
var searchResults = DriveApp.searchFiles(targetParam);
在此问题的所有情况下,驱动器搜索栏都会返回完整列表,打开给定文件可以"修复"其问题。鉴于我们尝试执行的操作的规模,不可能让每个用户打开每个文件。
为澄清起见,这些文件位于团队云端硬盘或传统 G Suite 的大型文件系统中。通过向用户添加到最高级别文件、团队云端硬盘或添加到已有权访问文件系统的用户组来授予用户访问权限。所有用户都在我们的域内。
这是一个已知的差异吗?我的搜索查询中是否有可能做错了什么导致这种情况?我对任何潜在的解决方案或想法都感兴趣。
只是提到导致这种情况的原因之一,来自 使用组共享内容 (强调我的(
如果您稍后向群组添加新成员,他们将只能通过文稿的 URL 访问文稿。要使文档显示在新成员的 Google 云端硬盘的"与我共享"视图中,您必须与群组重新共享文档或单独与新成员共享文档。
一个可能的解决方案(我没有要测试的域(是启用然后使用Drive
"高级服务",而不是DriveApp
实现。如果查看 Drive REST API forFiles#list
,您会注意到查询文件时使用的默认语料库是用户访问过的文件。此语料库包含用户自己创建的任何文件(通过 UI 或脚本(。
因此,修改搜索语料库可能是答案。如果您想搜索团队云端硬盘项目,则必须添加很多额外的内容,因此我将留给读者。
function searchDomain(query) {
const listOptions = {
q: query,
corpora: 'domain',
};
const results = [];
do {
var search = Drive.Files.list(listOptions);
listOptions.pageToken = search.nextPageToken;
if (search.items)
Array.prototype.push.apply(results, search.items);
else
console.log({message: "No results for search", search: query, options: listOptions});
} while (listOptions.pageToken);
return results;
}
鉴于您提到DriveApp.searchFiles
您已经知道query
字符串的一般结构,但是对于任何找到它的人,您将需要在此处查看有关其格式的文档