coreseek增量索引

CREATE table sph_counter(counter_id int auto_increment key ,max_id int )engine=myisam default charset=utf8;

配置文件csft.conf

#
# Minimal Sphinx configuration sample (clean, simple, functional)
#

source post
{
    type                    = mysql

    sql_host                = 192.168.33.90
    sql_user                = root
    sql_pass                = root
    sql_db                    = test
    sql_port                = 3306    # optional, default is 3306
    sql_sock                                = /tmp/mysql.sock
    sql_query_pre = SET NAMES utf8
    sql_query_pre = SET SESSION query_cache_type=OFF
    sql_query                =         SELECT * from post

    sql_query_info            = SELECT * FROM post WHERE id=$id
}

index post
{
    source                    = post
    path                    = /usr/local/coreseek/var/data/post

    charset_type            = zh_cn.utf-8
    charset_dictpath                = /usr/local/mmseg/etc/
}

indexer
{
    mem_limit                = 32M
}

searchd
{
    port                    = 9312
    log                        = /usr/local/coreseek/var/log/searchd.log
    query_log                = /usr/local/coreseek/var/log/query.log
    read_timeout            = 5
    max_children            = 30
    pid_file                = /usr/local/coreseek/var/log/searchd.pid
    max_matches                = 1000
    seamless_rotate            = 1
    preopen_indexes            = 0
    unlink_old                = 1
}

source documents
{
    type                    = mysql

    sql_host                = 192.168.33.90
    sql_user                = root
    sql_pass                = root
    sql_db                    = spider
    sql_port                = 3306    # optional, default is 3306
    sql_sock                                = /tmp/mysql.sock
    sql_query_pre = SET NAMES utf8
    sql_query_pre = SET SESSION query_cache_type=OFF
    sql_query_pre = replace into sph_counter select 1,max(id) from documents
    sql_query                =         SELECT * from documents where id <= (select max_id from sph_counter where counter_id=1)

    sql_query_info            = SELECT * FROM documents WHERE id=$id
}

source delta : documents
{
    sql_query_pre = set names utf8
    sql_query                =         SELECT * from documents where id > (select max_id from sph_counter where counter_id=1)
}

index documents
{
    source                    = documents
    path                    = /usr/local/coreseek/var/data/documents

    charset_type            = zh_cn.utf-8
    charset_dictpath                = /usr/local/mmseg/etc/
}

index delta : documents
{
    source=delta
    path = /usr/local/coreseek/var/data/delta

}

php代码

./indexer delta --rotate

<?php
header("Content-type:text/html;charset=utf-8");
ini_set("display_errors",1);
error_reporting(E_ALL);
$keyword = $_GET[‘key‘];
//实例化Sphinx对象
$sphinx=new SphinxClient();

//连接sphinx服务器
$sphinx->SetServer("192.168.33.90",9312);
//拆词
//SPH_MATCH_ALL 和 SPH_MATCH_ANY 的区别:
//搜索“LAMP兄弟连”,ALL的结果:完整包含“LAMP兄弟连”才能被搜出来,
//单纯包含“LAMP”或单纯包含“兄弟连”的搜索不出来,没有拆词的功能。
//ANY则可以搜索出来拆开后的词的结果。此处使用ANY
$sphinx->SetMatchMode(SPH_MATCH_ANY);
//通过query方法搜索,“*”表示在所有的索引中搜索,相当于命令行里面的“./indexer --all”
$result=$sphinx->query("$keyword","documents,delta");
//打印搜索的结果
echo "<pre>";
print_r($result);
echo "</pre>";

//上面打印的结果中,数组的 [matches]循环便利,下标就是搜索到的文档的主键Id
//使用PHP中的 array_keys()函数即可拿到下标,即:要查找的文档的主键
//print_r(array_keys($result[‘matches‘]));
//结果如下:Array([0]=>1)

//使用implode或者 join用逗号把查询出来的主键连接起来:
if (!isset($result[‘matches‘])) {
    echo "为搜索到结果";
    exit;
}
$ids = join(‘,‘,array_keys($result[‘matches‘]));
//echo $ids; //6,7

/*连接数据库的操作*/
$p1 = mysql_connect("192.168.33.90","root","root");
mysql_select_db("spider");
mysql_query("set names utf8");
$sql="select * from documents where id in ($ids)";
$rst=mysql_query($sql);

$opts=array(
   "before_match"=>"<font color=‘red‘>",
   "after_match"=>"</font>",
);
while($row=mysql_fetch_assoc($rst)){

    //下面是高亮显示所需,具体可以查手册
    $final=$sphinx->buildExcerpts($row,"documents",$keyword,$opts);

    echo "标题:".$final[‘1‘]."<br>";
    echo $final[2].‘<hr>‘;
}

