【问题标题】:Discrepancy between Drive Search and DriveApp.searchFiles(target)Drive Search 和 DriveApp.searchFiles(target) 之间的差异
【发布时间】:2018-06-01 17:53:24
【问题描述】:

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

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

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

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

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

供参考,我的代码如下:

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

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

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

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

【问题讨论】:

  • 丢失的文件归谁所有?它们如何与脚本的用户共享?文件是通过使用用户的电子邮件地址、使用具有链接的任何人还是使用电子邮件组共享的?您的用户使用的是消费者帐户还是 G Suite 帐户?你读过文档吗?
  • 它们是 G Suite 团队驱动器中的文件和/或大型文件系统中的驱动器文件,在我们的 G Suite 业务中与电子邮件用户组共享,这些都是很好的问题,我会更新我的帖子相应地。

标签: google-apps-script google-drive-api google-apps google-groups google-drive-shared-drive


【解决方案1】:

仅提及导致此问题的原因之一,来自Use Groups to share content(强调我的)

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

【讨论】:

    【解决方案2】:

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

    因此,修改search corpora 可能是答案。如果你想search Team Drive items,还有很多额外的东西需要添加,所以我会把它留给读者。

    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 字符串的一般结构,但是对于找到此内容的任何人,您都需要查看格式为here 的文档

    【讨论】:

      猜你喜欢
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 2023-02-13
      • 1970-01-01
      • 2010-10-19
      • 2020-09-15
      相关资源
      最近更新 更多