编程爱好者之家

php通过sphinxapi接口实现全文搜索

2018-12-12 10:48:21 572

下面讲解下 php通过sphinxapi接口实现全文搜索

1.首先先在服务器上安装好sphinx并且建立好索引文件,具体安装步骤参考以下链接

windows下: https://www.codelovers.cn/article/20181210180620.html

linux下:https://www.codelovers.cn/article/20181211163543.html

2.下载 sphinxapi.php(点击下载)并且放入到自己的项目中

3.调用接口,代码如下

    public function getSphinxData(){

        $searchWord = "元旦";
		
        $sp=new SphinxClient();
        $sp->SetServer('127.0.0.1',9312);
        $sp->SetArrayResult(true);
        $sp->SetMatchMode(SPH_MATCH_ALL);
        $sp->SetSortMode(SPH_SORT_ATTR_DESC,'updatetime');  //排序字段
        $sp->SetLimits(0,200);  //条数限制为200条

        $res=$sp->Query($searchWord,'newindex');  //通过索引查找索索结果,newindex为配置中的索引名称        

     
		if(isset($res['matches'])&&count($res['matches'])>0)
		{

			$sql='select * from yourtable where id in(';
			

			foreach ($res['matches'] as $v)
			{
				$sql.=$v['id'].',';
			}
			$sql=trim($sql,',').')';

			
			$searchModel = M('search');  //实例化model,这里是我自己程序中的实例化,用的时候改成自己的操作
			$result = $searchModel->fetchAll($sql); //查库操作,fetchAll()是我自己定义的方法,改成自己数据库操作即可
			
			$total = $res['total']; //查询到的总量

			$finalResult = array('result'=>$result,'total'=>$total);

			
			print_r($finalResult);


		}
		else
		{
			return 0;
		}
        





    }


结果展示:

通过sphinx查询出结果结构如下

Array
(
    [error] => 
    [warning] => 
    [status] => 0
    [fields] => Array
        (
            [0] => title
            [1] => img_cover
            [2] => url_link
            [3] => ispublish
        )

    [attrs] => Array
        (
            [sid] => 1
            [updatetime] => 2
        )
    
    //匹配结果
    [matches] => Array
        (
            [0] => Array
                (
                    [id] => 79476
                    [weight] => 2613
                    [attrs] => Array
                        (
                            [sid] => 718737
                            [updatetime] => 1543464537
                        )

                )

            [1] => Array
                (
                    [id] => 79475
                    [weight] => 2613
                    [attrs] => Array
                        (
                            [sid] => 718736
                            [updatetime] => 1543464085
                        )

                )

        )

    [total] => 117  //查询结果总量
    [total_found] => 117
    [time] => 0.000
    [words] => Array
        (
            [元] => Array
                (
                    [docs] => 625
                    [hits] => 638
                )

            [旦] => Array
                (
                    [docs] => 122
                    [hits] => 124
                )

        )

最终返回结果如下

image.png


同类文章