Sphinx能夠實現複雜的Sql語句,具體操做以下:html
好比要實現的Sql語句爲:select * from new_notes where ((status=100 &tmp_edit_status = 1) or status = 200 or status = 800 ) and title LIKE '%測試%' and tmptype = 1 and create_time > 1000 and create_time < 9999999 order by create_time limit 0,10 json
1.首先設置匹配模式:Sphinx的匹配格式有哪些可參見http://www.javashuo.com/article/p-dykzqxji-mz.html測試
$sphinx->SetMatchMode(SPH_MATCH_EXTENDED2);
2.配置取值區間:spa
$sphinx->SetFilterRange('create_time',1000,'9999999');#能夠設置多個
3.配置排序字段:code
$sphinx->SetSortMode(SPH_SORT_EXTENDED,'create_time DESC'); #設置排序字段及排序方式,第一個參數是排序的模式,第二個參數爲字段和排序方式DESC或ASC 注意:字段和排序方式須要空格隔開
4.設置limit:htm
$sphinx->SetLimits(0, 10, 1000);
5.設置查詢關鍵詞:最爲關鍵的一步blog
$result = $sphinx -> query('((@status=100 & @tmp_edit_status=1) | @status=200 | @status=800 ) & @title(測試) & @tmptype = 1 ‘,"notes"); #語法 query('關鍵詞或語句','索引名稱') #語句的語法:@字段名 判斷條件
#模糊查詢:@字段名(關鍵詞) #多個判斷條件之間用 & 或 | 鏈接
完整代碼以下:排序
$sphinx = new SphinxClient(); $sphinx->SetServer("xxx.xxx.xx.xx",xxx); $sphinx->SetMatchMode(SPH_MATCH_EXTENDED2); $sphinx->SetFilterRange('create_time',1000,'9999999'); $sphinx->SetSortMode(SPH_SORT_EXTENDED,'create_time DESC'); $sphinx->SetLimits(0, 10, 1000); $sphinx->SetArrayResult(true); $result = $sphinx -> query('((@status=100 & @tmp_edit_status=1) | @status=200 | @status=800 ) & @title(測試) & @tmptype = 1 ‘,"notes"); echo "Query failed: " . $sphinx->GetLastError() . ".\n"; echo json_encode($result);
這樣就能夠實現複雜Sql查詢語句了!索引