開始之前強烈推薦先瀏覽一下 xunsearch 的官方文件
Xunsearch簡介
Xunsearch 是一個高效能、全功能的全文檢索解決方案。
Xunsearch 旨在幫助一般開發者針對既有的海量資料,快速而方便地建立自己的全文搜尋引擎。
測試環境:
Linux 伺服器 2 臺:
代號 | 功能 | IP | 系統 |
---|---|---|---|
伺服器A | 提供web服務 | 192.168.56.2 | centos7 |
伺服器B | 提供 xunsearch 後端服務 | 192.168.56.3 | centos7 |
xunsearch 後端伺服器配置:
PHP版本 7.0.13 沒有安裝快取, 生產環境推薦安裝快取
PHP 7.0.13 (cli) (built: Dec 21 2016 13:53:31) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Xdebug v2.5.0, Copyright (c) 2002-2016, by Derick Rethans
連線到伺服器B 執行下面指令安裝, 解壓 xunsearch 安裝包
wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2
tar -xjf xunsearch-full-latest.tar.bz2
執行安裝指令碼,根據提示進行操作,主要是輸入 xunsearch 軟體包的安裝目錄,強烈建議單獨 規劃一個目錄,而不是混到別的軟體目錄中。
cd xunsearch-full-1.4.10/
sh setup.sh
之後會顯示安裝的互動介面, 然後直接按下回車,安裝到預設路徑下,
然後喝杯咖啡, 稍等一會 出現下面的安裝成功提示即可.
+==========================================+
| Welcome to setup xunsearch(full) |
| 歡迎使用 xunsearch (完整版) 安裝程式 |
+------------------------------------------+
| Follow the on-screen instructions please |
| 請按照螢幕上的提示操作以完成安裝 |
+==========================================+
Please specify the installation directory
請指定安裝目錄 (預設為中括號內的值)
[/usr/local/xunsearch]:
Confirm the installation directory
請確認安裝目錄:/usr/local/xunsearch [Y/n]Y
Checking scws ... no
Installing scws (1.2.3) ...
Extracting scws package ...
Configuring scws ...
Compiling & installing scws ...
Checking scws dict ... no
Extracting scws dict file ...
Checking libuuid ... no, try to install it
Extracting libuuid package ...
Configuring libuuid ...
Compiling & installing libuuid ...
Checking xapian-core-scws ... no
Installing xapian-core-scws (1.2.22) ...
Extracting xapian-core-scws package ...
Configuring xapian-core-scws ...
Compiling & installing xapian-core-scws ...
Checking libevent ... no
Installing libevent (2.0.21-stable) ...
Extracting libevent package ...
Configuring libevent ...
Compiling & installing libevent ...
Extracting xunsearch package (1.4.10) ...
Configuring xunsearch ...
Compiling & installing xunsearch ...
Cleaning ... done
+=================================================+
| Installation completed successfully, Thanks you |
| 安裝成功,感謝選擇和使用 xunsearch |
+-------------------------------------------------+
| 說明和注意事項: |
| 1. 開啟/重新開啟 xunsearch 服務程式,命令如下: |
| /usr/local/xunsearch/bin/xs-ctl.sh restart |
| 強烈建議將此命令寫入伺服器開機指令碼中 |
| |
| 2. 所有的索引資料將被儲存在下面這個目錄中: |
| /usr/local/xunsearch/data |
| 如需要轉移到其它目錄,請使用軟連結。 |
| |
| 3. 您現在就可以在我們提供的開發包(SDK)基礎上 |
| 開發您自己的搜尋了。 |
| 目前只支援 PHP 語言,參見下面文件: |
| /usr/local/xunsearch/sdk/php/README |
+=================================================+
注意: 如果是生產環境iptables可能需要配置得嚴格,本文僅為測試
配置一下iptables, 如果你沒有啟用那麼忽略本操作
vi /etc/sysconfig/iptables
加入, 下面兩行
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8383 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8384 -j ACCEPT
重啟iptables
service iptables restart
啟動服務
/usr/local/xunsearch/bin/xs-ctl.sh -b inet start
啟動輸出內容:
INFO: starting server[xs-indexd] ... (BIND:8383)
INFO: starting server[xs-searchd] ... (BIND:8384)
web伺服器配置
安裝xunsearch PHP SDK
cd project/root/path
composer require --prefer-dist hightman/xunsearch
建立專案配置檔案, 一個專案對應一個配置檔案, 專案名稱不能重複
cp appvendorhightmanxunsearchappdemo.ini appconfigsearch-demo.ini
修改剛剛建立的檔案的內容, 其中server.index 和 server.search 的IP地址是安裝了xunsearch服務的伺服器IP地址
;搜尋配置檔案示例
project.name = demo
project.default_charset = utf-8
server.index = 192.168.56.4:8383
server.search = 192.168.56.4:8384
[pid]
type = id
[subject]
type = title
[message]
type = body
[chrono]
type = numeric
修改 app/routes/web.php 檔案, 寫入一些客戶端搜尋測試程式碼
###################### 測試模組 ####################
/*
* 全文搜尋測試部分
*/
Route::get(`/search/{key}`, function ($key){
$xs = new XS(config_path(`search-demo.ini`));
$search = $xs->search; // 獲取 搜尋物件
$query = $key;
$search->setQuery($query)
->setSort(`chrono`, true) //按照chrono 正序排列
->setLimit(20,0) // 設定搜尋語句, 分頁, 偏移量
;
$docs = $search->search(); // 執行搜尋,將搜尋結果文件儲存在 $docs 陣列中
$count = $search->count(); // 獲取搜尋結果的匹配總數估算值
foreach ($docs as $doc){
$subject = $search->highlight($doc->subject); // 高亮處理 subject 欄位
$message = $search->highlight($doc->message); // 高亮處理 message 欄位
echo $doc->rank() . `. ` . $subject . " [" . $doc->percent() . "%] - ";
echo date("Y-m-d", $doc->chrono) . "<br>" . $message . "<br>";
echo `<br>========<br>`;
}
echo `總數:`. $count;
});
Route::get(`/makedoc/{title}/{message}`, function ($title, $message){
$xs = new XS(config_path(`search-demo.ini`));
$doc = new XSDocument;
$doc->setFields([
`pid` => 1,
`subject` => $title,
`message` => $message,
`chrono` => time(),
]); // 用陣列進行批量賦值
$xs->index->add($doc);
});
使用瀏覽器訪問上面兩個路由來測試功能
通過訪問: http://你的域名/makedoc/標題/… 測試生成索引
測試例子:
http://你的域名/makedoc/關於 xunsearch 的 DEMO 專案測試/專案測試是一個很有意思的行為!
http://你的域名/makedoc/測試第二篇/這裡是第二篇文章的內容
http://你的域名/makedoc/專案測試第三篇/俗話說,無三不成禮,所以就有了第三篇
注意: 索引不是即時生效的 延遲大概在10秒左右
通過訪問: http://你的域名/search/關鍵詞 測試搜尋功能
比如搜尋關鍵詞 專案
1. 關於 xunsearch 的 DEMO 專案測試 [99%] - 2011-08-26
專案測試是一個很有意思的行為!
========
2. 專案測試第三篇 [100%] - 2011-08-26
俗話說,無三不成禮,所以就有了第三篇
========
總數:2
通過上述步驟我們就完成了一個最簡單的全文搜尋例子.
如果希望瞭解更多詳細內容, 請閱讀xunsearch的官方文件.
注意事項
無論是增加索引還是改變資料結果。一定要重建索引。否則不會報錯,但是搜尋結果會不正確。切記!!!!!
比如:
util/Indexer.php --rebuild --source=mysql://root:pass@localhost/dbname --sql="SELECT * FROM tbl_post" --project=demo