Coreseek介绍:

Sphinx默认不支持中文索引及检索,基于Sphinx开发了Coreseek 全文检索服务器,Coreseek应该是现在用的最多的Sphinx中文全文检索,它提供了为Sphinx设计的中文分词包LibMMSeg包含mmseg中文分词

引言:coreseek 3.2 稳定版

1、先安装环境:

yum install make gcc gcc++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel
expat-devel
注: 检测以上软件是否安装,如果没有请确保安装;否则无法正常安装Coreseek-3.2.14

2、开始安装:

#把安装包放到此处

cd /usr/local/src

#下载CoreSeek

wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz

这里注意一下,这个路径现在暂时已经用不了(至少我写这篇博客的时候用不了),但是毕竟这是官网,还是要放一下的。大家去网上搜索下载到本地,然后再用 Filezilla 

等软件上传到服务器即可。

#解压出来的文件夹

tar -zxvf coreseek-3.2.14.tar.gz

cd coreseek-3.2.14

##############安装 mmseg #################

cd mmseg-3.2.14

./bootstrap #输出的warning信息可以忽略,如果出现error则需要解决,一般不会出现错误

#指定 mmseg 的安装目录

./configure --prefix=/usr/local/mmseg

make && make install

然后运行mmseg,就能输入安装成功的信息了:

/usr/local/mmseg/bin/mmseg

出现下列信息,就证明mmseg中文分词已经安装好了。

接下来,我们要把Sphinx和mmseg结合起来

#############安装 csft-3.2.14 ###############

cd /usr/local/src/coreseek-3.2.14/csft-3.2.14

#这里我们要修改 src/sphinxexpr.cpp 文件,将该文件中的 1013、1047、1080 行的 ExprEval 改为

this->ExprEval(这里的行数跟网上的教程说的行数不一样,可能是版本的问题吧,但是如果你用的是我提

供的版本,该行数是正确的),懂点 C++ 的同学也可以自己看看 ExprEval 错在哪里。

#改完上面所说的问题后:
sh buildconf.sh

./configure --prefix=/usr/local/coreseek --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/

make && make install

在安装的过程中,只要不提示错误 error,那么其他的如 warning 信息都是可以忽略的。

至此我们已经成功的将中文检索引擎安装到我们服务器上来了。

############ 配置文件 ##############

coreseek中得配置文件也是csft.conf,而不是sphinx.conf

cd  /usr/local/coreseek/etc

cp  sphinx.conf.dist  csft.conf

vim csft.conf

其他地方和sphinx配置都一样,对照下面不一样的地方修改

index test1

{

#stopwords                           = G:\data\stopwords.txt

#wordforms                   = G:\data\wordforms.txt

#exceptions                              = /data/exceptions.txt

#charset_type                              = sbcs

添加下面这两行,意思是把中文分词加入到配置文件中

charset_type        = zh_cn.utf-8

charset_dictpath        = /usr/local/mmseg/etc/    #你安装mmseg的目录

}

################ 生成索引并测试 ################

在mysql中创建数据

