Index: wp-includes/class-wp-meta-query.php
===================================================================
--- wp-includes/class-wp-meta-query.php	(revision 40270)
+++ wp-includes/class-wp-meta-query.php	(working copy)
@@ -277,7 +277,16 @@
 		} elseif ( ! empty( $existing_meta_query ) ) {
 			$meta_query = $existing_meta_query;
 		}
-
+		
+		// Add meta query for meta keys to be used for search
+		if ( isset( $qv['search_meta'] ) && is_array( $qv['search_meta'] ) ) {
+			$search_meta_query = array( 'relation' => 'OR' );
+			foreach ( $qv['search_meta'] as $key ) {
+				$search_meta_query[] = array( 'key' => $key );
+			}
+			$meta_query[] = $search_meta_query;
+		}
+		
 		$this->__construct( $meta_query );
 	}
 
Index: wp-includes/class-wp-query.php
===================================================================
--- wp-includes/class-wp-query.php	(revision 40270)
+++ wp-includes/class-wp-query.php	(working copy)
@@ -1318,7 +1318,19 @@
 				$q['search_terms'] = array( $q['s'] );
 			}
 		}
-
+		
+		// List meta table alias for searching meta_keys into
+		$search_meta_key_aliases = array();
+		if ( isset( $q['search_meta'] ) && is_array( $q['search_meta'] ) ) {
+			$this->meta_query->get_sql( 'post', $wpdb->posts, 'ID', $this );
+			$clauses = $this->meta_query->get_clauses();
+			foreach ( $clauses as $clause ) {
+				if ( in_array( $clause['key'], $q['search_meta'] ) ) {
+					$search_meta_key_aliases[$clause['alias']] = $clause['key'];
+				}
+			}
+		}
+		
 		$n = ! empty( $q['exact'] ) ? '' : '%';
 		$searchand = '';
 		$q['search_orderby_title'] = array();
@@ -1351,7 +1363,17 @@
 			}
 
 			$like = $n . $wpdb->esc_like( $term ) . $n;
-			$search .= $wpdb->prepare( "{$searchand}(({$wpdb->posts}.post_title $like_op %s) $andor_op ({$wpdb->posts}.post_excerpt $like_op %s) $andor_op ({$wpdb->posts}.post_content $like_op %s))", $like, $like, $like );
+			
+			$termsearch = $wpdb->prepare( "($wpdb->posts.post_title $like_op %s) $andor_op ($wpdb->posts.post_excerpt $like_op %s) $andor_op ($wpdb->posts.post_content $like_op %s)", $like, $like, $like );
+			
+			if ( $search_meta_key_aliases ) {
+				foreach ( $search_meta_key_aliases as $alias => $meta_key) {
+					$termsearch .= $wpdb->prepare( " $andor_op ($alias.meta_value $like_op %s)", $like );
+				}
+			}
+			
+			$search .= "{$searchand}($termsearch)";
+			
 			$searchand = ' AND ';
 		}
 
