当前位置:Gxlcms > PHP教程 > Yii2.0PHP使用Sphinx

Yii2.0PHP使用Sphinx

时间:2021-07-01 10:21:17 帮助过:30人阅读

这篇文章介绍的内容是关于Yii2.0 PHP使用Sphinx ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下



[php] view plain copy


  1. 1.首先在Yii2.0中要引入sphinxapi类文件,引入的步骤:

  2. (1)在根目录中新建文件夹 libs,将类文件sphinxapi.php 放入 libs 文件夹中。

  3. (2.)然后在根目录的 config 文件夹中的 web.php 配置,添加上Yii::$classMap['SphinxClient'] = '@app/libs/sphinxapi.php';

  4. (3.)在控制器中 使用 use SphinxClient;

  5. (4.)我在这里使用了两个表、博文表 ex_blog、博文分类表 ex_blog_type




[php] view plain copy


  1. /* 
     * Sphinx搜索 
     */  
    public function actionSearch(){  
        //判断是否是POST提交  
        if(\Yii::$app->request->isPost){  
            $title = \Yii::$app->request->post('title');  
            //$author = \Yii::$app->request->post('author');  
            //$type_name = \Yii::$app->request->post('type_name');  
            $sphinx = new SphinxClient();  
            $sphinx->SetServer('127.0.0.1',9312);  
              
            //SPH_MATCH_ALL匹配所有查询词(默认模式)  
            $sphinx->SetMatchMode ( SPH_MATCH_ALL);  
            //匹配查询词中的任意一个  
            $sphinx->SetMatchMode ( SPH_MATCH_ANY);  
            //将整个查询看作一个词组,要求按顺序完整匹配  
            $sphinx->SetMatchMode ( SPH_MATCH_PHRASE);  
              
            $data = $sphinx->Query("$title","*");  
            //判断键值是否存在  
            if(!array_key_exists("matches",$data)){  
                exit("没有检索到您需要的信息");  
            }  
            // 1.Matches中就是查询的结果了,但是仿佛不是我们想要的数据。  
            // 2.根据官方的说明是Sphinx并没有连接到MySQL去取数据,只是根据它自己的索引内容进行计算;  
            // 3.因此如果想用Sphinx提供的API去取得我们想要的数据,还必须以查询的
    结果为依据(也就是ID为依据); // 4.根据ID再次查询MySQL从而得到我们想要的数据。 //获取主键 (这里的主键就是数据在数据库中的自增ID) 通过ID在根据数据库 查询出数据 $key = array_keys($data['matches']); //把数组元素组合为一个字符串 $key = join(',',$key); //根据获取到的ID在查询数据库 $query = new \yii\db\Query(); //使用框架中的in 哈希格式 来检索 $blogInfo = $query->from(['b'=>'ex_blog','bt'=>'ex_blog_type'])->where(['id'=>[$key]])->all(); //将数组转换为Json类型 echo json_encode($blogInfo); }else{ echo "非正常提交"; } }

html 页面的处理




[php] view plain copy


  1. <script>  
            function search(){  
                //获取搜索的数据  
                var title = $("#title").val();  
                var author = $("#author").val();  
                var type_name = $("#type_name").val();  
                //发送AJAX请求  
                $.ajax({  
                    url:"?r=sphinx/search",  
                    data:{title:title,author:author,type_name:type_name},  
                    type:"POST",  
                    success:function(msg){  
                        //alert(msg);  
                        //将JSON数据转换为对象  
                        obj = eval("("+msg+")");  
                        var table = '';  
                        table += '<table border="1" align="center" width="800" style="text-align: center">'  
                            table += '<tr id="tr">';  
                            table += '<td>编号</td>';  
                            table += '<td>标题</td>';  
                            table += '<td>作者</td>';  
                            table += '<td>类型</td>';  
                            table += '<td>封面</td>';  
                            table += '<td>添加时间</td>';  
                            table += '<td>操作</td>';  
                            table += '</tr>';  
                             for(var i in obj){  
                                 table += "<tr class='content'>"  
                                 table += "<td>"+obj[i].id+"</td>";  
                                 table += "<td>"+obj[i].title+"</td>";  
                                 table += "<td>"+obj[i].author+"</td>";  
                                 table += "<td>"+obj[i].type_name+"</td>";  
                                 table += '<td><img src='+obj[i].pic+' alt="封面" width="50" height="50"></td>';  
                                 table += "<td>"+obj[i].time+"</td>";  
                                 table += "<td> <a href=''>删除</a> | <a href=''>编辑</a> </td>";  
                                 table += "</tr>"  
                             }  
                        table += '</table>';  
                        //将表格赋值到页面  
                        $("#table").html(table);  
                        //将原有的内容移除  
                        //$(".content").remove();  
                        //将返回的数据追加到原来位置  
                        //$("#tr").after(tr);  
                    }  
                });  
            }  
        </script>

显示数据用的p




[php] view plain copy


  1. <p id="table"></p>

相关推荐:

Yii2 的控制台命令

php中如何使用sphinx搜索引擎

Yii框架中sphinx索引配置方法解析

以上就是Yii2.0 PHP使用Sphinx的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行