讯搜 PHP,XunSearch(讯搜)的使用教程步骤
## XunSearch
XunSearch是一款很不錯的中文全文檢索工具使用xunsearch快速構建自己的PHP全文搜索引擎。
需要注意的是XunSearch只能在Linux和Unix下運行。官方發布了一個DEMO 直接下載 PHP-SDK 就可以開發測試。
安裝服務端
1. 下載&解壓安裝包:http://www.xunsearch.com/site/download
2. 強烈推薦用 $HOME/xunsearch 或 /usr/local/xunsearch 作為安裝目錄 ( 以下簡稱 $prefix) 。無論您是首次安裝
xunsearch 還是升級新版本,均只要直接執行我們提供的安裝腳本,輸入安裝目錄然后耐心等待即可。
“`
cd xunsearch-full-1.4.10 ;
sh setup.sh
“`
3. 安裝完畢后,您就可以通過自帶的腳本 ($prefix/bin/xs-ctl.sh) 啟動/關閉 xunsearch 服務端了。用法舉例:
“`
$prefix/bin/xs-ctl.sh start # 默認啟動,綁定本地的 8383/8384 端口
$prefix/bin/xs-ctl.sh -b inet start # 綁定全部 IP ,適合 SDK/服務端 不同服務器的情況
$prefix/bin/xs-ctl.sh stop # 停止服務器,若啟動時指定了 -b inet 此處也必須指定
“`
4. 沒錯,安裝就是這么簡單。特別提示,搜索的所有索引數據將被保存到 $prefix/data 目錄,因此如果您希望數據目錄另行安排,請采用軟連接形式確保 $prefix/data 鏈至真實數據目錄。此外,如果服務端啟動時使用了 -b inet 參數,那么請借助 iptables 或其它防火墻工具進行保護,xunsearch 本身出于性能考慮不做其它驗證處理。
PHP-SDK
PHP-SDK 的代碼默認包含在服務端安裝目錄中,即 $prefix/sdk/php 。目錄結構如下:
“`
|– doc/ — HTML 格式的文檔、API手冊
|– app/ — 搜索項目 ini 文件的默認存儲目錄
|– lib/XS.php — 搜索庫唯一文件,所有搜索相關功能均必須引入此文件
— util/ — 輔助工具目錄
|– RequireCheck.php — 檢測您的 PHP 環境是否符合 xunsearch 運行條件
|– Quest.php — 搜索測試工具
— Indexer.php — 索引管理工具
“`
1. 如果您的搜索應用和服務端在同一機器,則無需其它操作,只需在開發時直接引入$prefix/sdk/php/lib/XS.php 即可。
2. 如果您的搜索應用和服務端不在同一機器,則請復制 $prefix/sdk/php 目錄到相應的搜索應用服務器,同時出于安全考慮,建議不要放到 WEB 可訪問的目錄。
3. 使用 SDK 中的 util 工具要求您的 php(cli) 位于可執行文件默認搜索路徑中 ( 即用 which php 可以檢測到),如不在請做好軟鏈接至 /usr/local/bin/php
檢測運行環境
Xunsearch 要求 PHP 是 5.2.0 及以上版本,強烈推薦使用 5.3.x 系列的 PHP。請在安裝完畢后直接執行$prefix/sdk/php/util/RequireCheck.php 看輸出即可。如果您的終端編碼不是 UTF-8 請在調用時加上 -c gbk 參數。
DEMO 服務器
某些情況下,部分用戶未能自己部署安裝服務端,而又想體驗 xunsearch 。因此,我們從發布 1.3.3 版本起,提供了一臺供用戶測試的 DEMO 服務器。用戶無需安裝服務端,直接下載 PHP-SDK 就可以開發測試。特別提示,DEMO 服務器只用于
測試目的,并會不定期重置數據。
單獨下載 PHP-SDK
如果您沒有安裝服務端,想直接體驗 DEMO 服務器的,您只要從下面地址下載解壓 SDK 壓縮包即可。
http://www.xunsearch.com/download/xunsearch-sdk-latest.zip
解壓后得到 xunsearch-sdk 目錄,相應的搜索庫文件為 xunsearch-sdk/php/lib/XS.php
服務器地址
索引服務器:demo.xunsearch.com 端口 9393
搜索服務器:demo.xunsearch.com 端口 9394
開發流程
? 為便于講解說明,假定 PHP-SDK 代碼目錄為 $sdk 。
? 分析搜索需求,設計搜索應用必需的字段。
? 編寫項目配置文件,項目配置 ini 文件存放在 $sdk/app 目錄。
? 引入 $sdk/lib/XS.php 進行搜索功能和界面開發,借助 $sdk/util/*.php 工具進行測試或調試。
認識對象
? XS — 搜索項目總對象,所有相關操作均基于此對象及子方法。
? XSDocument — 搜索結果或索引文檔,包括一組字段及值,相當于 SQL 表中的一條記錄。
? XSIndex — 索引管理,通過 XS 對象的 index 屬性取得。
? XSSearch — 搜索功能,通過 XS 對象的 search 屬性取得。
? XSException — 異常類型,必須捕捉此異常以判斷操作是否正確,例:
“`
require ‘$sdk/lib/XS.php’; // 引入 xunsearch sdk
try {
$xs = new XS(‘demo’); // demo 為項目名稱,配置文件是:$sdk/app/demo.in i
// … 此外為其它 XSIndex/XSSearch 的相關功能代碼
} catch (XSException $e) {
echo $e . “n” . $e->getTraceAsString() . “n”; // 發生異常,輸出描述
}
“`
編寫配置文件
推薦使用我們的在線工具編寫:http://www.xunsearch.com/tools/iniconfig
demo 項目的配置如下:
創建索引
獲取 XSIndex 對象
“`
require ‘$sdk/lib/XS.php’;
try {
$xs = new XS(‘demo’); // 創建 XS 對象,項目名稱為:demo
$index = $xs->index; // 獲取索引對象
// … 在此編寫過索引處理代碼 …
} catch (XSException $e) { }
“`
增刪改
“`
$doc = new XSDocument(array( // 創建 XSDocument
‘pid’ => 123, // 主鍵字段,必須指定
‘subject’ => ‘ 測試文檔標題’, ‘message’ => ‘ 測試文檔內容’,
’chrono’ => time()
));
$index->add($doc); // 添加文檔,不檢測便索引庫內是否已有同一主鍵數據
$index->update($doc); // 更新文檔,若有同主鍵數據則替換之
$index->del(‘123’); // 刪除主鍵值為 234 的文檔
$index->del(array(‘123’,‘456’)); // 刪除主鍵值為 123 及 456 的文檔
“`
清空索引
當搜索字段文件變更或出現嚴重不同步時,建議清空索引。
1 $index->clean(); // 一執行立即生效
索引同步
出于性能優化設計,上面所看到的索引操作都是異步操作。也就是說您通過 PHP 調用的 API 返回后,索引變動是先保存在服務端的隊列中,由服務端根據負荷延遲一并寫入索引庫。這個時間差我們控制在合理范圍內,通常是幾秒鐘時間。但如果您在批量更新后希望立即同步,可以這樣:
1 $index->flushIndex();
使用搜索
獲取 XSSearch 對象
“`
require ‘$sdk/lib/XS.php’;
try {
$xs = new XS(‘demo’); // 創建 XS 對象,項目名稱為:demo
$index = $xs->search; // 獲取搜索對象
// … 在此編寫過搜索處理代碼 …
} catch (XSException $e) { }
“`
搜索語法
? 查詢語句和流行的搜索引擎相似,通過空格把搜索詞、句連接起來即可,字段檢索使用 field:XXX 的格式。
? 允許使用 AND/OR/NOT/XOR 等顯式地布爾關系組合,可以使用小括號 () 包圍表達優先級。
? 支持使用雙引號對較長搜索詞進行精確匹配,要求字段設計時勾選“精確”項。
$search->search(‘ 杭州 西湖’); // 搜索同時包含這2個詞的結果
$search->search(‘ 杭州 OR 西湖’); // 搜索包含其中一個詞的結果
$search->search(‘subject:杭州 西湖’); // 包括西湖并且標題包含杭州的結果
獲取結果
? 設置數量及偏移
$search->setLimit(5, 15); // 設置最多返回 5 條,并跳過前 15 條,即返回第 16-20 條結果
? 獲取搜索結果
“`
$docs = $search->setQuery(‘ 測試’)->search(); // 搜索 ‘ 測試’
foreach ($docs as $doc) {
$subject = $search->highlight($doc->subject); // 高亮處理標題
echo $doc->rank() . ‘. ‘ . $subject . ‘ [‘ . $doc->percent() . ‘%] – ‘ . date(‘Y-m-d’) . “n”;
echo $doc->message . “nn”;
}
“`
? 獲取搜索結果數量 ( 估算值)
“`
$count = $search->getLastCount(); // 獲取最后一次 $search->search() 的匹配數量
$count = $search->count(‘測試’); // 直接檢索包含 ‘ 測試’ 的數量
“`
搜索日志
關于日志
系統內部會自動記錄并分析搜索關鍵詞日志,通過日志衍生出相關的擴展功能。日志同樣是異步更新的并且延遲較大,如需要強制刷新請調用以下指令或索引 API 。
“`
php $sdk/util/Indexer.php -p demo –flush-log # 通過輔助工具刷新日志
$index->flushLogging(); // 通過索引 API 更新
“`
熱門搜索
“`
通過 XSSearch::getHotQuery 方法獲取熱門搜索詞,返回的數組以關鍵詞為鍵名,搜索指數為值。
$words = $search->getHotQuery(); // 獲取前 6 個總熱門搜索詞
$words = $search->getHotQuery(6, ‘lastnum’); // 獲取前 10 個上周熱門詞
“`
相關搜索
“`
通過 XSSearch::getRelatedQuery 方法獲取熱門搜索詞,返回相關搜索詞組成的數組。
$words = $search->getRelatedQuery(); // 獲取前 6 個和最近一次 setQuery() 相關的搜索詞
$words = $search->getRelatedQuery(‘測試’, 10); // 獲取 10 個和 ‘ 測試’ 相關的搜索詞
“`
搜索糾錯
由于輸入過快或拼音輸入中文很容易出現錯誤,XSSearch::getCorrectedQuery 方法返回糾正后的關鍵詞組成的數組。
“`
$docs = $search->setQuery(‘ 側試’)->search(); // 正常進行搜索誤打的 ‘ 側試’
$corrected = $search->getCorrectedQuery(); // 嘗試修正
if (count($corrected) > 0) { // 有修正詞則列出
echo “ 您是不是要找:n”;
foreach ($corredted as $word) echo $word . “n”;
}
“`
搜索建議
類似常見搜索引擎那樣,當用戶在輸入框鍵入少量字、拼音、聲母時進行智能補全,可以節省用戶的輸入時間。
“`
$words = $search->getExpandedQuery(‘c’); // 返回 array(‘ 測試’)
$words = $search->getExpandedQuery(‘ 測’); // 返回 array(‘ 測試’)
$words = $search->getExpandedQuery(‘cs’); // 返回 array(‘ 測試’)
“`
最后編輯:2016-10-27作者:sunny5156
喜歡技術....
總結
以上是生活随笔為你收集整理的讯搜 PHP,XunSearch(讯搜)的使用教程步骤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 团队协作远程办公,有哪些好用的app?
- 下一篇: KepServer问题解答