sphinx mysql实时搜素_【原创】sphinx实时索引的配置及实际应用、实例

本文详细介绍了如何使用CoreSeek快速搭建Sphinx中文分词搜索引擎的实时索引,包括配置实时索引文件、启动服务,并提供了PHP代码示例,展示了如何在插入、删除或修改数据时同步更新实时索引,以及如何进行实时索引查询。
摘要由CSDN通过智能技术生成

用coreseek快速搭建sphinx中文分词搜索引擎 的文章链接为: http://blog.zhuyin.org/789.html 本文假设您已经建立好coreseek的普通索引应用了 下面基于这个基础,谈谈如何实现实时索引! #建立实时索引的配置文件 vi /usr/local/coreseek/etc/sphinx_index_r

用coreseek快速搭建sphinx中文分词搜索引擎 的文章链接为:

http://blog.zhuyin.org/789.html

本文假设您已经建立好coreseek的普通索引应用了

下面基于这个基础,谈谈如何实现实时索引!

#建立实时索引的配置文件

vi /usr/local/coreseek/etc/sphinx_index_rt.conf

index rtindex

{

type = rt

path = /dev/shm/rtindex

docinfo = extern

mlock = 0

morphology = none

min_word_len = 1

html_strip = 0

charset_dictpath = /usr/local/mmseg3/etc/

charset_type = zh_cn.utf-8

rt_field = title

rt_field = content

rt_attr_uint = groupid

rt_attr_bigint = biguid

rt_attr_float = score

rt_attr_timestamp = date_added

rt_attr_string = author

rt_attr_string = title

rt_attr_string = content

rt_mem_limit = 512M

}

searchd

{

workers = threads

listen = 9312

listen = 127.0.0.1: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/log/searchd_rtindex.pid

log = /usr/local/coreseek/var/log/searchd_rtindex.log

query_log = /usr/local/coreseek/var/log/query_rtindex.log

binlog_path = /usr/local/coreseek/var/log/rtindex/

binlog_flush = 2

binlog_max_log_size = 16M

}

上面的属性就不一一说了,只要留意

rt_field

rt_attr_uint

rt_attr_bigint

rt_attr_string

……

之类的就好,因为这些属性关系到您要索引的字段以及得到的结果是否包含这些字段的内容!

当然

rt_mem_limit

binlog_max_log_size

pid_file

之类的,请根据自己的实际环境设置好。

配置好上面的配置后

#实时索引不需要indexer!!,也就是不需要下面两句的命令了

#/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx_index_rt.conf –all

#/usr/local/coreseek/bin/search -c etc/csft.conf -a Twittter

#直接开启searchd

/usr/local/coreseek/bin/searchd --config /usr/local/coreseek/etc/sphinx_index_rt.conf

#创建管理命令

echo '/usr/local/coreseek/bin/searchd --config /usr/local/coreseek/etc/sphinx_index_rt.conf' > /root/sphinx_start

echo 'killall searchd' > /root/sphinx_stop

echo 'killall searchd

sleep 4

/usr/local/coreseek/bin/searchd --config /usr/local/coreseek/etc/sphinx_index_rt.conf' > /root/sphinx_restart

chmod 755 /root/sphinx*

这个时候您

ps awx|grep searchd

应该有以下的进程在跑了:

b8d4bbcc71b2ce20d79562baf97e7b78.png

到这里表明实时索引服务已经启动,下面就是自己写程序往数据源添加内容了。

在此要特别说明一下:

sphinx的实时索引配置本身并不需要数据源(source),它的数据是要通过程序利用

localhost:9306:mysql41协议的方式,往里面加。

下面就写一段实际应用的php代码吧:

比如我有一个文章表 news 需要做实时索引

那在插入、删除、修改 news表的内容的同时,您得写一段类似下面的代码来对实时索引的内容进行更改:

//插入到news表的操作完成后

//连接到实时索引,使用MySQL41协议

$link = mysql_connect('127.0.0.1:9306') or die('connect bad');

if (!$link) {

echo mysql_errno() . ": " . mysql_error(). "\n";

exit;

}

//$id应该是前面插入news表的时候返回的news_id。

$sql="INSERT INTO rtindex(id,title,content,groupid,biguid,score,date_added,author) VALUES ( $id, '$title', '$content', $groupid,$biguid,$score,$date_added,'$author')";

mysql_query($sql);

if(mysql_errno())

{

echo mysql_errno() . ": " . mysql_error(). "\n";

echo $sql;

exit;

}

在做实时索引查询的时候,php代码如下

//连接到实时索引,使用MySQL41协议

$link = mysql_connect('127.0.0.1:9306') or die('connect bad');

if (!$link) {

echo mysql_errno() . ": " . mysql_error(). "\n";

exit;

}

$query=mysql_query("SELECT * FROM rtindex WHERE MATCH('你好吗??')");

if(mysql_errno())

{

echo mysql_errno() . ": " . mysql_error(). "\n";

exit;

}

while($row=mysql_fetch_array($query,MYSQL_ASSOC))

{

print_r($row);

}

die;

当然,上面的php代码都没经过优化,只是很粗糙地完成了这个过程,实际的代码可能会封装成类/方法等等。

关于实时索引的建立及应用,到此结束。

如果大家有不同的建议,欢迎留言,大家一起交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值