Yii2.0 PHP使用Sphinx

來源:互聯網
上載者:User
這篇文章介紹的內容是關於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>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.