CREATE TABLE IF NOT EXISTS `node` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`content` text NOT NULL,
`created` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试文章表' AUTO_INCREMENT=11 ; INSERT INTO `node` (`id`, `title`, `content`, `created`) VALUES
(1, '三月醉一场青春的流年', '三月,醉一场青春的流年。慢步在三月的春光里,走走停停,看花开嫣然,看春雨绵绵,感受春风拂面,春天,就是青春的流年。青春,是人生中最美的风景。青春,是一场花开的遇见', '2018-07-17 11:12:00'),
(2, '在爱的岁月山河里思念', '夜色如梦,没有人陪,坐在沙发里,一杯红酒配电影,似乎看透红尘,实际上钻心的孤独。远在他方的你,是否也一样在深夜里买醉?谁在爱的国度里,想念着谁?谁在梦里,与谁不醉不休?谁在寂寞的夜晚,想象着与谁缠绵悱恻?在爱的幸福国度,你就是我的唯一。', '2018-07-17 11:12:00'),
(3, 'php是世界上最好的语言', '女神:你能让这个知乎程序员板块的人都吵起来,我今晚就跟你走,但是提问不能问xx是不是最好的语言。程序员提问:“PHP是最好的语言”这个梗是怎么来的?女神:这能吵起来?程序员:走着瞧半小时后,知乎炸开了锅,数百回答讨论PHP的是是非非。女神:我了个去,这特么都行。服了,跟你回去就是了。程序员:不行,我一定要说服他们,PHP是最好的语言', '2018-07-17 11:12:00'),
(4, 'mysql', 'mysql is the best database?', '2018-07-17 11:12:00'),
(5, '夏色斑斓,夏意阑珊', '岁月,在风声里歌唱,一如往昔,撩起时光的衣裙。慢步在光阴的旷野,走走停停,看人来人往,看花开花谢,看日出日落。风景如画,往事如诗。那段凯歌,奏响风中的依恋,为你,为我,祭奠旧时的风景。相思豆,将你我的思念串成一个圆圈,你在地球的那头,我在地球的这头。', '2018-07-17 11:12:00'),
(6, '笔墨流芬芳,醉爱文字情', '文字,是一米阳光,温暖着我的心。阳光明媚,我在阳光里享受着它的融融暖意。文字,发着光,发着热,让我的灵魂不再四处漂游。文字,好暖,让我结冰的心湖慢慢融化。阳光,让早已心如死灰的心感受到从未有过的温暖。只要抓住那一米阳光,就等于抓住了一颗救命稻草', '2018-07-17 11:12:00'),
(7, '冬风中一朵紫罗兰', '当时我在窗前。窗里光线幽暗,冷冷清清,窗玻璃紧紧地闭着,木头的窗棂子似乎不堪冷风的肆虐有些瑟瑟发抖,这一切让我原本晦暗的心情更加晦暗,失落的灵魂更加无着无落了。', '2018-07-17 11:12:00'),
(8, '我在红尘中等你', '在这红尘里,我渴望陪你变老,不求一路轰轰烈烈,只愿一世倾心,像山野花儿把最后的生命情葬在秋天,因为你为梦想去漂泊,去了遥远的他乡,我后悔没有与你同行,致使离我而去,你知道我喜欢家乡的宁静,喜欢云的淡然恬静,喜欢山色的空蒙幽深,我喜欢握那一只短笛,诉说心中忧郁,想想走过的人生路,曾经说过相伴一生的你,如今去了南方,那些曾经许下的诺言,早已风吹云散。曾经的温暖,美好的记忆,也许只是一个转身的距离,让我在红尘中等你,今生是如何的结局。', '2018-07-17 11:12:00'),
(9, '阳光的滋味', '明眸善睐,云袖轻舒,花影婆娑,夜鸟伏声。望月,终团圆。融化一季相思苦楚,泪凝妙目。开襟解怀,邀月畅饮。一季愁情尽遣。蘸墨狂书,满腹恩爱无度。羞愧了月里仙子,忧郁了河汉星辰。明月缱惓,夜色飘香。尝遍了相思苦涩,领略这相聚欢欣。', '2018-07-17 11:12:00'),
(10, '走在迷途的拾荒人', '时光就像一个美少女,在低眉浅笑中,就将有些人一些事隔到了光阴的对面。其实光阴从不曾厚过谁也不曾薄过谁,生活就是一种积累,你若储存的温暖多,你的生活就会阳光明媚,你若储存太多寒凉,你的生活就会阴云密布。放下烦恼与忧愁,带着最美的微笑出发,脚下路在,前方希望在,回眸处爱与温暖一直都在。', '2018-07-17 11:12:00');

创建索引

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

测试搜索中文

/usr/local/coreseek/bin/search [-a] -c  /usr/local/coreseek/etc/csft.conf   '阳光明媚'

注意:如果你设置的coreseek配置文件为csft.conf,则 indexerr、search和searchd时不用带上 -c  /usr/local/coreseek/etc/csft.conf,因为默认就是去寻找这个文件

cd testpack

cat var/test/test.xml #此时应该正确显示中文

/usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml #整篇文章进行分词

/usr/local/coreseek/bin/indexer -c etc/csft.conf --all #创建索引

/usr/local/coreseek/bin/search -c etc/csft.conf 网络搜索 #搜索关键字 网络搜索

/usr/local/coreseek/bin/searchd -c etc/csft.conf #正常开启搜索服务

/usr/local/coreseek/bin/searchd -c etc/csft.conf --stop #如要停止搜索服务

/usr/local/coreseek/bin/indexer -c etc/csft.conf --all --rotate #如要已启动服务,要更新索引

################## php 操作sphinx ####################

Sphinx集成到PHP程序中,有两种方式:

1.Sphinx php模块 (编译添加php7下的sphinx扩展)

2.Sphinxapi类 (可以直接使用 /usr/local/src/coreseek-3.2.14/csft-3.2.14/api/sphinxapi.php 文件)

编译扩展:

wget http://pecl.php.net/get/sphinx-1.3.3.tgz

tar zvxf sphinx-1.3.3.tgz

cd sphinx-1.3.3/

/usr/local/php71/bin/phpize

./configure --with-php-config=/usr/local/php71/bin/php-config

提示出错:
checking for libsphinxclient headers in default path... not found
configure: error: Cannot find libsphinxclient headers

