searchengine: Bail out on the first character
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 7 Mar 2023 23:03:28 +0000 (00:03 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 8 Mar 2023 10:33:10 +0000 (11:33 +0100)
Again on massive filesystems, the very first character
is likely to bring a likewise massive amount of search
results that we need to maybe query info for, then create
icons and widgets for. While it's impressive we can do
that, it's also expensive and likely pointless, for the
first character.

Typing a second character is however very likely to
considerably reduce the amount of items to categorize and
show. So start actually searching from there.

Testing on a filesystem with 1434099 files indexed, trying 5
semi-random 1 character searches (n, h, t, i, o) returns on
average 168K items (min. 78771, max. 331471), trying 5
semi-random 2 character searches (no, he, th, in, on)
returns on average 34K items (min. 11133, max. 94961),
which is a more approachable set.

Doing this is enough that typing on a filechooser search
entry feels completely fluid.

gtk/gtksearchenginetracker3.c

index 5ce8916f3972b48a1785871fd4b63f4dec23f822..86a8e8fe98e01f59c3d02e315972ca7f8c3f0a20 100644 (file)
@@ -284,10 +284,14 @@ gtk_search_engine_tracker3_start (GtkSearchEngine *engine)
       return;
     }
 
-  tracker->query_pending = TRUE;
   search_text = gtk_query_get_text (tracker->query);
   location = gtk_query_get_location (tracker->query);
 
+  if (strlen (search_text) <= 1)
+    return;
+
+  tracker->query_pending = TRUE;
+
   if (location)
     {
       char *location_uri = g_file_get_uri (location);