程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> sphinx api 學習整理

sphinx api 學習整理

編輯:PHP基礎知識
 

sphinx api 的完整用法及重要屬性,整理一下,以防忘記!

$cl = new SphinxClient ();
//安裝的默認host:localhost ,sphinx端口:3312
$cl->SetServer ( "localhost", "3312");
//可選,為每一個全文檢索字段設置權重,主要根據你在sql_query中定義的字段的順序,Sphinx系統以後會調整,可以按字段名稱來設定權重. 可以參考SetFieldWeights(array ( 100, 1 ))
$cl->SetWeights ( array ( 100, 1 ) );


//查詢的模式,總共有以下模式:SPH_MATCH_ALL,匹配所有查詢詞(and)(默認模式)SPH_MATCH_ANY, 匹配查詢詞中的任意一個(or)SPH_MATCH_PHRASE, 將整個查詢看作一個詞組,要求按順序完整匹配SPH_MATCH_BOOLEAN, 將查詢看作一個布爾表達式 SPH_MATCH_EXTENDED, 將查詢看作一個 Sphinx 內部查詢語言的表達式 。還有一個特殊的“完整掃描”模式,當如下條件滿足時,該模式被自動激活:
//1. 查詢串是空的(即長度為零)
//2.docinfo存儲方式為 extern在完整掃描模式中,全部已索引的文檔都被看作是匹配的。這類匹配仍然會被過濾、排序或分組,但是並不會做任何真正的全文檢索。這種模式可以用來統一全文檢索和非全文檢索的代碼,或者減輕SQL 服務器的負擔(有些時候 Sphinx 掃描的速度要優於類似的 MySQL 查詢)
$cl->SetMatchMode ( "SPH_MATCH_ALL" );

//只搜索forum_id=1或3或7 如果$cl->SetFilter ( "forum_id", array ( 1,3,7 ) ,true); 表示只搜索forum_id!=1或!=2或!=7
$cl->SetFilter ( "forum_id", array ( 1,3,7 ) );

//SPH_GROUPBY_DAY,從時間戳中按 YYYYMMDD 格式抽取年、月、日
//SPH_GROUPBY_WEEK,從時間戳中按 YYYYNNN 格式抽取年份和指定周數(自年初計起)的第一天
//SPH_GROUPBY_MONTH,從時間戳中按 YYYYMM 格式抽取月份
//SPH_GROUPBY_YEAR,從時間戳中按 YYYY 格式抽取年份 //最終的搜索結果中每組包含一個最佳匹配。分組函數值和每組的匹配數目分別以“虛擬”屬性@group 和@count 的形式返回。
//SPH_SORT_RELEVANCE忽略任何附加的參數,永遠按相關度評分排序。所有其余的模式都要求額外的排序子句,子句的語法跟具體的模式有關。
$cl->SetGroupBy ("UserName", SPH_GROUPBY_ATTR, $groupsort );

$cl->SetGroupDistinct ( $distinct );
/*
$cl->SetGroupBy ( "category", SPH_GROUPBY_ATTR, "@count desc" );
$cl->SetGroupDistinct ( "vendor" );
相當於:
SELECT id, weight, all-attributes,
COUNT(DISTINCT vendor) AS @distinct,
COUNT(*) AS @count
FROM products
GROUP BY category
ORDER BY @count DESC
*/


//SPH_SORT_RELEVANCE 模式, 按相關度降序排列(最好的匹配排在最前面)SPH_SORT_ATTR_DESC 模式, 按屬性降序排列 (屬性值越大的越是排在前面)SPH_SORT_ATTR_ASC 模式, 按屬性升序排列(屬性值越小的越是排在前面)SPH_SORT_TIME_SEGMENTS 模式, 先按時間段(最近一小時/天/周/月)降序,再按相關度降序SPH_SORT_EXTENDED 模式, 按一種類似 SQL 的方式將列組合起來,升序或降序排列。SPH_SORT_EXPR 模式,按某個算術表達式排序。
$cl->SetSortMode ( SPH_SORT_EXTENDED, "post_date");

//從第0個開始,取$limit 個, 第三個參數限制了最大偏移量不大於1000
$cl->SetLimits ( 0, $limit, ( $limit>1000 ) ? $limit : 1000 );

//設置評分模式: * SPH_RANK_PROXIMITY_BM25, 默認模式,同時使用詞組評分和BM25評分,並且將二者結合。* SPH_RANK_BM25, 統計相關度計算模式,僅使用BM25評分計算(與大多數全文檢索引擎相同)。這個模式比較快,但是可能使包含多個詞的查詢的結果質量下降。 * SPH_RANK_NONE, 禁用評分的模式,這是最快的模式。實際上這種模式與布爾搜索相同。所有的匹配項都被賦予權重1。* SPH_RANK_WORDCOUNT, 根據關鍵詞出現次數排序。這個排序器計算每個字段中關鍵字的出現次數,然後把計數與字段的權重相乘,最後將積求和,作為最終結果。* SPH_RANK_PROXIMITY, 版本0.9.9-rc1新增,將原始的詞組相似度作為結果返回。在內部,這個模式被用來模擬SPH_MATCH_ALL的查詢。 * SPH_RANK_MATCHANY, 版本0.9.9-rc1新增,返回之前在SPH_MATCH_ANY中計算的位次,在內部這個模式用於模擬SPH_MATCH_ANY的查詢。* SPH_RANK_FIELDMASK, 版本0.9.9-rc2新增,返回一個32位掩碼,其中第N位對應第N個全文字段,從0開始計數,如果某個字段中出現了滿足查詢的關鍵詞,則對應的標志位被置1。
$cl->SetRankingMode ( "SPH_RANK_PROXIMITY_BM25");

//PHP專用。控制搜索結果集的返回格式(匹配項按數組返回還是按hash返回)$arrayresult 參數應為布爾型。如果$arrayresult為false(默認),匹配項以PHP hash格式返回,文檔ID為鍵,其他信息(權重、屬性)為值。如果$arrayresult為true,匹配項以普通數組返回,包括匹配項的全部信息(含文檔ID)
$cl->SetArrayResult ( true );


//連接到searchd服務器,根據服務器的當前設置執行給定的查詢,取得並返回結果集。$query是查詢字串,$index是包含一個或多個索引名的字符串。一旦發生一般錯誤,則返回假並設置GetLastError()信息。若成功則返回搜索的結果集。此外, $comment 將被發送到查詢日志中搜索部分的前面,這對於調試是非常有用的。目前,注釋的長度限制為128個字符以內。$index的默認值是"*",意思是對全部本地索引做查詢。索引名中允許的字符包括拉丁字母(a-z),數字(0-9),減號(-)和下劃線(_),其他字符均視為分隔符。因此,下面的示例調用都是有效的,而且會搜索相同的兩個索引:
$res = $cl->Query ( $query, $index );
/*
$cl->Query ( "test query", "main delta" );
$cl->Query ( "test query", "main;delta" );
$cl->Query ( "test query", "main, delta" );
*/
 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved