sphinx 不關閉程序更新索引 和增量索引
阿新 • • 發佈:2019-01-11
更新單個at_resource 索引
/usr/local/sphinx211/bin/indexer -c /usr/local/sphinx211/etc/sphinx.conf at_resource --rotate
更新全部索引
/usr/local/sphinx211/bin/indexer -c /usr/local/sphinx211/etc/sphinx.conf --all --rotate
加上--rotate
上面呢是重頭到尾的更新也就是每次從id1開始,所以會做重複工作,如果資料量小的話都可以接受,太大的話就用下面增量索引吧
增量索引
主要思路就是你生成主索引的時候記錄下當前mysql表的最大id,然後主索引不動,定期去生成增量索引並更改最大id,然後將增量索引合併到主索引就行了
記錄最大id表結構
CREATE TABLE `sph_counter` (
`id` int(11) unsigned NOT NULL,
`max_id` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sphinx增量表最大記錄數';
sphinx.conf配置
#定義主索引源 source test { type = mysql sql_host = localhost sql_user = root sql_pass = 123456 sql_db = test sql_port = 3306 sql_query_pre = SET NAMES utf8 sql_query_pre = REPLACE INTO sph_counter (SELECT 1, MAX(id) FROM test) #記錄最大記錄數 sql_query = select id from test where id<(select max_id from sph_counter where id=1) sql_query_info = select * from test where id = $id } #增量索引資料來源定義 source test_delta : test { sql_query_pre = SET NAMES utf8 sql_query_pre = REPLACE INTO sph_counter (SELECT 1, MAX(id) FROM test) #記錄最大記錄數 sql_query = select * from test where id>=(select max_id from sph_counter where id=1) sql_query_info = select * from test where id = $id } #定義主索引 index test { source = test #對應的source名稱 path = /usr/local/sphinx/var/data/test #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/... docinfo = extern mlock = 0 morphology = none min_word_len = 2 html_strip = 1 charset_type = zh_cn.utf-8 } #定義增量索引 index test_delta:test { source = test_delta #對應的source名稱 path = /usr/local/sphinx/var/data/test_delta #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/... } #全域性index定義 indexer { mem_limit = 128M } #searchd服務定義 searchd { listen = 9312 read_timeout = 5 max_children = 30 max_matches = 1000 seamless_rotate = 0 preopen_indexes = 0 unlink_old = 1 pid_file = /usr/local/sphinx/var/log/searchd_mysql.pid #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/... log = /usr/local/sphinx/var/log/searchd_mysql.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/... query_log = /usr/local/sphinx/var/log/query_mysql.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/... binlog_path = #關閉binlog日誌 }
生成主索引後定期更新增量合併索引,加入到crontab -e
增量索引
/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf test_delta --rotate
合併索引
/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf --merge test test_delta --rotate