Yii2 sphinx搜索 多条件选择搜索

案例要求

 

安装spinx

首先,你需要安装spinx,具体安装可以百度一份如何安装,网上有很多。

配置spinx

那么,安装完成后,打开sphinx(即你所建的sphinx安装目录),

找到这个文件,sphinx/etc/csft_mysql.conf文件,

在编译器中,打开这个文件,修改sphinx的源文件,配置

建立索引

改完配置后,停止sphinx服务,打开cmd,进入到你安装的sphinx安装目录中

开始建立索引:

索引建立成功,开启sphinx服务

在使用sphinx之前,你需要把sphinx/api/sphinxapi.php文件,复制一份,放到yii2的web中,

与你的入口文件保持同级,方便调用。

创建控制器

<?php

namespace frontend\controllers;

use Yii;
use app\models\Position;
//use yii\data\Pagination;//分页类

use yii\db\Query;//搜索类

class IndexController extends \yii\web\Controller
{

    //下拉选项字段 搜索值
    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 = \yii\web\Response::FORMAT_JSON;
                return ['list' => $list ];
            }
        return $this->render('search2');
    }

 

创建视图

然后,在Views对应控制器的文件夹下,创建一个文件,search2.php

<?php

use yii\bootstrap\ActiveForm;
use yii\helpers\Html;
use yii\helpers\Url;

?>
<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'], \yii\web\View::POS_END);?>

这样就完成了,试一下效果:

完成!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值