> 백엔드 개발 > PHP 튜토리얼 > Yii2.0 PHP는 스핑크스를 사용합니다.

Yii2.0 PHP는 스핑크스를 사용합니다.

不言
풀어 주다: 2023-03-24 10:08:01
원래의
1942명이 탐색했습니다.

이 기사에서는 특정 참조 가치가 있는 Yii2.0 PHP의 Sphinx 사용을 소개합니다. 이제 모든 사람과 공유합니다. 도움이 필요한 친구들이 참조할 수 있습니다.


[php]

일반 사본 보기


1. 먼저 Yii2.0에 sphinxapi 클래스 파일을 도입합니다.
  1. (1) 루트 디렉터리에 새 폴더 libs를 만듭니다. libs 폴더에 클래스 파일 sphinxapi .php를 추가합니다.

  2. (2.) 그런 다음 루트 디렉터리의 config 폴더에 있는 web.php 구성에서 Yii::

    $classMap
  3. [

    'SphinxClient'] = '@app을 추가합니다. /libs/sphinxapi.php'; (3.) 테이블, 블로그 테이블 ex_blog, 블로그 카테고리 테이블

  4. 에서 SphinxClient를 사용하세요.

  5. [php] 일반 사본 보기


/* 
 * 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 페이지 처리



  1. [php]
  2. 일반 사본 보기

  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는 스핑크스를 사용합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