数据库中的数据很大,然后我有些新的数据后来加入到数据库中,也希望能够检索到,全部重新建立索引很消耗资源,这样需要用到“主索引+增量索引”的思路来解决,这个模式实现的基本原理是设置两个数据源和两个索引。

1、创建一个计数器

一个简单的实现是,在数据库中增加一个计数表,记录将文档集分为两个部分的文档 ID,每次重新构建主索引时,更新这个表

先在 mysql 中插入一个计数表

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

2、再次修改配置文件

主数据源,继承数据源,主索引,继承索引。(继承索引也就是增量索引)。

主数据源里面:我们需要把欲查询语句改成下面的语句:

Vi /usr/local/coreseek/etc/csft.conf

Source main{

把sql_query_pre的改成下面的语句

sql_query_pre = REPLACE INTO sph_counter SELECT 1, IFNULL(MAX(id),0) FROM post

sql_query=    \

SELECT id,title, content FROM post \

WHERE id<=(SELECT max_doc_id FROM sph_counter WHERE counter_id=1)

}

继承数据源:

source delta : main

{

sql_query_pre = SET NAMES utf8

sql_query

= \

SELECT id,title, content FROM post \

WHERE id>(SELECT max_doc_id FROM sph_counter WHERE counter_id=1)

}

主索引:

把名字该成想对应的

Index main {

source  = main

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

}

继承索引(也是增量索引)

index delta:main

{

source= delta

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

}

剩下的基本不用改变

注意:如果你增量索引的 source 配置中只有 id,content 三项

而主索引的 source 配置中有 id, title,content 四项,合并的时候会报属性数量不匹配,如:

Delta:sql_query = SELECT id, title,content FROM post

Main:sql_query=SELECT id,title,date,content FROM post

3、测试增量索引+主索引

如果想测试增量索引是否成功,往数据库表中插入数据,查找是否能够检索到,这个时候检索应该为空,然后,单独重建 增量索引

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf  delta

查看是否将新的记录进行了索引,如果成功

此时,再用/usr/local/coreseek/bin/search 工具来检索,能够看到,在主索引中检索到的结果为 0,而在增量中检索到结果。当然,前提条件是,检索的词,只在后来插入的数据中存在

4、实时更新索引

我们需要建立两个脚本,还要用到计划任务

建立一个主索引和增量索引的脚本

main.sh  delta.sh

在增量索引中写下delta.sh

#!/bin/bash

#delta.sh

/usr/local/coreseek/bin/indexer delta –rotate >> /usr/local/coreseek/var/log/delta.log

主索引中写下:main.sh意思就是合并索引

#!/bin/bash

#main.sh

/usr/local/coreseek/bin/indexer main –rotate >> /usr/local/coreseek/var/log/merge.log

最后,我们需要脚本能够自动运行,以实现增量索引每5分钟重新建立,和主索引只在凌晨2:30时重新建立.

脚本写好了,我们需要建立计划任务

crontab -e

*/10 * * * *  /usr/local/coreseek/etc/delta.sh

30 2 * * *  /usr/local/coreseek/etc/main.sh

第一条是表示每5分钟运行

第二条是表示每天的凌晨2:30分运行

脚本权限:

chmod a+x delta.sh

chmod a+x main.sh

要验证的话,我们可以查看日志文件

分布式索引

分布式是为了改善查询延迟问题和提高多服务器、多 CPU 或多核环境下的吞吐率,对于大量数据(即十亿级的记录数和 TB 级的文本量)上的搜索应用来说是很关键的

分布式思想:对数据进行水平分区(HP,Horizontally partition),然后并行处理,

当searchd收到一个对分布式索引的查询时,它做如下操作

1. 连接到远程代理.

2. 执行查询.

3. 对本地索引进行查询.

4. 接收来自远程代理的搜索结果.

5. 将所有结果合并,删除重复项.

6. 将合并后的结果返回给客户端.

index dist

{

type = distributed

local = chunk1

agent = localhost:9312:chunk2          本地

agent = 192.168.100.2:9312:chunk3    远程

agent = 192.168.100.3:9312:chunk4    远程

}

Chunck为索引名称

