專案中文章的資訊內容因為持續有新增,而文章總量的基數又比較大,所以做搜尋的時候,用了主索引+增量索引這種方式來實現索引的實時更新。
實現原理:
1. 新建一張表,記錄一下上一次已經建立好索引的最後一條記錄的id
2. 當索引時,然後從資料庫中取出所有id大於上面那個sphinx中的那個id的資料, 這些就是新的資料,然後建立乙個小的索引檔案
3. 把上邊我們建立的增量索引檔案合併到主索引檔案上去
4. 把最後一條記錄的id更新到第一步建立的表中
值得注意的兩點:
1)當合併索引的時候,只是把增量的索引合併進主索引中,增量索引本身並不會變化,也不會被刪除;
2)當重建主索引的時候,增量索引就會被刪除;
具體操作實現流程:
1. 新建一張表,用於儲存已經建過索引的最大的doc_id
create table `sph_counter` (2. 配置索引檔案`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
#主索引資料來源定義source article_main
# 增量索引資料來源定義source article_delta : article_main
# 主索引index定義配置檔案中修改好本部分之後,需要重新啟動一下searchd程序,讓其載入新的配置檔案index article_main
# 增量索引index定義
index article_delta : article_main
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...