全文索引xunsearch的詳細講解及sphinx的比較


一、獲取:
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 字段類型
  1. string 字符型,適用多數情況,也是默認值
  2. numeric 數值型,包含整型和浮點數,僅當字段需用於以排序或區間檢索時才設為該類型,否則請使用 string 即可
  3. date 日期型,形式為 YYYYmmdd 這樣固定的 8 字節,如果沒有區間檢索或排序需求不建議使用
  4. id 主鍵型,確保每條數據具備唯一值,是索引更新和刪除的憑據,每個搜索項目必須有且僅有一個 id 字段,該字段的值不區分大小寫
  5. title 標題型,標題或名稱字段,至多有一個該類型的字段
  6. body 內容型,主內容字段, 即本搜索項目中內容最長的字段,至多只有一個該類型字段,本字段不支持字段檢索
 
五、weight 混合區檢索時的概率權重在混合檢索時,可以對標題和內容等不同字段進行權重計算,如果你不想該字段參與計算權重可設為 0 。通常默認值為 1 ,但 title 型默認為 5 而 body 型則固定為 1 。
weight = 1
 
六、index 索引方式
  1. none 不做索引,所有的搜索匹配均與本字段無關,這個字段只用於排序或搜索結果展示用到。
  2. self 字段索引,可以在搜索時用 field:XXX 來檢索本字段
  3. mixed 混合區索引,不標明字段的默認搜索也可以檢索本字段 
  4. 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之后,會有兩個(服務)軟件啟動
  1. 索引服務或者說索引服務器(是建立在xapian核心上的),然后它會監聽一個端口,他負責維護索引文件或者說索引表(索引的增,刪);
  2. 搜索服務或者說搜索服務器(scws分詞器核心上),它也會監聽一個端口,他負責根據客戶提交過來的數據的 進行分詞,到索引表中查詢得到相關數據的id(這里的id是主鍵索引),然后再到數據庫中查詢,然后返回結果集。
  3. 知道他的原理之后,程序員怎么按照上面的發送命令呢,即xunsearch提供的php sdk,我們程序員只要根據sdk中api就可以了,所以開發就簡單了。
  4. 官網架構截圖全文索引xunsearch的詳細講解及sphinx的比較
  5. 補沖說明:經過本人測試發現,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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM