0

在这里发布这个是因为我在网络上的其他地方没有找到任何注释或解决方案。

我目前在使用驱动器搜索工具栏和DriveApp.searchFiles()应用程序脚本的功能时遇到搜索结果之间的差异,如下所示。

驱动器搜索栏始终返回给定查询的完整结果 [查看文档和标题中的所有文本],但DriveApp.searchFiles() 不返回。某些文件丢失/未返回。

在找到仅从驱动器搜索栏返回的给定文件(DriveApp 搜索未返回的文件)并打开它后,它开始出现/被DriveApp.searchFiles().

这个问题进一步似乎是用户特定的问题。我们正在开发的脚本被多个用户使用,新用户(添加到现有文件系统然后提供我们的工具的用户)在大多数文件中都会遇到这个问题。之后,当他们打开给定的“丢失”文件时,它会再次开始出现在搜索结果中。

作为参考,我的代码如下:

var targetParam = 'title contains "'+target+'" or fullText contains "'+target+'"';
var searchResults = DriveApp.searchFiles(targetParam);

在此问题的所有情况下,驱动器搜索栏都会返回完整列表并打开给定文件“修复”其问题。鉴于我们正在尝试做的事情的规模,不可能让每个用户都打开每个文件。

为澄清起见,这些文件位于团队驱动器或传统 G 套件中的大型文件系统中。用户可以通过添加到最高级别的文件、团队驱动器或添加到已经可以访问文件系统的用户组来获得访问权限。所有用户都在我们的域内。

这是已知的差异吗?我的搜索查询中是否有什么我可能做错了导致这种情况?我对任何潜在的解决方案或想法感兴趣。

4

2 回答 2

0

仅提及导致此问题的原因之一,从使用组共享内容(强调我的)

如果您稍后将新成员添加到该组,他们将只能通过文档的 URL访问该文档。要使文档显示在新成员的 Google Drive 的“与我共享”视图中,您必须与群组重新共享文档或单独与新成员共享文档。

于 2018-06-01T20:17:34.393 回答
0

一个可能的解决方案(我没有要测试的域)是启用然后使用Drive“高级服务”而不是DriveApp实现。如果您查看 Drive REST API for Files#list,您会注意到查询文件时使用的默认语料库是用户访问过的文件。该语料库包括用户自己创建的任何文件(通过 UI 或脚本)。

因此,修改搜索语料库可能是答案。如果您想搜索 Team Drive 项目,则必须添加很多额外的东西,所以我将把它留给读者。

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字符串的一般结构,但是对于任何发现它的人,您需要在此处查看有关其格式的文档

于 2018-06-03T15:29:25.317 回答