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