更新单个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