sphinx 根据字段在字段内搜索

控制器

<?php
namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\Sphinx_much_search;
use SphinxClient;
class SearchController extends Controller
{
	public $enableCsrfValidation = false;
	public function actionLogin()
	{
		$db=new Sphinx_much_search;
		$a=$db->find()->asArray()->all();
		return $this->renderPartial('login');
	}
	public function actionSearch()
	{
		$field=\yii::$app->request->post('field');
		$zhi=\yii::$app->request->post('zhi');
		$sphinx= new SphinxClient();
		$sphinx->SetServer('127.0.0.1',9312);
		//将查询看作一个Sphinx内部查询语言的表达式
		$sphinx->SetMatchMode ( SPH_MATCH_EXTENDED2 );
		//@符号屏蔽错误  第一个参数中 $filed是字段名 $zhi是你要在这个字段中搜索的值  第二个参数是规则
		$res=$sphinx->Query("@".$field.' '.$zhi,"mysql");
		// array_keys是获取数组中的键(获取到的是一个数组)  然后将数组转换成字符串
		$id=implode(',',array_keys($res['matches']));
		$val=Sphinx_much_search::find()->where("id in ($id)")->asArray()->All();
		//print_r($val);die;
		foreach ($val as $k =>$v) 
		{
			$val[$k]['title']=str_replace($zhi,"<font color='red'>$zhi</font>",$v['title']);
			$val[$k]['content']=str_replace($zhi,"<font color='red'>$zhi</font>",$v['content']);
			$val[$k]['country']=str_replace($zhi,"<font color='red'>$zhi</font>",$v['country']);
		}
		echo json_encode($val);
	}
}
?>

view

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="js/jq.js"></script>
</head>
<body>
	<table align="center">
		<tr>
			<td>搜索字段</td>
			<td>
				<select id="field">
					<option value="*">全部字段</option>
					<option value="title">标题</option>
					<option value="content">内容</option>
					<option value="country">国家</option>
				</select>
			</td>
			<td><input type="text" id="zhi"></td>
			<td><input type="submit" class="fun" value="搜索"></td>
		</tr>
		<tr id="lists">
			<td>标题</td>
			<td>内容</td>
			<td>国家</td>
		</tr>
		<tr class="contents"></tr>
	</table>
</body>
</html>
<script>
	$(".fun").click(function(){
		var field=$("#field").val();
		var zhi=$("#zhi").val();
		$.post('?r=search/search',{'field':field,'zhi':zhi},function(msg){
			//alert(msg);
			var data=eval("("+msg+")");
			var tr='';
			for(i in data)
			{
				tr+='<tr class="contents">';
				tr+="<td>"+data[i].title+"</td>"
				tr+="<td>"+data[i].content+"</td>"
				tr+="<td>"+data[i].country+"</td>"
				tr+='</tr>';
			}
			$(".contents").remove();
			 $("#lists").after(tr);
		})
	})
</script>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值