我已经设置了Google网站,使用this tutorial中详述的自定义搜索引擎,以便能够在云端硬盘中搜索文件。我对此设置的一个问题是它似乎无法递归搜索。所以我点了Developers Reference并对其进行了修改以便能够做到这一点:
function doGet(e) {
var folders = DriveApp.getFolders();
var app = UiApp.createApplication();
var panel = app.createVerticalPanel();
while(folders.hasNext()) {
var folderIterator = folders.next();
var results = folderIterator.searchFiles('fullText contains "' + e.parameter.q + '"');
while(results.hasNext()) {
var file = results.next();
panel.add(app.createAnchor(file.getName(), file.getUrl()));
}
}
var scrollPanel = app.createScrollPanel(panel).setHeight(200);
app.add(scrollPanel);
return app;
}
问题是,原始解决方案(特定于文件夹)大约需要1分钟才能返回。递归解决方案(搜索用户有权访问的所有文件)最多可能需要2分钟。有什么想法我们如何优化它返回,比方说,10秒或更短?鉴于我们正在讨论少于200个文件的顺序,考虑到谷歌的搜索能力,这应该是完全可行的。这不合理吗?
答案 0 :(得分:0)
我的问题的主要动机是延迟 - 自定义驱动器搜索在Google网站中使用的时间太长。感谢Sandy Good指出UiApp is deprecated. Use HTML Service.
。如果你发布这个作为答案,我很高兴标记:)
将所有内容移动到驱动器中的单个文件夹后,这就是我想出的内容:
// rewrite
function doGet(e) {
var results = DriveApp.getFolderById('<drive id here>').searchFiles('fullText contains "' + e.parameter.q + '"');
var output = HtmlService.createHtmlOutput('Results: <br /><br /><ul>');
while (results.hasNext()) {
var file = results.next();
output.append('<li><a href="' + file.getUrl() + '">' + file.getName() + '</a></li>');
}
output.append('</ul>');
return output;
}