Index: core/db/__init__.py
===================================================================
--- core/db/__init__.py	(revision 1851)
+++ core/db/__init__.py	(working copy)
@@ -37,6 +37,7 @@
 get_table_list = dbmod.get_table_list
 get_table_description = dbmod.get_table_description
 get_relations = dbmod.get_relations
+get_fulltext_op_sql = dbmod.get_fulltext_op_sql
 OPERATOR_MAPPING = dbmod.OPERATOR_MAPPING
 DATA_TYPES = dbmod.DATA_TYPES
 DATA_TYPES_REVERSE = dbmod.DATA_TYPES_REVERSE
Index: core/db/backends/ado_mssql.py
===================================================================
--- core/db/backends/ado_mssql.py	(revision 1851)
+++ core/db/backends/ado_mssql.py	(working copy)
@@ -118,6 +118,9 @@
 def get_relations(cursor, table_name):
     raise NotImplementedError
 
+def get_fulltext_op_sql():
+    raise NotImplementedError
+
 OPERATOR_MAPPING = {
     'exact': '= %s',
     'iexact': 'LIKE %s',
Index: core/db/backends/mysql.py
===================================================================
--- core/db/backends/mysql.py	(revision 1851)
+++ core/db/backends/mysql.py	(working copy)
@@ -132,6 +132,9 @@
 def get_relations(cursor, table_name):
     raise NotImplementedError
 
+def get_fulltext_op_sql(**kwargs):
+    return "match (%s%s) against ('%s' in boolean mode)"
+
 OPERATOR_MAPPING = {
     'exact': '= %s',
     'iexact': 'LIKE %s',
Index: core/db/backends/postgresql.py
===================================================================
--- core/db/backends/postgresql.py	(revision 1851)
+++ core/db/backends/postgresql.py	(working copy)
@@ -126,6 +126,9 @@
             continue
     return relations
 
+def get_fulltext_op_sql():
+    raise NotImplementedError
+
 # Register these custom typecasts, because Django expects dates/times to be
 # in Python's native (standard-library) datetime/time format, whereas psycopg
 # use mx.DateTime by default.
Index: core/db/backends/sqlite3.py
===================================================================
--- core/db/backends/sqlite3.py	(revision 1851)
+++ core/db/backends/sqlite3.py	(working copy)
@@ -134,6 +134,9 @@
 def get_relations(cursor, table_name):
     raise NotImplementedError
 
+def get_fulltext_op_sql():
+	raise NotImplementedError
+
 # Operators and fields ########################################################
 
 # SQLite requires LIKE statements to include an ESCAPE clause if the value
Index: core/meta/__init__.py
===================================================================
--- core/meta/__init__.py	(revision 1851)
+++ core/meta/__init__.py	(working copy)
@@ -1349,6 +1349,8 @@
         return "%s = %%s" % db.get_date_extract_sql(lookup_type, table_prefix + field_name)
     elif lookup_type == 'isnull':
         return "%s%s IS %sNULL" % (table_prefix, field_name, (not value and 'NOT ' or ''))
+    elif lookup_type == 'match':
+        return db.get_fulltext_op_sql() % (table_prefix, field_name, value)
     raise TypeError, "Got invalid lookup_type: %s" % repr(lookup_type)
 
 def function_get_object(opts, klass, does_not_exist_exception, **kwargs):
Index: core/meta/fields.py
===================================================================
--- core/meta/fields.py	(revision 1851)
+++ core/meta/fields.py	(working copy)
@@ -189,7 +189,7 @@
             return ["%s%%" % prep_for_like_query(value)]
         elif lookup_type in ('endswith', 'iendswith'):
             return ["%%%s" % prep_for_like_query(value)]
-        elif lookup_type == 'isnull':
+        elif lookup_type in ('isnull', 'match'):
             return []
         raise TypeError, "Field has invalid lookup: %s" % lookup_type
 
