這篇文章介紹的內容是關於Yii2.0 PHP使用Sphinx ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
[php] view plain copy
1.首先在Yii2.0中要引入sphinxapi類檔案,引入的步驟:
(1)在根目錄中建立檔案夾 libs,將類檔案sphinxapi.php 放入 libs 檔案夾中。
(2.)然後在根目錄的 config 檔案夾中的 web.php 配置,添加上Yii::$classMap['SphinxClient'] = '@app/libs/sphinxapi.php';
(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
<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
<p id="table"></p>