sphinx 實時索引更新

2021-09-02 19:36:28 字數 1913 閱讀 2208

1 實時索引更新

有這麼一種常見的情況:整個資料集非常大,以至於難於經常性的重建索引,但是每次新增

的記錄卻相當地少。乙個典型的例子是:乙個論壇有1000000個已經歸檔的帖子,但每天只

有1000個新帖子。

在這種情況下可以用所謂的「主索引+增量索引」(main+delta)模式來實現「近實時」的

索引更新。

這種方法的基本思路是設定兩個資料來源和兩個索引,對很少更新或根本不更新的資料建立主

索引,而對新增文件建立增量索引。在上述例子中,那1000000個已經歸檔的帖子放在主索

引中,而每天新增的1000個帖子則放在增量索引中。增量索引更新的頻率可以非常快,而

文件可以在出現幾分種內就可以被檢索到。

確定具體某一文件的分屬那個索引的分類工作可以自動完成。乙個可選的方案是,建立乙個

計數表,記錄將文件集分成兩部分的那個文件id,而每次重新構建主索引時,這個表都會被更新。

示例 全自動的即時更新

# in mysql

create table sph_counter

(counter_id integer primary key not null,

max_doc_id integer not null

);# in sphinx.conf

source main

source delta : main

index main

# note how all other settings are copied from main,

# but source and path are overridden (they must be)

index delta : main

2 索引合併

合併兩個已有的索引比重新對所有資料做索引更有效率,而且有時候必須這樣做(例如在「

主索引+增量索引」分割槽模式中應合併主索引和增量索引,而不是簡單地重新索引「主索引

對應的資料)。因此indexer有這個選項。合併索引一般比重新索引快,但在大型索引上仍

然不是一蹴而就。基本上,待合併的兩個索引都會被讀入記憶體一次,而合併後的內容需要寫

入磁碟一次。例如,合併100gb和1gb的兩個索引將導致202gb的io操作(但很可能還

是比重新索引少)

基本的命令語法如下:

indexer --merge dstindex srcindex [--rotate]

srcindex的內容被合併到dstindex中,因此只有dstindex索引會被改變。若

dstindex已經被searchd用於提供服務,則--rotate引數是必須的。最初設計的使用模式是,

將小量的更新從srcindex合併到dstindex中。因此,當屬性被合併時,一旦出現了重

復的文件id,srcindex中的屬性值更優先(會覆蓋dstindex中的值)。不過要注意,

「舊的」關鍵字並不會被自動刪除。例如,在dstindex中有乙個叫做「old」的關鍵字與文

檔123相關聯,而在srcindex中則有關鍵字「new」與同乙個文件相關,那麼在合併後用

這兩個關鍵字都能找到文件123。您可以給出乙個顯式條件來將文件從dstindex中移除,

以便應對這種情況,相關的開關是--merge-dst-range:

indexer --merge main delta --merge-dst-range deleted 0 0

這個開關允許您在合併過程中對目標索引實施過濾。過濾器可以有多個,只有滿足全部過濾

條件的文件才會在最終合併後的索引中出現。在上述例子中,過濾器只允許「deleted」為0

的那些條件通過,而去除所有標記為已刪除(「deleted」)的記錄(可以通過呼叫

updateattributes() 設定文件的屬性)。

sphinx 實時索引更新 php sir

1 實時索引更新 有這麼一種常見的情況 整個資料集非常大,以至於難於經常性的重建索引,但是每次新增 的記錄卻相當地少。乙個典型的例子是 乙個論壇有1000000個已經歸檔的帖子,但每天只 有1000個新帖子。在這種情況下可以用所謂的 主索引 增量索引 main delta 模式來實現 近實時 的 索...

Sphinx實時索引

1,首先建立乙個表用來儲存主索引和增量索引的id值 create table if not exists sph counter s id int 10 unsigned not null auto increment,p id int 11 not null,primary key s id 2,...

Sphinx 實時索引

index rtsearchd 實時索引不需要indexer,直接開啟searchd。usr local sphinx bin searchd c usr local sphinx etc csft rt.conf sphinx的實時索引配置本身並不需要資料來源 source 它的資料是要通過程式利...