var methods = {
  /**
   * Set up a search index.
   *
   * @param name
   * @param options
   * @returns {void}
   */
  'createSearchIndex' : function (name, options) {},
  /**
   *
   * Perform a really simple search with mongo db.
   *
   * @param {String} name
   * @param {String} searchString
   * @param {Object} options
   * @param {Function} callback
   * @returns {Object}
   */
  'search' : function (name, searchString, options, callback) {
    var cursor,
      results,
      selector,
      cursorOptions,
      index = EasySearch.getIndex(name);

    if (!_.isObject(index)) {
      return;
    }

    options.limit = options.limit || 10;

    // if several, fields do an $or search, otherwise only over the field
    selector = index.query(searchString, options);

    if (!selector) {
      return { total: 0, results: [] };
    }

    cursorOptions = {
      sort : index.sort(searchString, options)
    };

    if (options.returnFields) {
      cursorOptions.fields = options.returnFields;
    }

    if (options.skip) {
      cursorOptions.skip = options.skip;
    }

    cursor = index.collection.find(selector, cursorOptions);

    results = {
      'results' : _.first(cursor.fetch(), options.limit),
      'total' : cursor.count()
    };

    if (_.isFunction(callback)) {
      callback(results);
    }

    return results;
  },
  /**
   * The default mongo-db query - selector used for searching.
   *
   * @param {Object} options
   * @param {String} searchString
   * @returns {Object}
   */
  'defaultQuery' : function (options, searchString) {
    var orSelector,
      selector = {},
      field = options.field,
      stringSelector = { '$regex' : '.*' + searchString + '.*', '$options' : 'i' };

    if (_.isString(field)) {
      selector[field] = stringSelector;
      return selector;
    }

    // Convert numbers if configured
    if (options.convertNumbers && parseInt(searchString, 10) == searchString) {
      searchString = parseInt(searchString, 10);
    }

    // Should be an array
    selector['$or'] = [];

    _.each(field, function (fieldString) {
      orSelector = {};

      if (_.isString(searchString)) {
        orSelector[fieldString] = stringSelector;
      } else if (_.isNumber(searchString)) {
        orSelector[fieldString] = searchString;
      }

      selector['$or'].push(orSelector);
    });

    return selector;
  },
  /**
   * The default mongo-db sorting method used for sorting the results.
   *
   * @param {Object} options
   * @return array
   */
  'defaultSort' : function (options) {
    return options.field;
  }
};

if (Meteor.isClient) {
  EasySearch.createSearcher('minimongo', methods);
} else if (Meteor.isServer) {
  EasySearch.createSearcher('mongo-db', methods);
}


@@ -1435,39 +1435,36 @@
 @param %7BObject%7D 
-options
+conf
 %0A   * @param %7BSt
@@ -1478,24 +1478,66 @@
 earchString%0A
+   * @param %7BFunction%7D regexCallback%0A   *%0A
    * @return
@@ -1582,23 +1582,20 @@
 nction (
-options
+conf
 , search
@@ -1592,32 +1592,47 @@
 nf, searchString
+, regexCallback
 ) %7B%0A    var orSe
@@ -1674,23 +1674,20 @@
 field = 
-options
+conf
 .field,%0A
@@ -1915,23 +1915,20 @@
     if (
-options
+conf
 .convert
@@ -2036,24 +2036,118 @@
 10);%0A    %7D%0A%0A
+    if (regexCallback) %7B%0A      stringSelector%5B'$regex'%5D = regexCallback(searchString);%0A    %7D%0A%0A
     // Shoul
@@ -2618,31 +2618,28 @@
 am %7BObject%7D 
-options
+conf
 %0A   * @retur
@@ -2680,23 +2680,20 @@
 nction (
-options
+conf
 ) %7B%0A    
@@ -2699,23 +2699,20 @@
  return 
-options
+conf
 .field;%0A

Add a optional regexcallback parameter for default queries