找了下libsphinxclient,在/www/soft/csft-3.2.13/api/libsphinxclient,之前安装的是coreseek3.2.13版

cd /usr/local/src/coreseek-3.2.14/csft-3.2.14/api/libsphinxclient

./configure

make && make install

安装完libsphinxclient,继续安装sphinx扩展

发现make 编译出错,可能是版本不兼容,去官网下载匹配php7的最新sphinx扩展

http://git.php.net/?p=pecl/search_engine/sphinx.git;a=snapshot;h=refs/heads/php7;sf=tgz

重新编译安装完成后修改php的配置文件

vim /usr/local/php71/lib/php.ini

加入extension = sphinx.so

重启apache,

/usr/local/apache24/bin/apachectl restart

查看sphinx扩展是否开启

编写php代码测试:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>sphinx</title>
</head>
<body>
<div style="margin:20px;">
<h3>sphinx分词检索</h3>
<form action="" method="post">
关键字:<input type="text" name="keyword" value="<?php echo isset($_POST['keyword'])?$_POST['keyword']:null?>">
<br>
<input type="submit" value="检索">
</form>
</div>
</body>
</html> <?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
require_once 'sphinxapi.php';
echo '<h3>检索信息:</h3>';
$keyword = isset($_POST['keyword'])?$_POST['keyword']:null;
//访问Sphinx获得主键值
$sphinx = new SphinxClient();
$sphinx->SetServer('localhost',9312);
$sphinx->SetConnectTimeout(10);//设置连接的超时时间
//$sphinx->SetMaxQueryTime(30);//设置最大的查询时间
//$sphinx->SetArrayResult(true);//设置Sphinx返回结果的类型
/*
* 切词方式
* SPH_MATCH_ALL:切词。所有词完全匹配
* SPH_MATCH_ANY:切词。只要有一个词匹配
* SPH_MATCH_PHRASE:不切词
*/
$sphinx->SetMatchMode(SPH_MATCH_ANY);//设置切词方式 //查询索引文件 node_ind,node_ind_delta
$result = $sphinx->Query($keyword, '*'); if (isset($result['matches'])) {
/*
Matches中就是我们匹配的结果,但是仿佛不是我们想要的数据,比如 titile,content字段的内容就没有匹配出来,根据官方的说明是 Sphinx 并没有连接到 MySQL去取数据,只是根据它自己的索引内容进行计算,因此如果想用 Sphinx 提供的API 去取得我们想要的数据,还必须以查询的结果为依据,再次查询 MySQL从而得到我们想要的数据
*/
$ids = join(',', array_keys($result['matches']));
try{ $pdo = new PDO('mysql:host=127.0.0.1;dbname=coreseek', 'root', 'root');
$res = $pdo->query('select * from node where id in ('.$ids.')');
$data = $res->fetchAll(PDO::FETCH_ASSOC); $opts = [
'before_match' => '<font style="color:red;font-weight:bold">',
'after_match' => '</font>'
]; foreach ($data as $row)
{
// 高亮关键字
$light = $sphinx->buildExcerpts($row, 'node_ind', $keyword, $opts);
echo '编号:'.$light[0].'<br>';
echo '标题:'.$light[1].'<br>';
echo '内容:'.$light[2].'<br>';
echo '创建时间:'.$light[3].'<hr>';
}
} catch (PDOException $e){
echo $e->getMessage();
}
} else {
echo '没有匹配到数据@';
}
}
?>

安装coreseek 可能会出现的错误:

cd ../csft-4.1/
sh buildconf.sh ##警告可以忽略
./configure --prefix=/usr/local/coreseek --without-python --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/ --with-mysql
make ##警告可忽略
make install
###可能会报的错
1. sh buildconf.sh 报错 automake: warnings are treated as errors
#解决办法 将configure.ac文件的
AM_INIT_AUTOMAKE([-Wall -Werror foreign]) 修改为
AM_INIT_AUTOMAKE([-Wall foreign])subdir-objects
2.make报错1
make[2]: *** [sphinxexpr.o] Error 1
make[2]: Leaving directory `/root/coreseek-4.1-beta/csft-4.1/src'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/root/coreseek-4.1-beta/csft-4.1/src'
make: *** [all-recursive] Error 1
##解决办法
将src目录下sphinxexpr.cpp 文件的所有的
T val = ExprEval ( this-m_pArg, tMatch );
修改为
T val = this->ExprEval ( this-m_pArg, tMatch );
然后执行 make clean 在执行make 3.make 报错2
collect2: error: ld returned 1 exit status
make[2]: *** [indexer] Error 1
make[2]: Leaving directory `/root/coreseek-4.1-beta/csft-4.1/src'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/root/coreseek-4.1-beta/csft-4.1/src'
##解决办法
编辑configure 文件 修改 #define USE_LIBICONV 1 的 1 修改为0

