sphinx 增量索引實現例項

2021-07-29 22:40:36 字數 2306 閱讀 8877

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...