Skip to content
Snippets Groups Projects
Commit 0916c7ab authored by Jared Hancock's avatar Jared Hancock
Browse files

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.
parent 934cde36
Branches
Tags
No related merge requests found
...@@ -376,7 +376,7 @@ class MysqlSearchBackend extends SearchBackend { ...@@ -376,7 +376,7 @@ class MysqlSearchBackend extends SearchBackend {
$criteria->extra(array( $criteria->extra(array(
'tables' => array( 'tables' => array(
str_replace(array(':', '{}'), array(TABLE_PREFIX, $search), 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`'))); $criteria->filter(array('ticket_id'=>new SqlCode('Z1.`ticket_id`')));
......
...@@ -100,7 +100,7 @@ case 'search': ...@@ -100,7 +100,7 @@ case 'search':
// Do wildcard search if no hits // Do wildcard search if no hits
$__tickets = $ost->searcher->find($_REQUEST['query'].'*', $tickets); $__tickets = $ost->searcher->find($_REQUEST['query'].'*', $tickets);
} }
$tickets = $__tickets->distinct('ticket_id'); $tickets = $__tickets;
$has_relevance = true; $has_relevance = true;
} }
if (count($tickets) == 1) { if (count($tickets) == 1) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment