Server : nginx/1.22.1
System : Linux iZwz9daxib3w3i063fw434Z 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64
User : www ( 1000)
PHP Version : 5.6.40
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Directory :  /www/wwwroot/www.jkmold.com/phpcms/modules/search/classes/
Upload File :
Current Directory [ Writeable ] Root Directory [ Writeable ]


Current File : /www/wwwroot/www.jkmold.com/phpcms/modules/search/classes/search_interface.class.php
<?php

/**

 * 搜索接口

 *

 */

class search_interface {

	

	public function __construct() {

		//初始化sphinx

		pc_base::load_app_class('sphinxapi', '', 0);

		$this->cl = new SphinxClient();

		$siteid = get_siteid();

		$search_setting = getcache('search');

		$setting = $search_setting[$siteid];

		

		$mode = SPH_MATCH_EXTENDED2;			//匹配模式

		$host = $setting['sphinxhost'];			//服务ip

		$port = intval($setting['sphinxport']);	//服务端口

		$ranker = SPH_RANK_PROXIMITY_BM25;		//统计相关度计算模式,仅使用BM25评分计算



		$this->cl->SetServer($host, $port);

		$this->cl->SetConnectTimeout(1);

		$this->cl->SetArrayResult(true);

		$this->cl->SetMatchMode($mode);

		$this->cl->SetRankingMode($ranker);

	}

	

	/**

	 * 搜索

	 * @param string $q			关键词	    	类似sql like'%$q%'

	 * @param array $siteids	站点id数组

	 * @param array $typeids	类型ids  		类似sql IN('')

	 * @param array $adddate	时间范围数组 		类似sql between start AND end		 格式:array('start','end');

	 * @param int $offset 		偏移量

	 * @param int $limit  		匹配项数目限制	类似sql limit $offset, $limit

	 * @param string $orderby	排序字段		类似sql order by $orderby {id:文章id,weight:权重}

	 */

	public function search($q, $siteids=array(1), $typeids='', $adddate='', $offset=0, $limit=20, $orderby='@id desc') {



		if(CHARSET != 'utf-8') {

			$q = iconv(CHARSET, 'utf-8', $q);

		}

		

		if($orderby) {

			//按一种类似SQL的方式将列组合起来,升序或降序排列。

			$this->cl->SetSortMode(SPH_SORT_EXTENDED, $orderby);

		}

		if($limit) {

			$this->cl->SetLimits($offset, $limit, ($limit>1000) ? $limit : 1000);

		}

		

		//过滤类型

		if($typeids) {

			$this->cl->SetFilter('typeid', $typeids);

		}

		

		//过滤站点

		if($siteids) {

			$this->cl->SetFilter('siteid', $siteids);

		}

		

		//过滤时间

		if($adddate) {

			$this->cl->SetFilterRange('adddate', $adddate[0], $adddate[1], false);

		}

		

		$res = $this->cl->Query($q, 'main, delta');



		return $res;

	}





	

	

}