?>
时间: 2024-08-08 09:26:05

coreseek增量索引的相关文章

sphinx (coreseek)——3、区段查询 与 增量索引实例

首先本文测试数据100多万的域名的wwwtitle 信息  检索数据: 首先建立临时表格: CREATE TABLE `sph_counter` ( `index_id` tinyint(1) NOT NULL, `max_id` int(11) NOT NULL, PRIMARY KEY (`index_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 csft.complex.conf 文件修改配置: #增量数据索引 区段查询 合并为一个文件实现 测试 配置

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

1.行业调查 索引系统需要通过主查询来获取所有的文档信息,一个简单的实现是整个表的数据到内存,但是这可能会导致整个表被锁定,并且使其它操作被阻止(例如:在MyISAM格款式上INSERT操作).同时,会浪费大量的内存来存储查询结果.喜欢它的问题. 为了避免出现这样的情况.CoreSeek/Sphinx支持一种被称为 区段查询的技术. 首先,CoreSeek/Sphinx从数据库中取出文档ID的最小值和最大值.将由最大值和最小值定义自然数区间分成若干份,一次获取数据.建立索引.现举比例如以下: s

Coreseek:区段查询及增量索引代替实时索引

1.区段查询 索引系统需要通过主查询来获取全部的文档信息,一种简单的实现是将整个表的数据读入内存,但是这可能导致整个表被锁定并使得其他操作被阻止(例如:在MyISAM格式上的INSERT操作),同时,将浪费大量内存用于存储查询结果,诸如此类的问题吧. 为了避免出现这种情况,CoreSeek/Sphinx支持一种被称为 区段查询的技术. 首先,CoreSeek/Sphinx从数据库中取出文档ID的最小值和最大值,将由最大值和最小值定义自然数区间分成若干份,一次获取数据,建立索引.现举例如下: sq

sphinx续5-主索引增量索引和实时索引

原文件地址:http://blog.itpub.net/29806344/viewspace-1400942/ 在数据库数据非常庞大的时候,而且实时有新的数据插入,如果我们不更新索引,新的数据就search不到,全部重新建立索引又很消耗资源,在这种情况下我们就需要使用“主索引+增量索引”的思路来实现实时更新的功能. 因为这时我们有了主索引和增量索引,主索引只需在每天凌晨更新,而增量索引的更新频率设置的很短,这样用户在搜索的时候,可以同时在这两个索引里查找. 首先创建一个计数器: 1.先在mysq

sphinx配置增量索引和索引合并

配置增量索引 1,配置csft.conf文件. 其中base为父类,scr1和tmp_src1都是他的子类,相应配置如下. searchd{ listen = 9312 listen = 9306:mysql41 read_timeout =5 max_children = 30 max_matches = 1000 seamless_rotate = 0 preopen_indexes = 0 unlink_old = 1 pid_file = /usr/local/coreseek/var/

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

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

xunsearch增量索引改进版

最近测试了xunserach全文索引程序.xunsearch只有LINUX版,所以想用windows服务器请使用其它全文索引程序. xunsearch本身不像coreseek那样自带增量索引的功能,所以很多从coreseek转过来的朋友很是不习惯.不过xunsearch拥有很 多的API和案例,使用这些程序很容易做出自己的增量索引脚本,只需要把这些脚本添加到LINUX服务器任务里就可以实现增量索引了. 下面是实现增量索引的PHP程序,修改好账号密码,索引sql语句后把这个文件添加到crontab

sphinx增量索引使用

sphinx在使用过程中如果表的数据量很大,新增加的内容在sphinx索引没有重建之前都是搜索不到的. 这时可以通过建立sphinx增量索引,通过定时更新增量索引,合并主索引的方式,来实现伪实时更新.(使用定时任务,定时更新增量索引,例如10分钟一次) 在利用 Sphinx 做搜索引擎的时候,一般他的索引建立构成有如下几个部分: 固定不变的主索引 增量索引重建 索引数据合并 1.创建增量索引记录表   (记录每次增量索引创建时最大的id,下次从此id往后继续创建增量索引) create tabl

sphinx mysql 增量索引

Sphinx mysql 增量索引 一.增量索引的理解: 向一个数据表插入数据时,这些新插入的数据,就是增量了,sphinx是根据索引来查找数据的,如果索引没有更新,新增数据是查不出来的,所以我们要更新主索引,更新增量索引,增量条件的设定就比较重要了. 二.sphinx增量索引的设置:数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能         够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少.例如.         原来的数据有几百万条,而新增的只是