limit constructing of result objects in file search

even thought we currently have no proper way of limiting the search itself, we can at least limit the construction of the result objects.

this saves about 40% of the time spend in the search request in my local testing

Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
Robin Appelman 2021-03-10 18:46:18 +01:00 committed by backportbot[bot]
parent 7f0f9fcd93
commit b6af62fd24
2 changed files with 13 additions and 3 deletions

View File

@ -103,7 +103,7 @@ class FilesSearchProvider implements IProvider {
// Make sure we setup the users filesystem
$this->rootFolder->getUserFolder($user->getUID());
return SearchResult::complete(
return SearchResult::paginated(
$this->l10n->t('Files'),
array_map(function (FileResult $result) {
// Generate thumbnail url
@ -121,7 +121,8 @@ class FilesSearchProvider implements IProvider {
$searchResultEntry->addAttribute('fileId', (string)$result->id);
$searchResultEntry->addAttribute('path', $result->path);
return $searchResultEntry;
}, $this->fileSearch->search($query->getTerm()))
}, $this->fileSearch->search($query->getTerm(), $query->getLimit(), (int)$query->getCursor())),
$query->getCursor() + $query->getLimit()
);
}

View File

@ -39,14 +39,23 @@ class File extends \OCP\Search\Provider {
/**
* Search for files and folders matching the given query
*
* @param string $query
* @param int|null $limit
* @param int|null $offset
* @return \OCP\Search\Result[]
* @deprecated 20.0.0
*/
public function search($query) {
public function search($query, int $limit = null, int $offset = null) {
if ($offset === null) {
$offset = 0;
}
\OC_Util::setupFS();
$files = Filesystem::search($query);
$results = [];
if ($limit !== null) {
$files = array_slice($files, $offset, $offset + $limit);
}
// edit results
foreach ($files as $fileData) {
// skip versions