Несоответствие между поиском на Диске и DriveApp.searchFiles(target)

Размещаю это здесь, потому что я не нашел заметки или решения в другом месте в Интернете.

В настоящее время я испытываю несоответствие между результатами поиска при использовании панели инструментов поиска на диске и функциональностью DriveApp.searchFiles() сценариев приложений, как показано ниже.

Панель поиска диска всегда возвращает полные результаты для заданного запроса [просматривая весь текст в документе и в заголовке], но DriveApp.searchFiles() этого не делает. Некоторые файлы отсутствуют/не возвращены.

После нахождения данного файла, который возвращается ТОЛЬКО из панели поиска диска (тот, который не был возвращен поиском DriveApp) и его открытия, он начинает появляться/возвращаться DriveApp.searchFiles().

Эта проблема также, по-видимому, зависит от пользователя. Сценарий, который мы разрабатываем, используется несколькими пользователями, а новые пользователи (те, которые добавлены в существующую файловую систему, а затем получили наш инструмент) сталкиваются с этой проблемой для большинства файлов. После чего, когда они открывают данный «отсутствующий» файл, он снова начинает появляться в результатах поиска.

Для справки, мой код выглядит следующим образом:

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

Во всех случаях этой проблемы панель поиска диска возвращает полный список, и открытие данного файла «исправляет» проблему. Учитывая масштаб того, что мы пытаемся сделать, невозможно, чтобы каждый пользователь открывал каждый файл.

Для пояснения: эти файлы находятся в большой файловой системе либо на общих дисках, либо в традиционном G Suite. Пользователям предоставляется доступ путем добавления к файлу самого высокого уровня, к общему диску или путем добавления в группу пользователей, которая уже имеет доступ к файловой системе. Все пользователи находятся в нашем домене.

Это известное несоответствие? Есть ли что-то, что я могу сделать неправильно в своем поисковом запросе, чтобы вызвать это? Меня интересуют любые возможные решения или идеи.


comment
Кому принадлежат недостающие файлы? Как они передаются пользователям вашего скрипта? Расшариваются ли файлы с помощью адреса электронной почты пользователя, с помощью кого-либо, у кого есть ссылка, или с помощью группы электронной почты? Используют ли ваши пользователи потребительские учетные записи или учетные записи G Suite? Вы читали документы?   -  person Rubén    schedule 01.06.2018
comment
это файлы на общих дисках G Suite и/или файлы дисков в больших файловых системах, которые используются совместно с группами пользователей электронной почты в рамках нашего бизнеса G Suite, это хорошие вопросы, и я соответствующим образом обновлю свой пост.   -  person Nick G    schedule 01.06.2018


Ответы (2)


Просто упомянем одну из причин, вызывающих это, из Используйте группы для обмена контентом. (выделено мной)

Если позже вы добавите новых участников в группу, они смогут получить доступ к документу только через URL-адрес документа. Чтобы документ отображался в представлении «Доступно мне» на Google Диске нового участника, вы должны повторно поделиться документом с группой или поделиться документом с новым участником индивидуально.

person Rubén    schedule 01.06.2018

Возможное решение этой проблемы (у меня нет домена для тестирования) — включить, а затем использовать Drive "расширенный сервис", а не DriveApp реализация. Если кто-то просмотрит Drive REST API для Files#list, он обратите внимание, что корпус по умолчанию, используемый при запросе файлов, — это файлы, к которым пользователь получил доступ. Этот корпус включает в себя любой файл, который пользователь создал самостоятельно (с помощью пользовательского интерфейса или скрипта).

Таким образом, решением может стать изменение корпуса поиска. Если вы хотите искать на общем диске, нужно добавить много дополнительных вещей. 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, но для тех, кто найдет это, вам следует просмотреть документацию по ее формату здесь

person tehhowch    schedule 03.06.2018