public function similar_handler_argument_nid::similar_build_query in Similar Entries 7.2
Same name and namespace in other branches
- 6.2 views/similar_handler_argument_nid.inc \similar_handler_argument_nid::similar_build_query()
Builds a query from argument configuration options.
Parameters
string $text: The text of the current node to be used in the query.
string $modifier: An optional FULLTEXT search modifer. ie 'IN BOOLEAN MODE'.
Return value
string A FULLTEXT expression string.
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 358 - 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}";
}
$weight = !empty($this->options['adjust_relevance']) && isset($this->options['title_relevance']) ? $this->options['title_relevance'] : 1;
$query[] = "({$weight} * (MATCH (node.title) AGAINST ('{$text}'{$modifier})))";
// The body field is always included in the query if it exists.
if (db_table_exists('field_data_body')) {
$weight = !empty($this->options['adjust_relevance']) ? $this->options['body_relevance'] : 1;
$body_table = $this->query
->add_table('field_data_body');
if ($weight) {
$query[] = "({$weight} * (MATCH ({$body_table}.body_value) AGAINST ('{$text}'{$modifier})))";
}
}
// Add additional MATCH queries for fields if enabled.
if (!empty($this->options['include_fields']) && module_exists('field')) {
foreach (similar_get_indices() as $field => $info) {
$weight = !empty($this->options['adjust_relevance']) && isset($this->options['included_fields:' . $field]) ? $this->options['included_fields:' . $field] : 1;
if ($weight) {
$alias = $this->query
->ensure_table($info['table']);
if (empty($alias) && !empty($this->query->relationships)) {
foreach ($this->query->relationships as $relationship => $relationship_info) {
$alias = $this->query
->ensure_table($info['table'], $relationship);
if (!empty($alias)) {
break;
}
}
}
if (!empty($alias)) {
$query[] = "({$weight} * (MATCH ({$alias}.{$info['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) . ")";
}