sphinx mysql 增量索引

Sphinx mysql 增量索引

一、增量索引的理解:

向一个数据表插入数据时,这些新插入的数据,就是增量了,sphinx是根据索引来查找数据的,如果索引没有更新,新增数据是查不出来的,所以我们要更新主索引,更新增量索引,增量条件的设定就比较重要了。

二、sphinx增量索引的设置:数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能         够检索到。全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少。例如。
        原来的数据有几百万条,而新增的只是几千条。这样就可以使用“主索引+增量索引”的模式来实       现近乎实时更新的功能。

三、原理:这个模式实现的基本原理是设置两个数据源和两个索引,为那些基本不更新的数据建立主        索引,而对于那些新 增的数据建立增量索引。主索引的更新频率可以设置的长一些(例如设置          在每天的午夜进行),而增量索引的更新频率,我们可以将时间设置的很短(几分钟左 右),这样        在用户搜索的时候,我们可以同时查询这两个索引的数据。

使用增量索引需要用到一张计数表,记录每次重新构建主索引时,被索引表的最后一个数据id。        每次构建都要更新。表以example.sql为例

四、开始配置

1.创建一张计数表和两张索引表

create table sph_counter(counter_id integer primary key not null,max_doc_id integer not null);

2.修改配置文件csft.conf

source src1

{

type                    = mysql

sql_host                = localhost

sql_user                = root

sql_pass                = root

sql_db                  = test

sql_port                = 3306  # optional, default is 3306

sql_sock                = /tmp/mysql.sock

sql_query_pre           = SET NAMES utf8

sql_query_pre           = SET SESSION query_cache_type=OFF

#有代替sph_counter中的max_doc_id,没有会添加,更新计数表的索引

sql_query_pre           =replace into sph_counter select 1,max(id) from news

sql_query               =select id,title,content from news where id<= (select max_doc_id from sph_counter where counter_id=1)

}

#注意:ddj中的sql_query_pre的个数需和src1对应,否则可能搜索不出相应结果

#增量数据源

source ddj: src1

{

sql_ranged_throttle     = 100

sql_query_pre=set names utf8

#查询增量数据

sql_query=select id,title,content from news where id > (select max_doc_id from sph_counter where counter_id=1)

}

index test1//主索引

{

source                  = src1

path                    = /usr/local/coreseek/var/data/test1

}

index ddj:test1//增量索引

{

source                  =ddj

path                    = /usr/local/coreseek/var/data/ddj

morphology              = stem_en

}

注意:在400行左右配置

charset=zh_cn.utf8

charset_dictpath=/usr/local/mmseg3/etc

3.重新建立索引

如果sphinx正在运行,停止sphinx服务,然后根据配置文件来建立索引

/usr/local/sphinx/bin/indexer
--all

/usr/local/sphinx/bin/indexer test1

/usr/local/sphinx/bin/indexer
重索引名字

/usr/local/sphinx/bin/searchd --stop

/usr/local/sphinx/bin/indexer -c

/usr/local/sphinx/etc/sphinx.conf --all

/usr/local/sphinx/bin/searchd -c

/usr/local/sphinx/etc/sphinx.conf

/usr/local/sphinx/bin/indexer -c

/usr/local/sphinx/etc/sphinx.conf --all --rotate

4.索引合并

例如:将delta合并到main中

indexer --merge main delta

5.索引自动更新

需要使用到脚本

脚本的运行需要权限,利用crontab -e 来编辑

*/30 * * * *  /bin/sh /usr/local/sphinx/etc/build_delta_index.sh > /dev/null 2>&1

30 2 * * * /bin/sh /usr/local/sphinx/etc/build_main_index.sh > /dev/null 2>&1

第一条是表示每30分钟运行 /usr/local/sphinx/etc/下的build_delta_index.sh 脚本,输出重定向。

第二条是表示 每天的 凌晨2:30分运行 /usr/local/sphinx/etc下的build_main_inde.sh 脚本,输出重定向。

时间: 2024-10-09 00:14:18

sphinx mysql 增量索引的相关文章

sphinx配置增量索引和索引合并

