一、獲取:
xunsearch下載地址: http://www.xunsearch.com/site/download。
linux命令行下載:wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2
解壓:tar -xjf xunsearch-full-latest.tar.bz2
二、安裝:
根據提示進行操作,輸入 xunsearch 軟件包的安裝目錄,這里最好把xunsearch單獨放在一個目錄下。
cd xunsearch-full/
sh setup.sh
三、啟動
啟動/重新啟動 xunsearch 的后台服務$prefix 替換為你的xunsearch安裝目錄
cd $prefix;
bin/xs-ctl.sh restart
添加到開機啟動腳本,在 Linux 系統中將腳本指令$prefix/bin/xs-ctl.sh restart寫進 /etc/rc.local 即可
四、xunsearch項目配置文件詳解
項目名稱 project.name = AppName
默認字符集 project.default_charset = UTF-8
定義字段[field_name]
type 字段類型
- string 字符型,適用多數情況,也是默認值
- numeric 數值型,包含整型和浮點數,僅當字段需用於以排序或區間檢索時才設為該類型,否則請使用 string 即可
- date 日期型,形式為 YYYYmmdd 這樣固定的 8 字節,如果沒有區間檢索或排序需求不建議使用
- id 主鍵型,確保每條數據具備唯一值,是索引更新和刪除的憑據,每個搜索項目必須有且僅有一個 id 字段,該字段的值不區分大小寫
- title 標題型,標題或名稱字段,至多有一個該類型的字段
- body 內容型,主內容字段, 即本搜索項目中內容最長的字段,至多只有一個該類型字段,本字段不支持字段檢索
五、weight 混合區檢索時的概率權重在混合檢索時,可以對標題和內容等不同字段進行權重計算,如果你不想該字段參與計算權重可設為 0 。通常默認值為 1 ,但 title 型默認為 5 而 body 型則固定為 1 。
weight = 1
六、index 索引方式
- none 不做索引,所有的搜索匹配均與本字段無關,這個字段只用於排序或搜索結果展示用到。
- self 字段索引,可以在搜索時用 field:XXX 來檢索本字段
- mixed 混合區索引,不標明字段的默認搜索也可以檢索本字段
- both 相當於 self + mixed,兩種情況均索引
七、搜索相關代碼
require '$prefix/sdk/php/lib/XS.php';
$xs = new XS('demo'); // 建立 XS 對象,項目名稱為:demo
$search = $xs->search; // 獲取 搜索對象
//搜索語句
$query = '項目測試'; // 這里的搜索語句很簡單,就一個短語
$search->setQuery($query); // 設置搜索語句
$search->addWeight('subject', 'xunsearch'); // 增加附加條件:提升標題中包含 'xunsearch' 的記錄的權重
$search->setLimit(5, 10); // 設置返回結果最多為 5 條,並跳過前 10 條
$docs = $search->search(); // 執行搜索,將搜索結果文檔保存在 $docs 數組中
$count = $search->count(); // 獲取搜索結果的匹配總數估算值
八、xunsearch原理說明
當你安裝完xunsearch之后,會有兩個(服務)軟件啟動
- 索引服務或者說索引服務器(是建立在xapian核心上的),然后它會監聽一個端口,他負責維護索引文件或者說索引表(索引的增,刪);
- 搜索服務或者說搜索服務器(scws分詞器核心上),它也會監聽一個端口,他負責根據客戶提交過來的數據的 進行分詞,到索引表中查詢得到相關數據的id(這里的id是主鍵索引),然后再到數據庫中查詢,然后返回結果集。
- 知道他的原理之后,程序員怎么按照上面的發送命令呢,即xunsearch提供的php sdk,我們程序員只要根據sdk中api就可以了,所以開發就簡單了。
- 官網架構截圖
- 補沖說明:經過本人測試發現,xunsearch與sphinx原理上略有不同,xunsearch當然在創建索引時,其實他是創建了一個自己的數據庫, 如果你用xunsearch去查尋數據時,他不會再到你的mysql數據庫中去查尋了,而是直接到它本身的數據庫中去查尋,然后返回數據,而sphinx 不是這樣的,sphinx創建一些索引文件(索引表),然后通過sphinx去查尋數據時,首先他到索引文件查尋數據,然后返回的是當前要查尋數據的 id(這里id是主鍵),然后再通過id去到mysql數據中查尋數據,然后再返回給數據。
九、xunsearch與sphinx的比較
9.1、共同點:
兩者都可以基於MySQL,都是基於C/C++開發的。Xunsearch是國內開源團隊基於國外的Xapian,所有有些是直接基於Xapian和Sphinx的比較。
9.2、區別:
9.2.1、單一索引最大記錄:Sphinx: 1億條記錄
建立索引的速度:
Sphinx: 100萬條記錄/3~4分鍾,1000玩條記錄/50分鍾內
Xunsearch: 1萬條距離/4.14分鍾
9.2.2、 查詢速度:
Sphinx: 1千萬條記錄下為0.x秒(毫秒級)
Xunsearch: 100萬條記錄為0.5秒
9.2.3、分布式搜索:
Sphinx: 支持
Xunsearch: 未發現相關文檔
9.2.4、對中文支持:
Xunsearch > Sphinx,Xunsearch支持拼音搜索
9.2.5、使用簡單化:
Xunsearch > Sphinx