diff -r 9f23205f00f4 django/contrib/admin/views/main.py
--- a/django/contrib/admin/views/main.py	Wed Feb 09 03:05:58 2011 +0000
+++ b/django/contrib/admin/views/main.py	Sat May 21 15:25:14 2011 +0700
@@ -239,9 +239,9 @@
                 return "%s__icontains" % field_name
 
         if self.search_fields and self.query:
-            for bit in self.query.split():
-                or_queries = [models.Q(**{construct_search(str(field_name)): bit}) for field_name in self.search_fields]
-                qs = qs.filter(reduce(operator.or_, or_queries))
+            qs = qs.filter(*[reduce(operator.or_, [models.Q(**{construct_search(str(field_name)): bit})
+                                                   for field_name in self.search_fields])
+                             for bit in self.query.split()])
             for field_name in self.search_fields:
                 if '__' in field_name:
                     qs = qs.distinct()
