code: function _fnFilterComplete ( oSettings, oInput, iForce )
  	{
  		var oPrevSearch = oSettings.oPreviousSearch;
  		var aoPrevSearch = oSettings.aoPreSearchCols;
  		var fnSaveFilter = function ( oFilter ) {
  			/* Save the filtering values */
  			oPrevSearch.sSearch = oFilter.sSearch;
  			oPrevSearch.bRegex = oFilter.bRegex;
  			oPrevSearch.bSmart = oFilter.bSmart;
  			oPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;
  		};
  	
  		// 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( oSettings );
  	
  		/* In server-side processing all filtering is done by the server, so no point hanging around here */
  		if ( _fnDataSource( oSettings ) != 'ssp' )
  		{
  			/* Global filter */
  			_fnFilter( oSettings, oInput.sSearch, iForce, oInput.bRegex, oInput.bSmart, oInput.bCaseInsensitive );
  			fnSaveFilter( oInput );
  	
  			/* Now do the individual column filter */
  			for ( var i=0 ; i<aoPrevSearch.length ; i++ )
  			{
  				_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, aoPrevSearch[i].bRegex,
  					aoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );
  			}
  	
  			/* Custom filtering */
  			_fnFilterCustom( oSettings );
  		}
  		else
  		{
  			fnSaveFilter( oInput );
  		}
  	
  		/* Tell the draw function we have been filtering */
  		oSettings.bFiltered = true;
  		_fnCallbackFire( oSettings, null, 'search', [oSettings] );
  	}
docs: Filter the table using both the global filter and column based filtering
  @param {object} oSettings dataTables settings object
  @param {object} oSearch search information
  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)
  @memberof DataTable#oApi