Drive Search与DriveApp.searchFiles(目标)

时间:2018-06-01 17:53:25

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

在此发布此消息是因为我在网络上的其他地方找不到任何说明或解决方案。

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

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

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

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

供参考,我的代码如下:

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

在此问题的所有情况下,驱动器搜索栏都会返回一个完整列表,并打开一个给定的文件并修复&#​​39;它的问题。考虑到我们要做的事情的规模,不可能让每个用户打开每个文件。

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

这是一个已知的差异吗?我的搜索查询中是否存在可能导致错误的原因?我对任何可能的解决方案或想法感兴趣。

2 个答案:

答案 0 :(得分:0)

Use Groups to share content(强调我的)

来提及造成这种情况的其中一件事
  

如果您稍后向该群组添加新成员,则他们只能通过文档的网址访问该文档。要使文档显示在新成员的Google云端硬盘的“与我共享”视图中,您必须将该文档与该组一起转发或与新成员分别共享该文档。

答案 1 :(得分:0)

对此的可能解决方案(我没有要测试的域)是启用然后使用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的文档。