public function similar_handler_argument_nid::similar_build_query in Similar Entries 6.2
Same name and namespace in other branches
- 7.2 views/similar_handler_argument_nid.inc \similar_handler_argument_nid::similar_build_query()
Builds a query from argument configuration options.
Parameters
$text: The text of the current node to be used in the query.
$modifier: An optional FULLTEXT search modifer. ie 'IN BOOLEAN MODE'.
See also
similar_handler_argument_nid::query()
1 call to similar_handler_argument_nid::similar_build_query()
- similar_handler_argument_nid::query in views/
similar_handler_argument_nid.inc - Builds the query.
File
- views/
similar_handler_argument_nid.inc, line 289 - Defines the Similar entries node ID argument.
Class
- similar_handler_argument_nid
- Defines the similar entries View node ID argument.
Code
public function similar_build_query($text, $modifier = '') {
$query = array();
if (!empty($modifier)) {
$modifier = " {$modifier}";
}
$revisions = $this->query
->ensure_table('node_revisions');
// Add the node title to the query.
$weight = !empty($this->options['similar']['adjust_relevance']) && isset($this->options['similar']['relevance']['title_relevance']) ? $this->options['similar']['relevance']['title_relevance'] : 1;
$query[] = "({$weight} * (MATCH({$revisions}.title) AGAINST('{$text}'{$modifier})))";
// Add the node body to the query.
$weight = !empty($this->options['similar']['adjust_relevance']) && isset($this->options['similar']['relevance']['body_relevance']) ? $this->options['similar']['relevance']['body_relevance'] : 1;
$query[] = "({$weight} * (MATCH({$revisions}.body) AGAINST('{$text}'{$modifier})))";
if (module_exists('content') && !empty($this->options['similar']['include_fields'])) {
$indices = similar_get_indices();
foreach (self::get_field_options() as $field => $label) {
$weight = !empty($this->options['similar']['relevance']['adjust_relevance']) && isset($this->options['similar']['cck_fields']['included_fields:' . $field]) ? $this->options['similar']['cck_fields']['included_fields:' . $field] : 1;
// Tables and columns are stored as table:column.
list($table, $column) = explode(':', $field);
$alias = $this->query
->ensure_table($table);
$query[] = "({$weight} * (MATCH({$table}.{$column}) AGAINST('{$text}'{$modifier})))";
}
}
// Return a query that calculates an average score to prevent scores from fluctuating too much.
// We multiply the score by different amounts depending on the modifier used.
return "((" . implode(" + ", $query) . ") / " . count($query) . ")";
}