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数字与字符串比较时的注意事项
