Provide additional methods of scoring for core search results for nodes.
A node's search score is used to rank it among other nodes matched by the search, with the highest-ranked nodes appearing first in the search listing.
For example, a module allowing users to vote on content could expose an option to allow search results' rankings to be influenced by the average voting score of a node.
All scoring mechanisms are provided as options to site administrators, and may be tweaked based on individual sites or disabled altogether if they do not make sense. Individual scoring mechanisms, if enabled, are assigned a weight from 1 to 10. The weight represents the factor of magnification of the ranking mechanism, with higher-weighted ranking mechanisms having more influence. In order for the weight system to work, each scoring mechanism must return a value between 0 and 1 for every node. That value is then multiplied by the administrator-assigned weight for the ranking mechanism, and then the weighted scores from all ranking mechanisms are added, which brings about the same result as a weighted average.
An associative array of ranking data. The keys should be strings, corresponding to the internal name of the ranking mechanism, such as 'recent', or 'comments'. The values should be arrays themselves, with the following keys available:
Note: this list is generated by pattern matching, so it may include some functions that are not actually implementations of this hook.
function hook_ranking() {
// If voting is disabled, we can avoid returning the array, no hard feelings.
if (variable_get('vote_node_enabled', TRUE)) {
return array(
'vote_average' => array(
'title' => t('Average vote'),
// Note that we use i.sid, the search index's search item id, rather than
// n.nid.
'join' => array(
'type' => 'LEFT',
'table' => 'vote_node_data',
'alias' => 'vote_node_data',
'on' => 'vote_node_data.nid = i.sid',
),
// The highest possible score should be 1, and the lowest possible score,
// always 0, should be 0.
'score' => 'vote_node_data.average / CAST(%f AS DECIMAL)',
// Pass in the highest possible voting score as a decimal argument.
'arguments' => array(
variable_get('vote_score_max', 5),
),
),
);
}
}