function _fnFilterComplete(settings, input) {
		var columnsSearch = settings.aoPreSearchCols;

		// Resolve any column types that are unknown due to addition or invalidation
		// @todo As per sort - can this be moved into an event handler?
		_fnColumnTypes(settings);

		// In server-side processing all filtering is done by the server, so no point hanging around here
		if (_fnDataSource(settings) != 'ssp') {
			// Check if any of the rows were invalidated
			_fnFilterData(settings);

			// Start from the full data set
			settings.aiDisplay = settings.aiDisplayMaster.slice();

			// Global filter first
			_fnFilter(settings.aiDisplay, settings, input.search, input);

			$.each(settings.searchFixed, function (name, term) {
				_fnFilter(settings.aiDisplay, settings, term, {});
			});

			// Then individual column filters
			for (var i = 0; i < columnsSearch.length; i++) {
				var col = columnsSearch[i];

				_fnFilter(
					settings.aiDisplay,
					settings,
					col.search,
					col,
					i
				);

				$.each(settings.aoColumns[i].searchFixed, function (name, term) {
					_fnFilter(settings.aiDisplay, settings, term, {}, i);
				});
			}

			// And finally global filtering
			_fnFilterCustom(settings);
		}

		// Tell the draw function we have been filtering
		settings.bFiltered = true;

		_fnCallbackFire(settings, null, 'search', [settings]);
	}
Filter the table using both the global filter and column based filtering
 @param {object} settings dataTables settings object
 @param {object} input search information
 @memberof DataTable#oApi