参考文档:

https://zhuanlan.zhihu.com/p/40040761

https://www.linuxidc.com/Linux/2017-05/143599.htm

Centos7 下coreseek的安装的更多相关文章

  1. centos7下使用yum安装mysql

    CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql的repo源. 1. 下载mysql的repo源 wget http://repo.mysql.com/m ...

  2. [转]Centos7下caffe的安装

    Centos7下caffe的安装 原文地址:http://blog.csdn.net/s2392735818/article/details/49796017   版权声明:本文为博主原创文章,未经博 ...

  3. coreseek实战(一):windows下coreseek的安装与测试

    coreseek实战(一):windows下coreseek的安装与测试 网上关于 coreseek 在 windows 下安装与使用的教程有很多,官方也有详细的教程,这里我也只是按着官方提供的教程详 ...

  4. centos7下搜狗输入法的安装教程

    相信用过centos自带的输入法的朋友都会感叹这也实在是太难用了吧,使用拼音打出来的词总是不能在前几个匹配到,即使是一些常用词也是如此,简直无法忍受跟个zz似的.吐槽完了,这里给出centos7下搜狗 ...

  5. centos7下使用yum安装pip

    centos7下使用yum安装pip 首先安装epel扩展源: yum -y install epel-release 更新完成之后,就可安装pip: yum -y install python-pi ...

  6. Centos7 下的SVN安装与配置

    Centos7 下的SVN安装与配置 1.关闭防火墙 临时关闭防火墙 systemctl stop firewalld 永久防火墙开机自关闭 systemctl disable firewalld 临 ...

  7. CentOS7 下源码安装 python3

    CentOS 7 下源码安装 python3   在CentOS7下,默认安装的是python2.7:为满足项目要求,安装python3 的方法如下:   1. 首先安装python3.6可能使用的依 ...

  8. CentOS7下RabbitMQ服务安装配置

    参考文档: CentOS7下RabbitMQ服务安装配置 http://www.linuxidc.com/Linux/2016-03/129557.htm 在linux下安装配置rabbitMQ详细教 ...

  9. centos7下使用yum安装redis

    centos7下使用yum安装Redis 第一步:安装 yum –y install redis 第二步:启动 systemctl start redis.service 第三步:设置开机启动 sys ...

随机推荐

  1. 网络流24题 P2754 [CTSC1999]家园

    思路 如图,建立分层图跑dinic 每次在残余网络里加边继续跑 跑到ans>=k时候的i就是答案 诶呀啊,忘记弄箭头了,最后一列是向上的箭头,不过聪明的你们应该没啥影响 代码 #include ...

  2. win10安装Zookeeper3.4.12

    为了方便在本地开发环境进行调试,希望在win10环境中安装一个zookeeper 安装: 下载: 下载最新的stable版 zookeeper-3.4.12.tar.gz 配置环境变量: ZOOKEE ...

  3. orcl 之 导入和导出(2)

    删除用户表,表数据等内容 drop user username cascade 无法为表空间 spancename 中的段创建INITAL区处理办法 找到表空间存储的地方文件 select file_ ...

  4. SP3946 MKTHNUM - K-th Number(整体二分)

    思路 整体二分的板子题,没什么思路好说 代码 #include <cstdio> #include <algorithm> #include <cstring> u ...

  5. 论文笔记:Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments

    Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments 2017-10-25  16:38:23   [Proj ...

  6. Js批量下载花瓣网及堆糖网专辑图片

    插件作者:SaintIC 文章地址:https://blog.saintic.com/blog/256.html 一.安装 1. 安装Tampermonkey扩展,不同浏览器的支持,参见官网:http ...

  7. Tag Helpers in forms in ASP.NET Core

    Tag Helpers in ASP.NET Core Tag Helpers in forms in ASP.NET Core HTML Form element ASP.NET Core buil ...

  8. ETCD原理

    etcd:从应用场景到实现原理的全方位解读 从etcd的架构开始,深入到源码中解析etcd 1 架构 从etcd的架构图中我们可以看到,etcd主要分为四个部分. HTTP Server: 用于处理用 ...

  9. Python有趣现象(不定时更新)

    1.list中extend方法有趣现象 1.1 List+=Str 与 List.extend(Str) list1 = [11,2,45] str1 = 'Michael' list1.extend ...

  10. 【Mac】Finder显示或隐藏文件

    第一步:打开「终端」应用程序. 第二步:输入如下命令: defaults write com.apple.finder AppleShowAllFiles -boolean true ; killal ...