From 0916c7abe7b1e803c111a0e0e177ead6feebf2a9 Mon Sep 17 00:00:00 2001 From: Jared Hancock <jared@osticket.com> Date: Wed, 30 Sep 2015 19:18:30 -0500 Subject: [PATCH] search: Bubble search relevance for related objects Instead of using distinct alone, change to add the relevance of related items when searching for tickets. In other words, when performing a full text search for 'xyz', add the relevance of matched user, organization, and thread objects. --- include/class.search.php | 2 +- include/staff/tickets.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/class.search.php b/include/class.search.php index 6cac6d7e4..dbf1f7eac 100644 --- a/include/class.search.php +++ b/include/class.search.php @@ -376,7 +376,7 @@ class MysqlSearchBackend extends SearchBackend { $criteria->extra(array( 'tables' => array( str_replace(array(':', '{}'), array(TABLE_PREFIX, $search), - "(SELECT COALESCE(Z3.`object_id`, Z5.`ticket_id`, Z8.`ticket_id`) as `ticket_id`, {} AS `relevance` FROM `:_search` Z1 LEFT JOIN `:thread_entry` Z2 ON (Z1.`object_type` = 'H' AND Z1.`object_id` = Z2.`id`) LEFT JOIN `:thread` Z3 ON (Z2.`thread_id` = Z3.`id` AND Z3.`object_type` = 'T') LEFT JOIN `:ticket` Z5 ON (Z1.`object_type` = 'T' AND Z1.`object_id` = Z5.`ticket_id`) LEFT JOIN `:user` Z6 ON (Z6.`id` = Z1.`object_id` and Z1.`object_type` = 'U') LEFT JOIN `:organization` Z7 ON (Z7.`id` = Z1.`object_id` AND Z7.`id` = Z6.`org_id` AND Z1.`object_type` = 'O') LEFT JOIN :ticket Z8 ON (Z8.`user_id` = Z6.`id`) WHERE {}) Z1"), + "(SELECT COALESCE(Z3.`object_id`, Z5.`ticket_id`, Z8.`ticket_id`) as `ticket_id`, SUM({}) AS `relevance` FROM `:_search` Z1 LEFT JOIN `:thread_entry` Z2 ON (Z1.`object_type` = 'H' AND Z1.`object_id` = Z2.`id`) LEFT JOIN `:thread` Z3 ON (Z2.`thread_id` = Z3.`id` AND Z3.`object_type` = 'T') LEFT JOIN `:ticket` Z5 ON (Z1.`object_type` = 'T' AND Z1.`object_id` = Z5.`ticket_id`) LEFT JOIN `:user` Z6 ON (Z6.`id` = Z1.`object_id` and Z1.`object_type` = 'U') LEFT JOIN `:organization` Z7 ON (Z7.`id` = Z1.`object_id` AND Z7.`id` = Z6.`org_id` AND Z1.`object_type` = 'O') LEFT JOIN :ticket Z8 ON (Z8.`user_id` = Z6.`id`) WHERE {} GROUP BY `ticket_id`) Z1"), ) )); $criteria->filter(array('ticket_id'=>new SqlCode('Z1.`ticket_id`'))); diff --git a/include/staff/tickets.inc.php b/include/staff/tickets.inc.php index 5adab6cec..6e2defbe7 100644 --- a/include/staff/tickets.inc.php +++ b/include/staff/tickets.inc.php @@ -100,7 +100,7 @@ case 'search': // Do wildcard search if no hits $__tickets = $ost->searcher->find($_REQUEST['query'].'*', $tickets); } - $tickets = $__tickets->distinct('ticket_id'); + $tickets = $__tickets; $has_relevance = true; } if (count($tickets) == 1) { -- GitLab