yii2中sphinx搜索 多条件选择搜索
案例要求,效果图
首先,你需要安装spinx,具体安装可以百度一份如何安装,网上有很多,就不说了,
那么,安装完成后,打开sphinx(即你所建的sphinx安装目录),
找到这个文件,sphinx/etc/csft_mysql.conf文件,
在编译器中,打开这个文件,修改sphinx的源文件,配置
改完配置后,停止sphinx服务,打开cmd,进入到你安装的sphinx安装目录中
建立索引,
索引建立成功,开启sphinx服务
在使用sphinx之前,你需要把sphinx/api/sphinxapi.php文件,复制一份,放到yii2的web中,
与你的入口文件保持同级,方便调用
创建控制器,
<?php namespace frontendcontrollers; use Yii; use appmodelsPosition; //use yiidataPagination;//分页类 use yiidbQuery;//搜索类 class IndexController extends yiiwebController { //下拉选项字段 搜索值 public function actionSearch_val() { $set = Yii::$app->request->get("set","");//接收搜索类型 $key = Yii::$app->request->get("key","");//接收值 require ( "sphinxapi.php" );//引入类 if(yii::$app->request->isAjax){ //echo $key.$set;die; $cl = new SphinxClient (); $cl->SetServer ( "127.0.0.1", 9312); $cl->SetConnectTimeout ( 3 ); $cl->SetArrayResult ( true ); if(empty($key)){ $cl->SetMatchMode ( SPH_MATCH_FULLSCAN ); }else{ $cl->SetMatchMode ( SPH_MATCH_EXTENDED2 ); if($set == 1){ $key = $key; }else if($set == 2){ $key = "@post_tempt " .$key; }else if($set == 3){ $key = "@ask_for " .$key; } } $res = $cl->Query ( $key, "mysql" ); if($res["total_found"] > 0){ $ids = []; foreach ( $res["matches"] as $key => $row ) { $ids[] = $row["id"]; } $query = new Query(); $list = $query->select("j_id, post_tempt, ask_for")->from("job")->where(["in", "j_id", $ids])->all(); //print_r($list); } else { $list = []; } Yii::$app->response->format = yiiwebResponse::FORMAT_JSON; return ["list" => $list ]; } return $this->render("search2"); }
然后,在Views对应控制器的文件夹下,创建一个文件,search2.php
<?php use yiiootstrapActiveForm; use yiihelpersHtml; use yiihelpersUrl; ?> <form action="" method="get"> <input type="hidden" name="_csrf" value="dkZkUVdiTl8lDxQCZip9Ky4eLx4mViIWQXALAQMMOR4BEQMOZVZ8aA=="> <div class="col-md-1"> <select id="set"> <option value="1">全部</option> <option value="2">标题</option> <option value="3">内容</option> </select> </div> <div class="col-md-3"> <input type="text" class="form-control" placeholder="keyword" id="key"> </div> <button type="button" class="btn btn-default">Search</button> </form> <p> <div id="content"></div> <?php $this->beginBlock("index") ?> $(function(){ $(".btn-default").click(function(){ var set = $("#set").val(); var key = $("#key").val(); var url = "<?php echo Url::toRoute(["index/search_val"])?>"; $.getJSON(url, {"key":key, "set":set}, function(data){ //alert(data); console.log(data); var lists= data.list; //console.log(data.length) var html = "<table class="table">";//这里用的是拼接 for(var i = 0; i < lists.length; i++ ) { html += "<tr>"; html += "<td>"+lists[i].j_id+"</td>"; html += "<td>"+lists[i].post_tempt+"</td>"; html += "<td>"+lists[i].ask_for+"</td>"; html += "</tr>"; } html += "</table>"; $("#content").html(html); }); }); }); <?php $this->endBlock("index") ?> <?php $this->registerJs($this->blocks["index"], yiiwebView::POS_END);?>这样就完成了,试一下效果:
完成!
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: PHP容易出错点:PHP中的数字与字符串比较
- 下一篇: php数字与字符串比较时的注意事项