1000 ? sprintf("%.1f",($geodist/1000)).'km' : $geodist.'m'; } } /** * @param string $idx * @param string $keyword * @param int $page * @param array $filter {"k":[]} or {"k":{"v":[], "exc":"bool 1不包含,0包含"}} * @param array $order * @param array $geo * @param int $page_size * @param array $range * @return mixed */ if(! function_exists('search_by_sphinx')) { function search_by_sphinx($idx, $keyword = '', $page = 1, $filter = array(), $order = array(), $geo = array(), $page_size = 10, $range = array() ,$groupby=array()) { $CI = & get_instance(); $CI->config->load('sphinx', true, true); $config = $CI->config->item('sphinx'); require_once COMMPATH.'third_party/Sphinxclient.php'; $sphinxclient = new Sphinxclient(); $sphinxclient->SetServer($config['host'], $config['port']); if($filter) { foreach($filter as $k => $v) { if($v['v']){ $sphinxclient->SetFilter($k, $v['v'], boolval($v['exc'])); } else { $sphinxclient->SetFilter($k, $v); } } } if($range) { foreach($range as $k => $v) { $sphinxclient->SetFilterRange($k, $v[0], $v[1]); } } if($geo) { $sphinxclient->SetGeoAnchor('lat', 'lng', (float) deg2rad($geo['lat']), (float) deg2rad($geo['lng'])); //角度转换成弧度 } if($groupby){ $sphinxclient->SetGroupBy ( $groupby[0], SPH_GROUPBY_ATTR,$groupby[1]); } if($order) { $sphinxclient->SetSortMode($order[0], $order[1]); } $sphinxclient->setLimits(intval(($page - 1) * $page_size), intval($page_size), $config['SPHINX_MAX_MATCHES']); if($result = $sphinxclient->query($keyword, $idx)) { return $result; } debug_log($sphinxclient->GetLastError(), 'sphinx.log'); return false; } }