1、下載地址 http://sphinxsearch.com/downloads/release/
2、將其解壓到D:\sphinx,並在D:\sphinx下新建目錄data(用來存放索引文件)與log(用來存放日志文件);
3、將D:\sphinx\sphinx.conf.in復制到D:\sphinx\bin\sphinx.conf.in,並重命名為sphinx.conf;
4、修改sphinx.conf的內容
首先把sphinx.conf各個保存路徑改為咱們 斯芬克司 放置的路徑
4.1、搜索source src1修改{...}中的內容//這是索引源
# 使用的數據庫類型
type = mysql
# 服務器
sql_host = localhost
# 數據庫登錄名
sql_user = root
# 數據庫登錄密碼
sql_pass = root
# 操作的數據庫名稱
sql_db = test
# 數據庫服務器端口
sql_port = 3306
# 設置mysql檢索編碼,特別要注意這點,很多人中文檢索不到數據庫的編碼是GBK或其他非UTF8
sql_query_pre = SET NAMES utf-8
(以上7條前如有#將其刪除)
#獲取數據的sql
//看到這個地方
sql_query= \
SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
FROM documents
#用於命令界面端的測試(cli)
sql_query_info = SELECT * FROM documents WHERE id=$id
4.2、搜索index test1修改{...}中的內容//索引
#聲明索引源
source = src1
# 放索引的目錄及索引的文件名
path = D:/sphinx/data/test1
##### 文檔信息存儲方式
docinfo = extern
# 編碼
charset_type = utf-8
# 指定utf-8編碼表,字符表,注意:如使用這種方式,則sphinx會對中文進行單字切分
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
# 簡單分詞,只有0和1,需要搜索中文必須置1
ngram_len = 1
# 需要分詞的字符,搜索中文時必須
= U+3000..U+2FA1F
(以上7條前如有#將其刪除)
5、導入測試數據將D:\sphinx\example.sql中語句執行到test數據庫中,注意:test數據庫創建時需要指定為utf-8格式;
6、打開cmd窗口,進入目錄D:\sphinx\bin;
7、建立索引,執行indexer.exe test1,test1即為sphinx.conf中index test1,成功。失敗去配置文件中找原因
8、搜索'test',執行search.exe test 最后一句error可以忽略
9、搜索中文需要在數據庫中含有中文,先修改數據庫。然后重新執行第七步。然后在進行搜索“中文”。沒有搜索到,因為windows命令行中的中文是GBK編碼格式,所以沒有匹配內容。我們可以使用PHP程序來試試。
10、進入D:\sphinx\api\目錄,可以發現sphinx支持php、java、ruby調用,並提供對應的test例子,這里我們使用php來操作,首先將api復制到我們的網站根目錄下,重新命名為sphinxapi目錄,新建search.php,內容為:
<?php
require 'sphinxapi.php';
$s = new SphinxClient();
$s->SetServer('localhost', 9312);
$result = $s->Query('中國');
print_r($result);
echo '<br /><br />';
$result = $s->Query('中文');
print_r($result);
?>
然后回到cmd命令行中,開啟sphinx服務,執行searchd.exe(這個必須要執行的),成功后在瀏覽器中訪問search.php,進行打印出來的數據對比
11、至此sphinx在windows下的簡單安裝與使用就完成了。
下面是在yii框架中的使用
控制器:
//下拉選項字段 搜索值
public function actionSearch_val()
{
$set = Yii::$app->request->get('set','');//接收搜索類型
$key = Yii::$app->request->get('key','');//接收值
if(yii::$app->request->isAjax){
$key1 = '';
require ( "sphinxapi.php" );//引入類
//echo $key.$set;die;
$cl = new \SphinxClient();
$cl->SetServer ( '127.0.0.1', 9312);
$cl->SetArrayResult ( true );
if(empty($key)){
$cl->SetMatchMode ( SPH_MATCH_FULLSCAN );
}else{
$cl->SetMatchMode ( SPH_MATCH_EXTENDED2 );
if($set == 1){
$key1 = $key;
}else{
$key1 = '@'.$set.' ('.$key.')';
}
}
$res = $cl->Query ( $key1, "test2" );
if($res['total_found'] > 0){
$ids = [];
foreach ( $res['matches'] as $k => $row ) {
$ids[] = $row['id'];
}
$query = new Query();
$list = $query->from('position')->where(['in', 'id', $ids])->all();
foreach($list as $k=>$v){
$list[$k]=str_replace($key,"<font color='red'>{$key}</font>",$v);
}
} else {
$list = [];
}
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return ['list' => $list ];
}
return $this->render('search2');
}
視圖:
<?php
use yii\helpers\Html;
use yii\helpers\Url;
?>
<form action="" method="get">
<input type="hidden" name="_csrf" value="">
<div class="col-md-1">
<select id="set">
<option value="1">全部</option>
<option value="position">職位</option>
<option value="biaoqian">標簽</option>
<option value="xueli">學歷</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(['hello/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].id+'</td>';
html += '<td>'+lists[i].position+'</td>';
html += '<td>'+lists[i].biaoqian+'</td>';
html += '<td>'+lists[i].xueli+'</td>';
html += '</tr>';
}
html += '</table>';
$('#content').html(html);
});
});
});
<?php $this->endBlock('index') ?>
<?php $this->registerJs($this->blocks['index'], \yii\web\View::POS_END);?>