. */ if (!defined('LACONICA')) { exit(1); } class SearchEngine { protected $profile; function __construct($profile) { $this->profile = $profile; } function query($q) { } function limit($offset, $count) { return $this->profile->limit($offset, $count); } } class SphinxSearch extends SearchEngine { private $sphinx; function __construct($profile) { parent::__construct($profile); $this->sphinx = new SphinxClient; $this->sphinx->setServer(common_config('sphinx', 'server'), common_config('sphinx', 'port')); } function limit($offset, $count) { $this->sphinx->setLimits($offset, $count); $this->profile->limit($offset, $count); } function query($q) { $result = $this->sphinx->query($q); if (!isset($result['matches'])) return false; $id_set = join(', ', array_keys($result['matches'])); return $this->profile->whereAdd("id in ($id_set)"); } } class MySQLSearch extends SearchEngine { function query($q) { return $this->profile->whereAdd('MATCH(nickname, fullname, location, bio, homepage) ' . 'against (\''.addslashes($q).'\')'); } } class PGSearch extends SearchEngine { function query($q) { $this->profile->whereAdd('textsearch @@ plainto_tsquery(\''.addslashes($q).'\')'); } }