Sphinx实时索引的更多相关文章

  1. sphinx实时索引和高亮显示

    sphinx实时索引和高亮显示 时间 2014-06-25 14:50:58  linux技术分享 -欧阳博客 原文  http://www.wantlearn.net/825 主题 Sphinx数据 ...

  2. Sphinx 实时索引

    index rt { type = rt rt_mem_limit = 512M path = /usr/local/sphinx/data/rt rt_field = title rt_field ...

  3. sphinx 增量索引 实现近实时更新

    一.sphinx增量索引的设置   数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少.例如.原来的数据有几百万条 ...

  4. Sphinx 增量索引更新

    是基于PHP API调用,而不是基于sphinxSE.现在看来sphinxSE比API调用更简单的多,因为之前没有想过sphinxSE,现在先把API的弄明白.涉及到的:sphinx 数据源的设置,简 ...

  5. sphinx 增量索引 及时更新、sphinx indexer索引合成时去旧和过滤办法(转)

    一.sphinx增量索引的设置    数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少.例如.原来的数据有几百万 ...

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

    1.行业调查 索引系统需要通过主查询来获取所有的文档信息,一个简单的实现是整个表的数据到内存,但是这可能会导致整个表被锁定,并且使其它操作被阻止(例如:在MyISAM格款式上INSERT操作).同时, ...

  7. Coreseek:区段查询及增量索引取代实时索引

    1.区段查询 索引系统须要通过主查询来获取所有的文档信息,一种简单的实现是将整个表的数据读入内存,可是这可能导致整个表被锁定并使得其它操作被阻止(比如:在MyISAM格式上的INSERT操作),同一时 ...

  8. sphinx增量索引使用

    sphinx在使用过程中如果表的数据量很大,新增加的内容在sphinx索引没有重建之前都是搜索不到的. 这时可以通过建立sphinx增量索引,通过定时更新增量索引,合并主索引的方式,来实现伪实时更新. ...

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

    项目中文章的信息内容因为持续有新增,而文章总量的基数又比较大,所以做搜索的时候,用了主索引+增量索引这种方式来实现索引的实时更新. 实现原理: 1. 新建一张表,记录一下上一次已经创建好索引的最后一条 ...

随机推荐

  1. POJ 3250 Bad Hair Day【单调栈入门】

    Bad Hair Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24112   Accepted: 8208 Des ...

  2. tp剩余未验证内容-4

    关于pop-up被blocked的问题 首先 这个pop-up的功能叫 popup blocker , 它是浏览器(包括ff, chrome等) 自身 所内置 的一个功能, 不是 安装的外部 插件/或 ...

  3. 差分数组|小a的轰炸游戏-牛客317E

    小a的轰炸游戏 题目链接:https://ac.nowcoder.com/acm/contest/317/E 思路  这题考查的是对差分数组原理和前缀和的理解. 四个数组分别记录朝着四个方向下放的个数 ...

  4. c 语言中宏定义和定义全局变量的区别

    宏定义和定义全局变量的区别: 1 作用时间不同. 宏定义在编译期间即会使用并替换,而全局变量要到运行时才可以. 2 本质类型不同. 宏定义的只是一段字符,在编译的时候被替换到引用的位置.在运行中是没有 ...

  5. LuoguP1072 Hankson的趣味题

    题目 原题链接 题解 题意即为 \[ gcd(x,a0)=a1 \\ lcm(x,b0)=b1 \\ 求x个数 \] 根据\(lcm\)的求解方式\(lcm(a,b)=a*b/gcd(a,b)\)可以 ...

  6. 题解——ATCoder AtCoder Grand Contest 017 B - Moderate Differences(数学,构造)

    题面 B - Moderate Differences Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Stat ...

  7. delimiters 插值 选项

    delimiters差值选项vue默认是{{}},这个选项可以把这个差值形式进行改变,这里讲,默认插值改成${} html <div id="app"> <div ...

  8. facebook api之Business Manager API

    Business-scoped Users - The new user is tied to a particular business and has permissions scoped to ...

  9. 2.在Jenkins中配置及执行 maven + selenium + testng项目

    1. 在Jenkins中配置Maven与Git 1)在系统管理>管理插件>可选插件 页面分别下载Git plugin 与 Maven Integration plugin插件,安装完成后再 ...

  10. JavaScript重点知识(二)

    三.JS的API 3.1知识点(DOM) 1)DOM本质 将html结构化成浏览器和JS可识别可操作的东西 2)变量计算---强制类型转换 获取DOM节点 Attribute(对html标签属性的修改 ...