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

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