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

search: Use backend for non keyword-based queries

parent f342c60a
No related branches found
No related tags found
No related merge requests found
...@@ -62,6 +62,7 @@ class SearchInterface { ...@@ -62,6 +62,7 @@ class SearchInterface {
} }
function find($query, $criteria, $model=false, $sort=array()) { function find($query, $criteria, $model=false, $sort=array()) {
$query = Format::searchable($query);
return $this->backend->find($query, $criteria, $model, $sort); return $this->backend->find($query, $criteria, $model, $sort);
} }
...@@ -107,6 +108,7 @@ class SearchInterface { ...@@ -107,6 +108,7 @@ class SearchInterface {
$new, $new,
array( array(
'title'=> Format::searchable($model->getSubject()), 'title'=> Format::searchable($model->getSubject()),
'number'=> $model->getNumber(),
'status'=> $model->getStatus(), 'status'=> $model->getStatus(),
'topic_id'=> $model->getTopicId(), 'topic_id'=> $model->getTopicId(),
'priority_id'=> $model->getPriorityId(), 'priority_id'=> $model->getPriorityId(),
...@@ -196,7 +198,7 @@ class SearchInterface { ...@@ -196,7 +198,7 @@ class SearchInterface {
// Users, organizations // Users, organizations
Signal::connect('model.created', array($this, 'createModel')); Signal::connect('model.created', array($this, 'createModel'));
Signal::connect('model.updated', array($this, 'updateModel')); Signal::connect('model.updated', array($this, 'updateModel'));
Signal::connect('model.deleted', array($this, 'deleteModel')); #Signal::connect('model.deleted', array($this, 'deleteModel'));
} }
} }
...@@ -221,6 +223,7 @@ class MysqlSearchBackend extends SearchBackend { ...@@ -221,6 +223,7 @@ class MysqlSearchBackend extends SearchBackend {
$type = 'H'; $type = 'H';
break; break;
case $model instanceof Ticket: case $model instanceof Ticket:
$attrs['title'] = $attrs['number'].' '.$attrs['title'];
$type = 'T'; $type = 'T';
break; break;
case $model instanceof User: case $model instanceof User:
...@@ -263,16 +266,22 @@ class MysqlSearchBackend extends SearchBackend { ...@@ -263,16 +266,22 @@ class MysqlSearchBackend extends SearchBackend {
$search = 'MATCH (search.title, search.content) AGAINST (' $search = 'MATCH (search.title, search.content) AGAINST ('
.db_input($query) .db_input($query)
.$mode.')'; .$mode.')';
$tables = array("( $tables = array();
SELECT object_type, object_id, $search AS `relevance` $P = TABLE_PREFIX;
FROM `ost__search` `search` $sort = '';
WHERE $search
) `search`"); if ($query) {
$tables[] = "(
SELECT object_type, object_id, $search AS `relevance`
FROM `{$P}_search` `search`
WHERE $search
) `search`";
$sort = 'ORDER BY `search`.`relevance`';
}
switch ($model) { switch ($model) {
case false: case false:
case 'Ticket': case 'Ticket':
$P = TABLE_PREFIX;
$tables[] = "(select ticket_id as ticket_id from {$P}ticket $tables[] = "(select ticket_id as ticket_id from {$P}ticket
) B1 ON (B1.ticket_id = search.object_id and search.object_type = 'T')"; ) B1 ON (B1.ticket_id = search.object_id and search.object_type = 'T')";
$tables[] = "(select A2.id as thread_id, A1.ticket_id from {$P}ticket A1 $tables[] = "(select A2.id as thread_id, A1.ticket_id from {$P}ticket A1
...@@ -298,6 +307,7 @@ class MysqlSearchBackend extends SearchBackend { ...@@ -298,6 +307,7 @@ class MysqlSearchBackend extends SearchBackend {
case 'user_id': case 'user_id':
case 'isanswered': case 'isanswered':
case 'isoverdue': case 'isoverdue':
case 'number':
$where[] = sprintf('A1.%s = %s', $name, db_input($value)); $where[] = sprintf('A1.%s = %s', $name, db_input($value));
break; break;
case 'created__gte': case 'created__gte':
...@@ -341,13 +351,14 @@ class MysqlSearchBackend extends SearchBackend { ...@@ -341,13 +351,14 @@ class MysqlSearchBackend extends SearchBackend {
$where[] = '(' . implode(' OR ', $access) . ')'; $where[] = '(' . implode(' OR ', $access) . ')';
// TODO: Consider sorting preferences
$sql = 'SELECT DISTINCT ' $sql = 'SELECT DISTINCT '
. $key . $key
. ' FROM ' . ' FROM '
. implode(' LEFT JOIN ', $tables) . implode(' LEFT JOIN ', $tables)
. ' WHERE ' . implode(' AND ', $where) . ' WHERE ' . implode(' AND ', $where)
// TODO: Consider sorting preferences . $sort
. ' ORDER BY `relevance` DESC'
. ' LIMIT 500'; . ' LIMIT 500';
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment