code: function(o, callback) {
        if (!o) return callback('search(): parameter o NOT FOUND.');
        if (!o.key) return callback('search(): parameter o.key NOT FOUND.');
        var limit = o.limit || 10;
        limit = (limit > 50) ? 50 : (limit < 1 ? 1 : limit);
        var namespace = o.namespace || [0];
        var p = {};
        p.list = {
          search: {
            srsearch: o.key,
            srnamespace: namespace,
            srlimit: limit
          }
        };
        var url = this.url;
        if (!url || !callback) return mwapi.query(p);
        mwapi.query(p, url, function(err, data) {
          if (err) return callback(err);
          var res = _.pluck(data.query.search, 'title');  //  TODO: sort
          return callback('', res);
        });
      }
docs: /*
  Search with a given keyword
  
  Will call MWAPI.query(), list, search.
  
  Parameter *o*, required, defined as {
  key, required, string, the keyword to search,
  limit, optional, int, length of searching results, 10 by default, no
  more than 50,
  namespace, optional, array of int, under what namespace to search,
  [0] by default.
  TODO:
  sort,
  quality
  }
  
  *callback*(err, data)
  
  Return array of titles of result pages,