You are here

public function similar_handler_argument_nid::similar_build_query in Similar Entries 6.2

Same name and namespace in other branches
  1. 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) . ")";
}