首頁  >  文章  >  後端開發  >  Yii2.0 PHP使用Sphinx

Yii2.0 PHP使用Sphinx

不言
不言原創
2018-04-18 13:36:441924瀏覽

 這篇文章介紹的內容是關於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;  





##(4.)我在這裡使用了兩張表格、部落格表格 ex_blog、部落格分類表 ex_blog_type  





################[php]### view plain copy##########################################################################################################################################################################
/* 
 * 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 = &#39;&#39;;  
                        table += &#39;<table border="1" align="center" width="800" style="text-align: center">&#39;  
                            table += &#39;<tr id="tr">&#39;;  
                            table += &#39;<td>编号</td>&#39;;  
                            table += &#39;<td>标题</td>&#39;;  
                            table += &#39;<td>作者</td>&#39;;  
                            table += &#39;<td>类型</td>&#39;;  
                            table += &#39;<td>封面</td>&#39;;  
                            table += &#39;<td>添加时间</td>&#39;;  
                            table += &#39;<td>操作</td>&#39;;  
                            table += &#39;</tr>&#39;;  
                             for(var i in obj){  
                                 table += "<tr class=&#39;content&#39;>"  
                                 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 += &#39;<td><img src=&#39;+obj[i].pic+&#39; alt="封面" width="50" height="50"></td>&#39;;  
                                 table += "<td>"+obj[i].time+"</td>";  
                                 table += "<td> <a href=&#39;&#39;>删除</a> | <a href=&#39;&#39;>编辑</a> </td>";  
                                 table += "</tr>"  
                             }  
                        table += &#39;</table>&#39;;  
                        //将表格赋值到页面  
                        $("#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的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn