sphinx增量索引和主索引來實現索引的實時更新

2021-07-26 13:27:32 字數 1558 閱讀 8458

專案中文章的資訊內容因為持續有新增,而文章總量的基數又比較大,所以做搜尋的時候,用了主索引+增量索引這種方式來實現索引的實時更新。

實現原理:

1. 新建一張表,記錄一下上一次已經建立好索引的最後一條記錄的id

2. 當索引時,然後從資料庫中取出所有id大於上面那個sphinx中的那個id的資料, 這些就是新的資料,然後建立乙個小的索引檔案

3. 把上邊我們建立的增量索引檔案合併到主索引檔案上去

4. 把最後一條記錄的id更新到第一步建立的表中

值得注意的兩點:

1)當合併索引的時候,只是把增量的索引合併進主索引中,增量索引本身並不會變化,也不會被刪除;

2)當重建主索引的時候,增量索引就會被刪除;

具體操作實現流程:

1. 新建一張表,用於儲存已經建過索引的最大的doc_id

create table `sph_counter` (

`counter_id`

int(11) not null comment '

標識不同的資料表',

`max_doc_id`

int(11) not null comment '

每個索引表的最大id,會實時更新',

primary key (`counter_id`)

) engine=innodb default charset=utf8

2. 配置索引檔案

#主索引資料來源定義

source article_main

# 增量索引資料來源定義

source article_delta : article_main

# 主索引index定義

index article_main

# 增量索引index定義

index article_delta : article_main

配置檔案中修改好本部分之後,需要重新啟動一下searchd程序,讓其載入新的配置檔案

sudo /usr/local/coreseek4/bin/searchd -c /usr/local/coreseek4/etc/***x.conf  --stop

sudo nohup /usr/local/coreseek4/bin/searchd -c /usr/local/coreseek4/etc/***x.conf &

新建主索引 :

sudo /usr/local/coreseek4/bin/indexer -c /usr/local/coreseek4/etc/***x.conf article_main --rotate

過一段時間再新建增量索引(需要將此命令放到定時任務中,跑的頻率按照實際需求來定)

sudo /usr/local/coreseek4/bin/indexer -c /usr/local/coreseek4/etc/***x.conf article_delta --rotate

下一步,自己可以用命令列的search來查詢增量索引的內容

sphinx增量索引和主索引來實現索引的實時更新

專案中文章的資訊內容因為持續有新增,而文章總量的基數又比較大,所以做搜尋的時候,用了主索引 增量索引這種方式來實現索引的實時更新。實現原理 1.新建一張表,記錄一下上一次已經建立好索引的最後一條記錄的id 2.當索引時,然後從資料庫中取出所有id大於上面那個sphinx中的那個id的資料,這些就是新...

sphinx增量索引和主索引來實現索引的實時更新

專案中文章的資訊內容因為持續有新增,而文章總量的基數又比較大,所以做搜尋的時候,用了主索引 增量索引這種方式來實現索引的實時更新。實現原理 1.新建一張表,記錄一下上一次已經建立好索引的最後一條記錄的id 2.當索引時,然後從資料庫中取出所有id大於上面那個sphinx中的那個id的資料,這些就是新...

sphinx主索引,增量索引建立

相關命令及步驟 建立主索引 usr local coreseek bin indexer c usr local coreseek etc csft.conf all 建立增量索引 1.建立測試資料表以及資料 2.修改配置檔案 主索引源 sql query pre 增量索引源 sql query p...