From 870ecf2b81a3756b5e199328d7fdaabc112a21ce Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 7 Mar 2023 20:38:46 +0100 Subject: [PATCH] searchengine: Improve performance for recursive search As fancy as property paths are, recursive resolution of files to a location increases the big O complexity enough that it's not a great option on large homedirs with many indexed files. Ensure the files are from the right location through a URI prefix match, which does hits an index. This may dramatically improve performance on large indexed trees. Testing this query in an isolated testcase with a total 1434099 indexed files shows that it can run more than 1500 times per second in this computer (an average of 15200 queries in several 10 second runs), which presumably is a tad faster than anyone can type. Closes: https://gitlab.gnome.org/GNOME/gtk/-/issues/4133 --- gtk/gtksearchenginetracker3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gtk/gtksearchenginetracker3.c b/gtk/gtksearchenginetracker3.c index 3f054110b5..4aba6312ff 100644 --- a/gtk/gtksearchenginetracker3.c +++ b/gtk/gtksearchenginetracker3.c @@ -52,7 +52,7 @@ "ORDER BY DESC(fts:rank(?urn)) DESC(?url)" #define SEARCH_QUERY SEARCH_QUERY_BASE("") -#define SEARCH_RECURSIVE_QUERY SEARCH_QUERY_BASE("?urn (nfo:belongsToContainer/nie:isStoredAs)+/nie:url ~location") +#define SEARCH_RECURSIVE_QUERY SEARCH_QUERY_BASE("FILTER (STRSTARTS (?url, CONCAT (~location, '/')))") #define SEARCH_LOCATION_QUERY SEARCH_QUERY_BASE("?urn nfo:belongsToContainer/nie:isStoredAs/nie:url ~location") #define FILE_CHECK_QUERY "ASK { ?urn nie:url ~url }"