sphinx(八)sphinx增量索引

简介: 主索引的更新频率可以设置的长一些(例如设置在每天的凌晨进行),而增量索引的更新频率,我们可以将时间设置的很短(几分钟左右),这样在用户搜索的时候,我们可以同时查询这两个索引的数据。使用“主索引+增量索引”方法有个简单的实现,在数据库中增加一个计数表,记录每次重新构建主索引时,被索引表的最后一个数据id,这样在增量索引时只需要索引这个id以后的数据即可,每次重新构建主索引时都更新这个表。

QQ图片20220425163846.jpg

我服务器上部署的sphinx-for-chinese全文搜索引擎主要是做博客的搜索,数据量不大,因此,这里更新索引每次都是更新所有。


但是相对于大数据量来说,每次都全部更新的话,速度可能会比较慢。


关于这个问题,sphinx为我们提供了增量索引这个功能。


也就是说,我们每次为新增加的数据增加索引,然后和之前的索引再进行合并,这个相对来讲速度比较快。


这个模式实现的基本原理是设置两个数据源和两个索引,为那些基本不更新的数据建立主索引,而对于那些新 增的数据建立增量索引。


主索引的更新频率可以设置的长一些(例如设置在每天的凌晨进行),而增量索引的更新频率,我们可以将时间设置的很短(几分钟左右),这样在用户搜索的时候,我们可以同时查询这两个索引的数据。


使用“主索引+增量索引”方法有个简单的实现,在数据库中增加一个计数表,记录每次重新构建主索引时,被索引表的最后一个数据id,这样在增量索引时只需要索引这个id以后的数据即可,每次重新构建主索引时都更新这个表。


1:创建sphinx索引表,用于记录那些数据已经被创建索引


create table sphinx
(
    max_id int unsigned not null default 0
)
#该表作用:用于记录article表哪些数据已被创建索引,哪些数据未被创建索引
#获取未创建索引数据:select * from article where id >  sphinx表记录的数字


2:修改配置文件(增加新索引)


将如下代码追加至你的sphinx.conf中


# 增量索引数据源
source src1_add
{
    # 下面是sql数据库特有的端口,用户名,密码,数据库名等。
    type                    = mysql
    sql_host                = localhost
    sql_user                = mysql
    sql_pass                = xxxxx
    sql_db                  = xxxxx
    sql_port                = 3306
    sql_query_pre           = SET NAMES utf8
    # (SELECT MAX(max_id) FROM sphinx)  目的,规避重复创建索引
    sql_query = SELECT p1.*,p2.content FROM article p1 LEFT JOIN article_info p2 ON p1.id = p2.article_id WHERE p1.id > (SELECT MAX(max_id) FROM sphinx)
    # 建完索引这后 ,把最后一条记录的id存到sphinx表中
    # 在主查询(sql_query)之后执行的SQL
    sql_query_post = UPDATE sphinx SET max_id = (SELECT MAX(id) FROM article)
}
# 增量索引数据索引
index src1_add
{
    # 对应的source数据来源名称
source            = src1_add
# 索引存放位置
    path              = /usr/xxx/xxx/xxx/data/src1_add
    docinfo           = extern  
    mlock             = 0
    morphology        = none
    min_word_len      = 1
    html_strip        = 0
    charset_type      = zh_cn.utf-8
}


3:使用增量索引


(1):重启sphinx服务


使用如下命令:


/usr/local/sphinxforchinese/bin/indexer -c /usr/local/sphinxforchinese/etc/sphinx.conf  src1_add
#用于给test1表未创建索引数据增加索引
/usr/local/sphinxforchinese/bin/indexer -c /usr/local/sphinxforchinese/etc/sphinx.conf --merge test1 src1_add --rotate
#将src1_add索引合并到test1索引中


以上大概就是sphinx增量索引的使用。不是很麻烦。



目录
相关文章
反诈中心拦截网站域名措施与申诉方法
近几年随着互联网不断发展,也伴随着一些网络诈骗的问题,反诈中心打击违规诈骗网站、诈骗APP、标记诈骗手机号,这一些措施取得一定的效果,从去年开始严厉审核一些违规网站,也不排除于批量审核会出现一定的偏差,可能会出现审核不到位的情况,这里我表达自己的一些看法。
3929 0
反诈中心拦截网站域名措施与申诉方法
|
UED 开发者
通义千问新增文档解析功能,可处理超万页文档
【2月更文挑战第25天】通义千问新增文档解析功能,可处理超万页文档
818 6
通义千问新增文档解析功能,可处理超万页文档
|
安全 Java 测试技术
婚恋交友网站 毕业设计 JAVA+Vue+SpringBoot+MySQL(一)
婚恋交友网站 毕业设计 JAVA+Vue+SpringBoot+MySQL
587 0
|
8月前
|
传感器 人工智能 安全
《把握人机共融设计要点,重塑人机协作格局》
机器人已融入生活与工作的方方面面,从医疗到物流,其身影无处不在。实现人机共融,关键在于深度融合人与机器的优势,确保安全、高效、自然的交互。通过碰撞检测、安全距离设定和紧急制动系统保障安全;借助语音、手势、眼神交互实现自然沟通;智能协作发挥人机各自特长;个性化定制满足不同需求;情感交互让机器人更具“温度”。这一跨学科领域涉及机械、电子、AI与心理学,是未来机器人发展的核心方向。
281 0
|
存储 消息中间件 Java
快速了解分布式跟踪系统 Zipkin
【8月更文挑战第8天】快速了解分布式跟踪系统 Zipkin
399 3
快速了解分布式跟踪系统 Zipkin
|
供应链 搜索推荐 数据挖掘
API接口对电商的深远影响
在数字化商业时代,电子商务竞争激烈,创新和效率成为企业成功的关键。API(应用程序编程接口)在电商领域的应用正逐渐改变企业的运营模式,带来诸多机遇和显著收益。API 接口通过数据共享和功能集成,实现了多平台商品同步、个性化推荐、订单管理、支付结算、物流跟踪等,提升了运营效率,增强了用户体验,拓展了市场覆盖,促进了数据驱动的决策。未来,API 在电商领域的应用将更加广泛,助力企业在竞争中保持领先。
324 4
|
传感器 智能硬件
STM32cubemx配置驱动DHT11模块
STM32cubemx配置驱动DHT11模块
551 0
|
存储
fastdfs源码阅读:上传和下载(文件客户端逻辑)
fastdfs源码阅读:上传和下载(文件客户端逻辑)
501 0
|
SQL 关系型数据库 数据库
PostgreSQL如何实现跨数据库访问?
PostgreSQL数据库和Oracle类似,在逻辑上是相互独立的,如果要访问其他数据库,需要做跨库操作,Postgres本身提供了一些扩展,比如dblink,pgsql_fdw等能够实现跨数据库访问。
10195 0