Linux下PHP+MySQL+CoreSeek中文检索引擎配置
说明:
操作系统:CentOS 5.X
服务器IP地址:192.168.21.127
Web环境:Nginx+PHP+MySQL
站点根目录:/usr/local/nginx/html
目的:安装coreseek中文检索引擎,配置MySQL数据库访问接口,使用PHP程序实现中文检索。
CoreSeek官方网站:
http://www.coreseek.cn/
http://www.coreseek.cn/products/=%22/products-install/step_by_step/
http://www.coreseek.cn/products-install/mysql/
具体操作:
一、安装编译工具
yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel
二 、安装CoreSeek
1、下载CoreSeek
下载地址:http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz
上传coreseek-3.2.14.tar.gz到/usr/local/src目录
wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz
2、安装mmseg
cd /usr/local/src
tar zxvf coreseek-3.2.14.tar.gz #解压
cd coreseek-3.2.14
cd mmseg-3.2.14
./bootstrap #输出的warning信息可以忽略,如果出现error则需要解决
./configure --prefix=/usr/local/mmseg3 #配置
make #编译
make install #安装
3、安装CoreSeek
cd /usr/local/src
cd coreseek-3.2.14
cd csft-3.2.14
sh buildconf.sh #输出的warning信息可以忽略,如果出现error则需要解决
./configure --prefix=/usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql #配置
make #编译
make install #安装
三、测试mmseg分词、coreseek搜索、MySQL数据源
cd /usr/local/src
cd coreseek-3.2.14
cd testpack
cat /usr/local/src/coreseek-3.2.14/testpack/var/test/test.xml #此时应该正确显示中文,如下图所示
/usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc /usr/local/src/coreseek-3.2.14/testpack/var/test/test.xml
系统运维 www.osyunwei.com 温馨提醒:qihang01原创内容 版权所有,转载请注明出处及原文链接
/usr/local/coreseek/bin/indexer -c /usr/local/src/coreseek-3.2.14/testpack/etc/csft.conf --all
/usr/local/coreseek/bin/search -c /usr/local/src/coreseek-3.2.14/testpack/etc/csft.conf 网络搜索
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx-min.conf.dist
/usr/local/coreseek/bin/indexer -c /usr/local/src/coreseek-3.2.14/testpack/etc/csft.conf --all --rotate #启动服务,更新索引
测试MySQL数据源:
测试数据库下载:http://www.coreseek.cn/uploads/csft/test/documents.sql
上传documents.sql到/usr/local/src目录
导入数据库到MySQL从服务器:
mysql -u root -p #进入MySQL控制台
create database documents; #创建数据库
use documents #进入数据库
source /usr/local/src/documents.sql #导入备份文件到数据库
exit #退出MySQL控制台
cp /usr/local/src/coreseek-3.2.14/testpack/etc/csft_mysql.conf /usr/local/coreseek/etc/csft_mysql.conf #拷贝MySQL数据源配置文件
ln -s /usr/local/coreseek/etc/csft_mysql.conf /etc/csft_mysql.conf #添加软连接
vi /etc/csft_mysql.conf #编辑,修改
###############################################################################
#MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/
#请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库
#源定义
source mysql
{
type = mysql
sql_host = localhost
sql_user = root #账号
sql_pass =123456 #密码
sql_db = documents #MySQL数据库名称
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents
#sql_query第一列id需为整数
#title、content作为字符串/文本字段,被全文索引
sql_attr_uint = group_id #从SQL读取到的值必须为整数
sql_attr_timestamp = date_added #从SQL读取到的值必须为整数,作为时间属性
sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集
sql_query_info = SELECT * FROM documents WHERE id=$id #命令行查询时,从数据库读取原始数据信息
}
#index定义
index mysql
{
source = mysql #对应的source名称
path = /usr/local/coreseek/var/data/mysql #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
#中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
#charset_dictpath = etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
charset_type = zh_cn.utf-8
}
#全局index定义
indexer
{
mem_limit = 1024M #内存使用限制
max_iops = 100
max_iosize = 0
}
#searchd服务定义
searchd
{
listen = 9312
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_mysql.pid #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
log =/usr/local/coreseek/var/log/searchd_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
query_log =/usr/local/coreseek/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
}
#################################################################################
:wq! #保存退出
cp /usr/local/src/coreseek-3.2.14/testpack/api/sphinxapi.php /usr/local/nginx/html/sphinxapi.php #拷贝测试文件到web站点根目录下
cp /usr/local/src/coreseek-3.2.14/testpack/api/test_coreseek.php /usr/local/nginx/html/test_coreseek.php #拷贝测试文件到web站点根目录下
cd /usr/local/nginx/html #进入web站点根目录
vi test.php #编辑,添加以下代码
#################################################################################
<?php
//注意文件的编码格式需要保存为为UTF-8格式
require ( "sphinxapi.php" );
$cl = new SphinxClient ();
$cl->SetServer ( '127.0.0.1', 9312);
//以下设置用于返回数组形式的结果
$cl->SetArrayResult ( true );
/*
//ID的过滤
$cl->SetIDRange(3,4);
//sql_attr_uint等类型的属性字段,需要使用setFilter过滤,类似SQL的WHERE group_id=2
$cl->setFilter('group_id',array(2));
//sql_attr_uint等类型的属性字段,也可以设置过滤范围,类似SQL的WHERE group_id2>=6 AND group_id2<=8
$cl->SetFilterRange('group_id2',6,8);
*/
//取从头开始的前20条数据,0,20类似SQl语句的LIMIT 0,20
$cl->SetLimits(0,20);
//在做索引时,没有进行 sql_attr_类型 设置的字段,可以作为“搜索字符串”,进行全文搜索
$res = $cl->Query ( '搜索字符串', "*" ); //"*"表示在所有索引里面同时搜索,"索引名称(例如test或者test,test2)"则表示搜索指定的
//如果需要搜索指定全文字段的内容,可以使用扩展匹配模式:
//$cl->SetMatchMode(SPH_MATCH_EXTENDED);
//$res=cl->Query( '@title (测试)' , "*");
//$res=cl->Query( '@title (测试) @content ('网络')' , "*");
echo '<pre>';
print_r($res['matches']);
print_r($res);
print_r($cl->GetLastError());
print_r($cl->GetLastWarning());
echo '</pre>';
?>
###############################################################################
:wq! #保存退出
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate #建立索引服务
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf --console #启动测试模式
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf #后台启动模式
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf --stop #停止
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate #更新索引服务
打开浏览器测试:如下图所示
http://192.168.21.127/test.php
http://192.168.21.127/test_coreseek.php
四、设置coreseek开机自动后台运行
vi /etc/rc.d/rc.local #编辑,在最后一行添加下面的代码
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf
:wq! #保存退出
vi /usr/local/coreseek/bin/build_index.sh #添加以下更新索引脚本
#!/bin/sh
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate
:wq! #保存退出
chmod +x /usr/local/coreseek/bin/build_index.sh #添加脚本执行权限
vi /etc/crontab #编辑,在最后一行添加以下代码
*/30 * * * * root /usr/local/coreseek/bin/build_index.sh #每隔30分钟执行一次
:wq! #保存退出
service crond reload #重新加载任务计划
php页面调用 远程调用 记得把服务器9312端口允许访问
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=gbk" />
<title>coreseek中文全文搜索在php程序中的应用</title>
</head>
<body>
<h3><font color="blue">coreseek全文搜索在php程序中应用</font></h3>
<form action="test2.php" method="post">
输入搜索的关键词:<input type="text" name="keyword" size="30" <?php echo $_POST['keyword'];?> />
<input type="submit" name="sub" value="搜索" />
</form>
<hr />
<?php
echo "<pre />";
#引入接口文件,其实你懂的,就是一个类
require_once('sphinxapi.php');
if(isset($_POST['sub']) && $_POST['keyword'] != ''){
$keyword = trim($_POST['keyword']); //接收关键词
$sph = new SphinxClient(); //实例化 sphinx 对象
$sph->SetServer('23.27.157.36',9312); //连接9312端口
$sph->SetMatchMode(SPH_MATCH_ALL); //设置匹配方式
$sph->SetSortMode(SPH_SORT_RELEVANCE); //查询结果根据相似度排序
$sph->SetArrayResult(false); //设置结果返回格式,true以数组,false以PHP hash格式返回,默认为false
/**
*关键词高亮显示,以及产生文本摘要
*BuildExcerpts($docs, $index, $words, $opts=array())
*参数(包含文档内容的数组,索引名,关键词,高亮参数)
**/
$opts = array(
"before_match" => "<font color='red'>", //关键词高亮开始的html代码
"after_match" => "</font>", //关键词高亮结束的html代码
"limit" => 100, //摘要最多包含的符号数,默认256
"around" => 3, //每个关键词左右选取的词的数目,默认为5
);
$result = $sph->Query($keyword,'mysql');//执行搜索操作,参数(关键词,[索引名]) if(!array_key_exists('matches', $result)){ //如果没有匹配结果,直接返回
echo "搜索无结果";
return;
}
$arr_key = array_keys($result['matches']);
//获取到匹配文章的ID
$ids = implode(',',$arr_key); //数组转成字符串
echo "<font color='blue'>按相关性排序id(结果数:",count($arr_key),"):</font>",$ids,"<hr />"; //连接数据库
$conn=@mysql_connect('localhost','root','root') or die("db info error!");
$db=@mysql_select_db('zhi11416316',$conn) or die('dbname error');
mysql_query("SET NAMES UTF8"); //设定编码方式为UTF8
$query = "select id,product_name from products where id in(".$ids.")";
$res=mysql_query($query);
echo "<table border='1' bordercolor='green' cellspacing='0'><tr><th>文章id</th><th>标题</th></tr>";
while($row=mysql_fetch_array($res)){
// $result = $sph->BuildExcerpts($row, 'dede', $keyword, $opts);
echo "<tr><td>",$row[0],"</td><td>",$row[1],"</td></tr>";
}
//搜索词没有高亮显示
/* while($row = $res->fetch_assoc()){
echo "<tr><td>",$row['typeid'],"</td><td>",$row['id'],"</td><td>",$row['title'],"</td><td>",$row['description'],"</td></tr>";
} */ //使用高亮显示代码
// while($row = $res->fetch_assoc()){
// $result = $sph->BuildExcerpts($row, 'dede', $keyword, $opts);
// if(!$res){
// die("Error:".$sph->GetLastError());
// }
// echo "<tr><td>",$result[0],"</td><td>",$result[1],"</td><td>",iconv('utf-8','gbk',$result[2]),"</td><td>",iconv('utf-8','gbk',$result[3]),"</td></tr>";
// } echo "</table>";
}
?>
至此,Linux下PHP+MySQL+CoreSeek中文检索引擎配置完成。
转载于 http://www.osyunwei.com/archives/7496.html
Linux下PHP+MySQL+CoreSeek中文检索引擎配置的更多相关文章
- win7下PHP+MySQL+CoreSeek中文检索引擎配置
1.Windows下的coreseek安装测试 (64位win7旗舰版) 官方参考:http://www.coreseek.cn/products-install/install_on_windows ...
- sphinx中文版Coreseek中文检索引擎安装和使用方法(Linux)
sphinx中文版Coreseek中文检索引擎安装和使用方法(Linux) 众所周知,在MYSQL数据库中,如果你在百万级别数据库中使用 like 的话那你一定在那骂娘,coreseek是一个 ...
- CoreSeek中文检索引擎
目的:安装coreseek中文检索引擎,配置MySQL数据库访问接口,使用PHP程序实现中文检索. CoreSeek官方网站: http://www.coreseek.cn/ http://www.c ...
- JFreechart在linux下不显示及中文乱码问题
一.使用JFreeChart建的报表,在window下能正常显示,但是放到linux下就报错,而且有时候会把tomcat挂掉, 原因是jfreechart的在linux系统中需要访问java awt库 ...
- linux下QtCreator无法输入中文的情况
解决linux下QtCreator无法输入中文的情况 本文由乌合之众 lym瞎编,欢迎转载 blog.cnblogs.net/oloroso 本文由乌合之众 lym瞎编,欢迎转载 my.oschina ...
- LR通过snmp监控linux下的mysql
LR通过snmp监控linux下的mysql 在linux底下安装配置snmp: 1.使用系统盘安装rpm包(这种方式最好) 2.在www.net-snmp.org处下载net-snmp安装(安装后有 ...
- 在Linux下给mysql创建用户并分配权限及问题解决方案
在linux下安装mysql请参考在linux系统中安装mysql服务器详细步骤 1.新建用户 //登录MYSQL @>mysql -u root -p @>密码 //创建用户 mysql ...
- Linux下查看mysql、apache是否安装,安装,卸载等操作
Linux下查看mysql.apache是否安装,并卸载. 指令 ps -ef|grep mysql 得出结果 root ? :: /bin/sh /usr/ ...
- Linux下登陆mysql服务器不需要输入账号密码信息
linux下登录mysql服务器一般都是在命令行手动输入链接信息 [root@localhost ~]# mysql -hlocalhost -uroot -p11111 而在mysql 5.6之后版 ...
随机推荐
- 【IOS基础知识】NSTimer定时器使用
1.声明 NSTimer *timer; 2.定义 timer = [NSTimerscheduledTimerWithTimeInterval:1.0ftarget:selfsele ...
- Ubuntu 14.10 下卸载MySQL
前面讲了Mysql的简单安装方式,通过sudo apt-get install mysql-server 等脚本,安装之后如何卸载? 1 通过下面命令删除MySQL sudo apt-get auto ...
- 2016-1-6第一个完整APP 私人通讯录的实现 2:增加提示用户的提示框,监听文本框
一:在登录时弹出提示用户的提示框: 1.使用第三方框架. 2.在登陆按钮点击事件中增加如下代码: - (IBAction)loginBtnClicked { NSString *acount = se ...
- Chapter 3: Connector(连接器)
一.概述 Tomcat或者称之为Catalina(开发名称),可以简化为两个主要的模块,如下图: 多个Connector关联一个Container.之所以需要多个Connector,是为了处理多种协议 ...
- go 函数
GO 程序设计 函数 1.新的数据类型 mytype 用户可以根据自身需要定义新的数据类型,下面的mytype就是新定义的数据类型,其中第二个是一个结构体,结构体在go语言中是非常有用的数据类型, ...
- Python mix-in 组合 ~ 将类组合起来 .
在一个池塘中有10个乌龟 1 条鱼 . class Turtle: def __init__(self,x): # 在生命对象的时候 说明对象的 数量 . (还是一个对象 . 数量只是该对象的一个属性 ...
- C/C++学习之路
在嵌入式的路上,仅仅会一种C语言是远远不够的,所以便在学习stm32的同时,开始学习C++,为以后做准备.由于学习之初,为了能激发自己的兴趣,便模仿别人写了一个截屏小软件,当然可能是世上最垃圾的截图软 ...
- php中将文中关键词高亮显示,快捷方式可以用正则
php将文中关键词高亮显示,可以用正则表达式 $text = "Sample sentence from AnsonCheung.tk, regular expression has bec ...
- Java 抓取网页内容
前两天想写一段自动提取微博状态的代码.据我所知,实现这个功能即可以用PHP写,也可以用Java写.我认为用Java写调试方便一点,PHP的脚本还要上传到服务器什么的. 代码很简单的,新建一个java. ...
- Matlab优化存储器读写来改善程序性能
最近用Matlab写程序的时候终于遇到了程序执行效率的问题,于是在Google上面搜索了一篇提高代码性能的文章,简单的概括一下. 文章是通过优化寄存器读写来提高执行速度的,主要体现在三个方面: 在做循 ...