sphinx实时更新

1 创建一个表【保存已经创建好的商品的最大ID】-》能够根据这个ID找出哪些商品还没创建索引

每次创建好索引之后把最大的ID存进去,定期取出新的商品创建索引,创建完新的索引之后再把最大的ID更新到这个表

/************sphinx表***********/
drop table if exists p40_sphinx_id;
create table p40__sphinx_id
(
id mediumint unsigned not null default '0' comment '已经建好索引的最后一件商品的ID'
)engine=InnoDB default charset=utf8 comment 'sphinx';

insert into p40_sphinx_id values(0);

 2 修改sphinx的配置文件

 2.1 创建好索引之后把已经建好的最后的商品ID更新到这个表

#MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/
#请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库
#为数据库中的表p40_goods表 为数据源
#源定义
source goods
{
type = mysql

sql_host = localhost
sql_user = root
sql_pass =
sql_db = php40
sql_port = 3306
sql_query_pre = SET NAMES utf8
#主查询:要为哪些数据建索引就使用一条SQL语句把这些数据取出来即可
#要求:第一个字段一定是ID
#现在这个SQL的意思是让SPHINX为所有商品的:goods_name,goods_decs,attr_value这三个字段创建全文索引

sql_query = SELECT a.id,a.goods_name,a.goods_desc,GROUP_CONCAT(b.attr_value) attr_value from p40_goods a LEFT JOIN p40_goods_attr b ON a.id=b.goods_id GROUP BY a.id
#在创建好索引之后把最后一个商品ID更新到这个表
sql_query_post =UODATE P40_sphinx_id set id=(select max(id) from p30_goods where is_on_sale='是')
}

建好之后就把ID更新到表中了

3 修改配置文件后添加的还没有创建索引的数据生成一个增量索引


#后添加的还没有索引的数据 的数据源
source goods_new
{
type = mysql

sql_host = localhost
sql_user = root
sql_pass =
sql_db = php40
sql_port = 3306
sql_query_pre = SET NAMES utf8
#主查询:要为哪些数据建索引就使用一条SQL语句把这些数据取出来即可
#要求:第一个字段一定是ID
#取出后添加的还没有索引的数据
sql_query = SELECT a.id,a.goods_name,a.goods_desc,GROUP_CONCAT(b.attr_value) attr_value from p40_goods a LEFT JOIN p40_goods_attr b ON a.id=b.goods_id where a.is_on_sale='是' AND a.id > (select id from p40_sphinx_id)GROUP BY a.id
#在创建好索引之后把最后一个商品ID更新到这个表
sql_query_post =UODATE P40_sphinx_id set id=(select max(id) from p30_goods where is_on_sale='是')
}
index goods_new
{
source = goods_new #对应的source名称
#生成的索引文件存放的目录
path = D:serverapachehtdocs p p40coreseek-3.2.14-win32vardatagoods_new
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0

#中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
#charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
charset_dictpath = etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
charset_type = zh_cn.utf-8
}

#一个数据源对应一个index
#定义索引文件
index goods
{
source = goods #对应的source名称
#生成的索引文件存放的目录
path = D:serverapachehtdocs p p40coreseek-3.2.14-win32vardatagoods
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0

#中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
#charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
charset_dictpath = etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
charset_type = zh_cn.utf-8
}

4  写一个脚本,

  a 先为增量数据生成索引文件

 b  把 新生成的增量 的索引文件合并到主索引文件

 说明:windows:bat脚本  *.bat

          Linux: shell脚本  只有有可执行的权限就可以执行【chmod+x 文件名】

在 根目录创建文件 以.bat结尾

C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32inindexer.exe -c C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32sphinx.conf goods_del --rotate
C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32inindexer.exe -c C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32sphinx.conf --merge goods goods_del --merge-dst-range is_updated 0 0 --rotate


C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32inindexer.exe -c C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32sphinx.conf goods_new --rotate
C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32inindexer.exe -c C:UserswylDocumentsczsphinxcoreseek-3.2.14-win32sphinx.conf --merge goods goods_new --rotate

配置脚本每隔5分钟自动执行一次

 说明:windows:管理工具->任务计划

       控制面板-》管理工具-》任务计划程序-》点击右侧 -创建基本任务-》填写基本任务名称(自动更新sphinx)-》描述(每隔5分钟自动更新)-》下一步(每天)-》启动程序-》填写任务文件地址-》完成

         linux:crond 进程

世上无难事,只怕有心人......
原文地址:https://www.cnblogs.com/gooderic/p/5816371.html