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:\server\apache\htdocs\tp\tp40\coreseek-3.2.14-win32\var\data\goods_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:\server\apache\htdocs\tp\tp40\coreseek-3.2.14-win32\var\data\goods
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:\Users\wyl\Documents\cz\sphinx\coreseek-3.2.14-win32\bin\indexer.exe -c C:\Users\wyl\Documents\cz\sphinx\coreseek-3.2.14-win32\sphinx.conf goods_del --rotate
C:\Users\wyl\Documents\cz\sphinx\coreseek-3.2.14-win32\bin\indexer.exe -c C:\Users\wyl\Documents\cz\sphinx\coreseek-3.2.14-win32\sphinx.conf --merge goods goods_del --merge-dst-range is_updated 0 0 --rotate

C:\Users\wyl\Documents\cz\sphinx\coreseek-3.2.14-win32\bin\indexer.exe -c C:\Users\wyl\Documents\cz\sphinx\coreseek-3.2.14-win32\sphinx.conf goods_new --rotate
C:\Users\wyl\Documents\cz\sphinx\coreseek-3.2.14-win32\bin\indexer.exe -c C:\Users\wyl\Documents\cz\sphinx\coreseek-3.2.14-win32\sphinx.conf --merge goods goods_new --rotate

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

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

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

linux:crond 进程

时间: 2024-10-12 18:10:57

sphinx实时更新的相关文章

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

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

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

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

【性能优化】懒、懒加载、懒动画 --- 基于window滚动事件来实时更新DOM的视图状态,以表明是否在规定的可视区,并作有change回调

/* * * 扩展jq原型: 懒.懒加载.懒动画 * --- 基于window滚动事件来实时更新DOM的视图状态,以表明是否在规定的可视区,并作有change回调 * * $jq.viewChange( {top:100,bottom:100,change:function(status){}} ) --- status: 'in'/'out' * $jq.viewChange('off') * * $jq[n].viewChange.status = 'in'/'out' ----- 状态为'

C语言实现文件实时更新

一.简介 在linux或者unix操作系统中在系统引导的时候会开启很多服务,这些服务就叫做守护进程. 守护进程脱离了终端并且在后台运行:守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断. 本文介绍使用守护进程实现文件实时更新的方法步骤. 二.源码 文件1:Realtime_Update.c #include <stdio.h> #include <stdlib.h> #include <unistd.h>

关于unity3D异步加载进度条实时更新的方法

在其他地方看到所谓的实时更新就是 让slider的当前value等于异步对象的进度值而已,太坑了,这个正常来理解的意思不就是从0开始递增到100嘛,不管怎么我已经完成这个功能了,代码贴上,以免日后忘记, 找到这篇博客的朋友算你好运,直接搬走吧(NGUI版)~ 需要重点提醒的:异步对象AsyncOperation的值到90%后不会再增长,剩下的10%要让AsyncOperation.allowSceneActivation(意思是场景加载完毕后自动跳转场景)为true时才会自动完成~ 完整代码下方

基于server broker 的数据实时更新

Service Broker介绍:SQL Server Service Broker 为消息和队列应用程序提供 SQL Server 数据库引擎本机支持.这使开发人员可以轻松地创建使用数据库引擎组件在完全不同的数据库之间进行通信的复杂应用程序.开发人员可以使用 Service Broker 轻松生成可靠的分布式应用程序.使用 Service Broker 的应用程序开发人员无需编写复杂的内部通信和消息,即可跨多个数据库分发数据工作负荷.因为 Service Broker 会处理会话上下文中的通信

8086汇编学习小结———实时更新

初学IBM-PC 8086,对INT指令不是很理解.现从网上总计如下: 表:DOS系统功能调INT 21H AH 功能 调用参数 返回参数 00 程序终止(同INT 20H) CS=程序段前缀 01 键盘输入并回显 AL=输入字符 02 显示输出 DL=输出字符 03 异步通迅输入 AL=输入数据 04 异步通迅输出 DL=输出数据 05 打印机输出 DL=输出字符 06 直接控制台I/O DL=FF(输入)DL=字符(输出) AL=输入字符 07 键盘输入(无回显) AL=输入字符 08 键盘

使用php+swoole对client数据实时更新(二) (转)

上一篇提到了swoole的基本使用,现在通过几行基本的语句来实现比较复杂的逻辑操作: 先说一下业务场景.我们目前的大多数应用都是以服务端+接口+客户端的方式去协调工作的,这样的好处在于不论是处在何种终端的情况下,都可以完美的和服务端兼容.这样就轻松实现了MVC各个部分的真正解耦.但是提高程序的友好性还是有很多路要走,其中一个大家都会遇到的就是数据实时更新的问题.比如一个用户在手机上做了添加操作,这时候其他的终端也应该及时显示数据的变化情况.这个对于手机来说还算好办,因为现在的各种推送服务完全可以

sphinx实时索引和高亮显示

sphinx实时索引和高亮显示 时间 2014-06-25 14:50:58  linux技术分享 -欧阳博客 原文  http://www.wantlearn.net/825 主题 Sphinx数据库 上次介绍了coreseek与sphinx的区别,并详细记录了安装coreseek文档说明,以及给php加上sphinx模块,详细内容请参考我写的coreseek详解这篇文档,这次主要介绍sphinx是如何做到实时索引.首先配置进入到coreseek配置文件目录,对原始配置文件进行配制,这里介略说