Support » Fixing WordPress » WordPress Search running very slowly

  • My site is http://www.quobot.com. When you manually search for a subject or author, it loads very slowly and I believe this is effecting my search enging rankings. Could anyone give me a suggestion as to why the search is going so slowly? I have been pulling teeth trying to figure this one out for a few months now, but I really think it’s a quick fix. Any suggestions please?

    Thank you

Viewing 2 replies - 1 through 2 (of 2 total)
  • You should post the code for the search. Could be the search code itself (Custom). This is what I like to do as I can get better results but it can be slow for larger sites. If it is the default code then you might want to look into a Cache system to keep queries to a minimum and less hard on the hosting environment. Or just upgrade your hosting!

    Thread Starter kristabrashear

    (@kristabrashear)

    The sql query for search is in /wp-includes/query.php

    // If a search pattern is specified, load the posts that match
                                    if ( !empty($q['s']) ) {
    
                                                    // added slashes screw with quote grouping when done early, so done later
                                                    $q['s'] = stripslashes($q['s']);
                                                    if ( !empty($q['sentence']) ) {
                                                                  $q['search_terms'] = array($q['s']);
    
                                                    } else {
    
                                                                    preg_match_all('/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $q['s'], $matches);
    
                                                                    $q['search_terms'] = array_map('_search_terms_tidy', $matches[0]);
    
                                                    }
    
                                                    $n = !empty($q['exact']) ? '' : '%';
    
                                                    $searchand = '';
    
                                                    foreach( (array) $q['search_terms'] as $term ) {
    
                                                                    $term = esc_sql( like_escape( $term ) );
    
                                                                    $search .= "{$searchand}(($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}'))";
    
                                                                    $searchand = ' AND ';
    
                                                    }
    
                                                    if ( !empty($search) ) {
    
                                                                    $search = " AND ({$search}) ";
    
                                                                    if ( !is_user_logged_in() )
    
                                                                                    $search .= " AND ($wpdb->posts.post_password = '') ";
    
                                                    }
    
                                    }

    And in wp-content/themes/quote/inc/improved-search.php it’s the code that will search in topics and authors

    <?php
    
    // search all taxonomies, based on: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23
    
    function taxonomies_search_groupby($groupby){
    
      global $wpdb;
    
      // we need to group on post ID
    
      $groupby_id = "{$wpdb->posts}.ID";
    
      if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby;
    
      // groupby was empty, use ours
    
      if(!strlen(trim($groupby))) return $groupby_id;
    
      // wasn't empty, append ours
    
      return $groupby.", ".$groupby_id;
    
    }
    
    function taxonomies_search_join($join){
    
      global $wpdb;
    
      if (is_search())
    
        $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id";
    
      return $join;
    
    }
    
    function taxonomies_search_where($where){
    
      global $wpdb;
    
      if (is_search())
    
                    $where .= "OR (t.name LIKE '%".str_replace(array(' quotes',' quote'),'',get_search_query())."%' AND {$wpdb->posts}.post_status = 'publish')";
    
      return $where;
    
    }
    
    add_filter('posts_where','taxonomies_search_where');
    
    add_filter('posts_join', 'taxonomies_search_join');
    
    add_filter('posts_groupby', 'taxonomies_search_groupby');
    
    ?>

    [Moderator Note: Please post code or markup snippets between backticks or use the code button. Or better still – use the pastebin. As it stands, your code may now have been permanently damaged/corrupted by the forum’s parser.]

Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘WordPress Search running very slowly’ is closed to new replies.