My default search is not working

It is better to modify WordPress search SQL query instead of adding extra meta query.

try this:

function search_distinct($distinct) {
    $distinct="DISTINCT";
    return $distinct;
}

function join_table($join){
    global $wpdb;
    $join .= "LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) ";
    return $join;
}

function search_into_post_meta( $search, $wp_query )
{
    if ( is_search() ) {
        global $wpdb;
        if ( empty( $search ) )
            return $search;
        $q = $wp_query->query_vars;
        $n = ! empty( $q['exact'] ) ? '' : '%';
        $search =
        $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}') OR ($wpdb->postmeta.meta_key = 'post_state' AND $wpdb->postmeta.meta_value LIKE '{$n}{$term}{$n}') OR ($wpdb->postmeta.meta_key = 'post_region' AND $wpdb->postmeta.meta_value LIKE '{$n}{$term}{$n}') OR ($wpdb->postmeta.meta_key = 'post_country' AND $wpdb->postmeta.meta_value LIKE '{$n}{$term}{$n}'))";
            $searchand = ' AND ';
        }
        if ( ! empty( $search ) ) {
            $search = " AND ({$search}) ";
            if ( ! is_user_logged_in() )
                $search .= " AND ($wpdb->posts.post_password = '') ";
        }
        add_filter('posts_distinct_request', 'search_distinct');
        add_filter('posts_join_request','join_table');
        return $search;
    }
return $search;
}

add_filter( 'posts_search', 'search_into_post_meta', 500, 2 );