欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Yii2.0 PHP使用Sphinx

程序员文章站 2022-04-06 19:04:02
...
这篇文章介绍的内容是关于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的详细内容,更多请关注其它相关文章!

相关标签: Sphinx Yii2.0 php