Skip to content

Commit

Permalink
limit constructing of result objects in file search
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
icewind1991 committed Mar 11, 2021
1 parent 586cbde commit ee73220
Showing 1 changed file with 22 additions and 3 deletions.
25 changes: 22 additions & 3 deletions lib/private/Search/Provider/File.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,20 +29,31 @@
namespace OC\Search\Provider;

use OC\Files\Filesystem;
use OCP\Search\PagedProvider;

/**
* Provide search results from the 'files' app
*/
class File extends \OCP\Search\Provider {
class File extends PagedProvider {

/**
* Search for files and folders matching the given query
*
* @param string $query
* @return \OCP\Search\Result
* @param int|null $limit
* @param int|null $offset
* @return \OCP\Search\Result[]
*/
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
Expand Down Expand Up @@ -75,4 +86,12 @@ public function search($query) {
// return
return $results;
}

public function searchPaged($query, $page, $size) {
if ($size === 0) {
return $this->search($query);
} else {
return $this->search($query, $size, ($page - 1) * $size);
}
}
}

0 comments on commit ee73220

Please sign in to comment.