配置增量索引 1,配置csft.conf文件. 其中base为父类,scr1和tmp_src1都是他的子类,相应配置如下. searchd{ listen = 9312 listen = 9306:mysql41 read_timeout =5 max_children = 30 max_matches = 1000 seamless_rotate = 0 preopen_indexes = 0 unlink_old = 1 pid_file = /usr/local/coreseek/var/

php定时执行sphinx的增量索引

/** * 每天定时执行的sphinx索引增量更新 * @author guo.jing * 2015-05-08 * @param $indexerArr(执行要更新的索引) */ public function updateCoreseekIndexer($indexerArr = array()) { if ($indexerArr) { foreach ($indexerArr as $indexerName) { shell_exec('sudo -S sh ' . CORESEEK_

sphinx (coreseek)——3、区段查询 与 增量索引实例

首先本文测试数据100多万的域名的wwwtitle 信息  检索数据: 首先建立临时表格: CREATE TABLE `sph_counter` ( `index_id` tinyint(1) NOT NULL, `max_id` int(11) NOT NULL, PRIMARY KEY (`index_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 csft.complex.conf 文件修改配置: #增量数据索引 区段查询 合并为一个文件实现 测试 配置

SPHINX 增量索引 实现近实时更新

一.sphinx增量索引的设置   数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少.例如.原来的数据有几百万条,而新增的只是几千条.这样就可以使用“主索引+增量索引”的模式来实现近乎实时更新的功能. 这个模式实现的基本原理是设置两个数据源和两个索引,为那些基本不更新的数据建立主索引,而对于那些新 增的数据建立增量索引.主索引的更新频率可以设置的长一些(例如设置在每天的午夜进行),而增量索引的更新频率,我们可

sphinx增量索引和主索引来实现索引的实时更新

项目中文章的信息内容因为持续有新增,而文章总量的基数又比较大,所以做搜索的时候,用了主索引+增量索引这种方式来实现索引的实时更新. 实现原理: 1. 新建一张表,记录一下上一次已经创建好索引的最后一条记录的ID 2. 当索引时,然后从数据库中取出所有ID大于上面那个sphinx中的那个ID的数据, 这些就是新的数据,然后创建一个小的索引文件 3. 把上边我们创建的增量索引文件合并到主索引文件上去 4. 把最后一条记录的ID更新到第一步创建的表中 值得注意的两点: 1)当合并索引的时候,只是把增量

sphinx增量索引使用

sphinx在使用过程中如果表的数据量很大,新增加的内容在sphinx索引没有重建之前都是搜索不到的. 这时可以通过建立sphinx增量索引,通过定时更新增量索引,合并主索引的方式,来实现伪实时更新.(使用定时任务,定时更新增量索引,例如10分钟一次) 在利用 Sphinx 做搜索引擎的时候,一般他的索引建立构成有如下几个部分: 固定不变的主索引 增量索引重建 索引数据合并 1.创建增量索引记录表   (记录每次增量索引创建时最大的id,下次从此id往后继续创建增量索引) create tabl

sphinx续5-主索引增量索引和实时索引

原文件地址:http://blog.itpub.net/29806344/viewspace-1400942/ 在数据库数据非常庞大的时候,而且实时有新的数据插入,如果我们不更新索引,新的数据就search不到,全部重新建立索引又很消耗资源,在这种情况下我们就需要使用“主索引+增量索引”的思路来实现实时更新的功能. 因为这时我们有了主索引和增量索引,主索引只需在每天凌晨更新,而增量索引的更新频率设置的很短,这样用户在搜索的时候,可以同时在这两个索引里查找. 首先创建一个计数器: 1.先在mysq

php+中文分词scws+sphinx+mysql打造千万级数据全文搜索

Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.意图为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能.Sphinx可以非常容易的与SQL数据库和脚本语言集成.当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式 的XML数据.Sphinx创建索引的速度为:创建100万条记录的索引只需3-4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒.Sphinx的

Coreseek:部门查询和增量索引代替实时索引

1.行业调查 索引系统需要通过主查询来获取所有的文档信息,一个简单的实现是整个表的数据到内存,但是这可能会导致整个表被锁定,并且使其它操作被阻止(例如:在MyISAM格款式上INSERT操作).同时,会浪费大量的内存来存储查询结果.喜欢它的问题. 为了避免出现这样的情况.CoreSeek/Sphinx支持一种被称为 区段查询的技术. 首先,CoreSeek/Sphinx从数据库中取出文档ID的最小值和最大值.将由最大值和最小值定义自然数区间分成若干份,一次获取数据.建立索引.现举比例如以下: s