sphinx(斯芬克司)
sphinx是乙個基於sql的全文檢索引擎,可以結合mysql,postgresql做全文搜尋,它可以提供比資料庫本身更專業的搜尋功能,使得應用程式更容易實現專業化的全文檢索.
sphinx的主要特性包括:
高速索引 (在**cpu上,近10 mb/秒); 高速搜尋 (2-4g的文字量中平均查詢速度不到0.1秒); 高可用性 (單cpu上最大可支援100 gb的文字,100m文件); 提供良好的相關性排名 支援分布式搜尋; 提供文件摘要生成; 提供從mysql內部的外掛程式式儲存引擎上搜尋 支援布林,短語, 和近義詞查詢; 支援每個文件多個全文檢索域(預設最大32個); 支援每個文件多屬性; 支援斷詞; 支援單位元組編碼與utf-8編碼;
** 注:sphinx的增量索引其實是通過兩個索引來實現的(主索引每天凌晨更新,增量索引每5分鐘生成一次),網上有說可以通過索引merge合併成乙個索引,但我試了試沒有真的合併進去
sphinx 增量索引的設定 資料庫中的已有資料很大,又不斷有新資料加入到資料庫中,也希望能夠檢索到。全部重新建立索引很消耗資源,因為我們需要更新的資料相比較而言很少。 例如。原來的資料有幾百萬條,而新增的只是幾千條。這樣就可以使用「主索引+增量索引」的模式來實現近乎實時更新的功能。
這 個模式實現的基本原理是設定兩個資料來源和兩個索引,為那些基本不更新的資料建立主索引,而對於那些新 增的資料建立增量索引。主索引的更新頻率可以設定的長一些(例如設定在每天的午夜進行),而增量索引的更新頻率,我們可以將時間設定的很短(幾分鐘左 右),這樣在使用者搜尋的時候,我們可以同時查詢這兩個索引的資料。
使用「主索引+增量索引」方法有個簡單的實現,在資料庫中增加乙個計數表,記錄每次重新構建主索引時,被索引表的最後乙個資料id,這樣在增量索引時只需要索引這個id以後的資料即可,每次重新構建主索引時都更新這個表。
測試條件:以預設的sphinx.conf配置為例,資料庫表的資料也以 example.sql為例。
1、建立相關表
建立主索引表
create
table
`sph_test1` (
`id`
int(10) unsigned not
null,
`weight`
int(11) not
null,
`query`
varchar(3072) character
set latin1 not
null,
`group_id`
int(11) default
null,
key`query` (`query`)
) engine=sphinx default charset=utf8 connection='sphinx:'
建立索引計數表
create
table
`sph_counter` (
`id`
int(11) not
null,
`max_doc_id`
int(11) not
null,
primary
key (`id`)
)建立增量索引表
create
table
`sph_delta_test1` (
`id`
int(10) unsigned not
null,
`weight`
int(11) not
null,
`query`
varchar(3072) not
null,
`group_id`
int(11) default
null,
key`query` (`query`(1024))
) engine=sphinx default charset=utf8 connection='sphinx:'
2、修改sphinx.conf
source src1
// 注意:delta_src 中的sql_query_pre的個數需和main_src 對應,否則可能搜尋不出相應結果
source delta_src1: src1
index test1 //主索引
index delta_test1: src1 //增量索引
3、定時任務生成索引(–rotate 引數可以不重啟服務索引就能生效)
a、每天凌晨生成全量索引:./indexer test1 –rotate
b、每10分鐘生成一次增量索引 :./indexer delta_test1 –rotate
sphinx 增量索引 實現實時更新
一.sphinx增量索引的設定 資料庫中的已有資料很大,又不斷有新資料加入到資料庫中,也希望能夠檢索到。全部重新建立索引很消耗資源,因為我們需要更新的資料相比較而言很少。例如。原來的資料有幾百萬條,而新增的只是幾千條。這樣就可以使用 主索引 增量索引 的模式來實現近乎實時更新的功能。這個模式實現的基...
sphinx增量索引
在sphinx libmmseg搭建中文全文搜尋引擎 安裝配置中安裝試驗了sphinx的使用,但是還有幾方面的問題有待處理。用來建立索引的分詞資料 動態增量索引更新 索引在前端的介面的表現使用 本篇主要是對動態增量更新的一些研究。關於分詞資料的建立和前端介面的控制將在以後研究。在利用 sphinx ...
Sphinx增量索引
sphinx建立索引之後,如果我們的資料庫又增加了一條資料,需要重新建立索引。但是如果資料量十分龐大時,每次都重新建立索引顯然是不合適的。我們希望實現的效果是,每次都只建立新增的資料的索引。假設現在資料庫中有三條資料,id分別為1,2,3。使用indexer命令為這三條資料建立索引,並把max do...