Blame SOURCES/search-engine-tracker-Do-not-lose-filename-results-d.patch

99600e
diff --git a/src/nautilus-search-engine-tracker.c b/src/nautilus-search-engine-tracker.c
99600e
index 66494cae8..32b6039a9 100644
99600e
--- a/src/nautilus-search-engine-tracker.c
99600e
+++ b/src/nautilus-search-engine-tracker.c
99600e
@@ -286,6 +286,12 @@ search_finished_idle (gpointer user_data)
99600e
     return FALSE;
99600e
 }
99600e
 
99600e
+/* This is used to compensate rank if fts:rank is not set (resp. fts:match is
99600e
+ * not used). The value was determined experimentally. I am conviced that
99600e
+ * fts:rank is currently always set to 5.0 in case of filename match.
99600e
+ */
99600e
+#define FILENAME_RANK 5.0
99600e
+
99600e
 static void
99600e
 nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
99600e
 {
99600e
@@ -327,7 +333,11 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
99600e
     mimetypes = nautilus_query_get_mime_types (tracker->query);
99600e
     mime_count = g_list_length (mimetypes);
99600e
 
99600e
-    sparql = g_string_new ("SELECT DISTINCT nie:url(?urn) fts:rank(?urn) nfo:fileLastModified(?urn) nfo:fileLastAccessed(?urn)");
99600e
+    sparql = g_string_new ("SELECT DISTINCT"
99600e
+                           " nie:url(?urn)"
99600e
+                           " xsd:double(COALESCE(?rank2, ?rank1)) AS ?rank"
99600e
+                           " nfo:fileLastModified(?urn)"
99600e
+                           " nfo:fileLastAccessed(?urn)");
99600e
 
99600e
     if (tracker->fts_enabled)
99600e
     {
99600e
@@ -342,16 +352,31 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
99600e
                      "  tracker:available true;"
99600e
                      "  nie:url ?url");
99600e
 
99600e
-    if (*search_text)
99600e
+    if (mime_count > 0)
99600e
     {
99600e
-        g_string_append_printf (sparql, "; fts:match '\"%s\"*'", search_text);
99600e
+        g_string_append (sparql, "; nie:mimeType ?mime");
99600e
     }
99600e
 
99600e
-    if (mime_count > 0)
99600e
+    if (tracker->fts_enabled)
99600e
     {
99600e
-        g_string_append (sparql, "; nie:mimeType ?mime");
99600e
+        /* Use fts:match only for content search to not lose some filename results due to stop words. */
99600e
+        g_string_append_printf (sparql,
99600e
+                                " {"
99600e
+                                " ?urn fts:match '\"nie:plainTextContent\" : \"%s\"*' ."
99600e
+                                " BIND(fts:rank(?urn) AS ?rank1) ."
99600e
+                                " } UNION",
99600e
+                                search_text);
99600e
     }
99600e
 
99600e
+    g_string_append_printf (sparql,
99600e
+                            " {"
99600e
+                            " ?urn nfo:fileName ?filename ."
99600e
+                            " FILTER(fn:contains(fn:lower-case(?filename), '%s')) ."
99600e
+                            " BIND(%f AS ?rank2) ."
99600e
+                            " }",
99600e
+                            search_text,
99600e
+                            FILENAME_RANK);
99600e
+
99600e
     g_string_append_printf (sparql, " . FILTER( ");
99600e
 
99600e
     if (!tracker->recursive)
99600e
@@ -363,11 +388,6 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
99600e
         g_string_append_printf (sparql, "tracker:uri-is-descendant('%s', ?url)", location_uri);
99600e
     }
99600e
 
99600e
-    if (!tracker->fts_enabled)
99600e
-    {
99600e
-        g_string_append_printf (sparql, " && fn:contains(fn:lower-case(nfo:fileName(?urn)), '%s')", search_text);
99600e
-    }
99600e
-
99600e
     date_range = nautilus_query_get_date_range (tracker->query);
99600e
     if (date_range)
99600e
     {
99600e
@@ -424,7 +444,7 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
99600e
         g_string_append (sparql, ")\n");
99600e
     }
99600e
 
99600e
-    g_string_append (sparql, ")} ORDER BY DESC (fts:rank(?urn))");
99600e
+    g_string_append (sparql, ")} ORDER BY DESC (?rank)");
99600e
 
99600e
     tracker->cancellable = g_cancellable_new ();
99600e
     tracker_sparql_connection_query_async (tracker->connection,
99600e
-- 
99600e
2.23.0
99600e