千家信息网

sphinx中怎么更新增量索引

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这期内容当中小编将会给大家带来有关sphinx中怎么更新增量索引,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。实现思路:需要准备:1》建立一张表,记录数据最大id值
千家信息网最后更新 2026年11月01日sphinx中怎么更新增量索引

这期内容当中小编将会给大家带来有关sphinx中怎么更新增量索引,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

实现思路:

需要准备:1》建立一张表,记录数据最大id值。2》两个索引

1.先在MySQL中插入一个计数表和两个索引表

CREATE TABLE sph_counter( counter_id INTEGER PRIMARY KEY NOT NULL, max_doc_id INTEGER NOT NULL);

2.修改sphinx.conf
source main_src{

type = mysql
sql_host = localhost
sql_user = yourusername
sql_pass = yourpassword
sql_db = test //你所用的数据库
sql_port = 3306 //所用端口,默认是3306
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 documents

sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title,content FROM documents WHERE id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
}

#注意:delta_src 中的sql_query_pre的个数需和main_src 对应,否则可能搜索不出相应结果
source delta_src: main_src{
sql_ranged_throttle = 100
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF
sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents WHERE id>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
}

#主索引
index main {
source = main_src
path = /path/to/main
#example: /usr/local/sphinx/var/data/main
charset_type = utf-8 #这个是支持中文必须要设置的
#中文检索路径
chinese_dictionary =/usr/local/mmseg3/etc/
}

#delta可全部复制主索引,然后更改source 和path如下
#增量索引
index delta: main {
source = delta_src
path = /path/to/delta
# example: /usr/local/sphinx/var/data/delta…
#中文检索路径
   chinese_dictionary =/usr/local/mmseg3/etc/
}

其它的配置可都用默认的,如果你设置了分布式检索的索引,那么更改下对应的索引名称即可。

3.重新建立索引:

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf --all --rotate
接下来的问题是如何让增量索引与主索引合并

4.索引合并
合并两个已有索引 有时比 重新索引所有数据有效,虽然,索引合并时,待合并的两个索引都会被读入内存一次,合并后的内容需写入磁盘一次,即,合并100GB和1GB的两个所以,将导致202GB的IO操作
命令原型: indexer --merge DSTINDEX SRCINDEX [--rotate] 将SRCINDEX合并到 DSTINDEX ,所以只有DSTINDEX会改变,如果两个索引都正在提供服务,那么 -- rotate 参数是必须的。例如:将delta合并到main中。
indexer --merge main delta

5.索引自动更新
需要使用到脚本。
建立两个脚本:build_main_index.sh 和 build_delta_index.sh.


build_main_index.sh:
#!/bin/sh
# 停止正在运行的searchd
/usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/mersphinx.conf --stop >> /usr/local/sphinx/var/log/sphinx/searchd.log
#建立主索引
/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/mersphinx.conf main >> /usr/local/sphinx/var/log/sphinx/mainindex.log
#启动searchd守护程序
/usr/local/sphinx/bin/searchd >> /usr/local/sphinx/var/log/sphinx/searchd.log

build_delta_index.sh

#!/bin/sh
#停止sphinx服务,将输出重定向
/usr/local/sphinx/bin/searchd -stop >> /usr/local/sphinx/var/log/sphinx/searchd.log
#重新建立索引delta ,将输出重定向
/usr/local/sphinx/bin/indexer delta -c /usr/local/sphinx/etc/sphinx.conf>>/usr/lcoal/sphinx/var/log/sphinx/deltaindex.log
#将delta合并到main中
/usr/local/sphinx/bin/indexer -merge main delta -c /usr/local/sphinx/etc/sphinx.conf >> /usr/lcoal/sphinx/var/log/sphinx/deltaindex.log
#启动服务
/usr/local/sphinx/bin/searchd >> /usr/local/sphinx/var/log/sphinx/searchd.log

脚本写好后,需要编译 chmod +x filename 这样才能运行。即
chmod +x build_main_index.sh
chmod +x build_delta_index.sh

最后,我们需要脚本能够自动运行,以实现,delta索引每5分钟重新建立,和main索引只在午夜2:30时重新建立。

使用crontab 命令 这有俩个地方可作参考 crontab crontab文件
crontab -e 来编辑 crontab文件,如果之前没有使用,会是一个空的文件。写下下面两条语句
*/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 脚本,输出重定向。
关于前面的 5个值的设置,在上面的crontab文件中有详细的描述。关于重定向的解释,请看最上面的Crontab笔记 ,也有crontab的介绍。

保存好后:重新启动服务
[root@test1 init.d]# service crond stop
[root@test1 init.d]# service crond start
或者
/etc/init.d/crontab start

执行计划任务就可以了,合并索引适合修改数据库少的情况,如果修改数据库数据,则需要再次读取数据库生成主索引,具体根据业务需求制定计划。

上述就是小编为大家分享的sphinx中怎么更新增量索引了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

索引 两个 数据 脚本 运行 增量 更新 数据库 文件 服务 输出 内容 面的 中文 检索 命令 所用 正在 语句 路径 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会毛军 互联网与科技金融数据 科技互联网技术 金融科技创新监管互联网金融 伴你行互联网科技有限公司 互联网 新科技 博兴的互联网电子科技公司 剑昆互联网络科技有限公司临桂 恒生互联网科技指数跳水 燊美集互联网科技有限公司 华夏恒生互联网科技013171 南博望互联网科技有限公司 伊宁互联网科技做什么的 合肥互联网科技公司公章图片 科技互联网的核心竞争力 全球科技与互联网公司市值变化 银川新华互联网科技学校是国营吗 科技互联网公司两年变化 上海互联网科技园景观 伍佰万互联网科技是干嘛的 金融科技还是互联网 互联网科技社 互联网科技公司发展 中国 科技 互联网 齐家互联网科技有限公司 科技类公司包括互联网吗 伊宁互联网科技做什么的 产业互联网科技服务公司 互联网时代高科技布局 玉溪新华互联网科技怎么选
0