sphinx的–rotate运行机制

如果sphinx在运行中,要indexer时,需要加上–rotate参数,这样索引完就直接生效了。

原因是sphinx的searchd在启动时会创建一个 .spl 锁文件,并在关闭时会删除它。在indexer创建索引时如果发现有 .spl文件,则不会创建新索引,因为这时已经标志sphinx正在运行中,除非使用 –-rotate。

rotate运行机制

->indexer完成索引  
->发送SIGHUP 给searchd(同时在终端输出索引已经完成)
->searchd接到中断信号->等待所有子进程退出
->重命名 当前索引为旧索引为 .old
->重命名 .new 索引文件作为当前索引
->尝试加载当前索引文件->如果加载失败,searchd会把.old文件回滚为当前文件,并把刚建立的新索引重命名为 .new
->加载成的话:完成无缝切换

sphinx 建立索引的方法

普通建立索引方法,–all参数是建立所有索引
#/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf –all

如果sphinx在运行中,要indexer时,需要加上–rotate参数,这样索引完就直接生效了。不需要重新启动sphinx服务。
#/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf –all –rotate

建立单个索引的方法,arc索引名称为例

#/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf arc

或者

#/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf arc –rotate

Coreseek/Sphinx根据设置索引的范围方法

有两种方式设置搜索的范围
1.根据sql_attr_uint等类型的属性字段

$this->cl = new SphinxClient ();
$this->cl->SetServer('192.168.128.128', 9312);
//自动获取一年以内的文章
$this->cl->SetFilterRange('posttime', strtotime('-1 year'),time());

2.根据主键id进行范围限制

$this->cl = new SphinxClient ();
$this->cl->SetServer('192.168.128.128', 9312);
$this->cl->setIDRange(800000,10000000);