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. linux shell的for循环语法是怎样的?

    答:如下: ;i<100;i++)) do echo "i=${i}" done

  2. Docker 使用Docker-Compose编排容器

    简介: Docker Compose是一个用来定义和运行复杂应用的Docker工具.一个使用Docker容器的应用,通常由多个容器组成.使用Docker Compose不再需要使用shell脚本来启动 ...

  3. js插入排序

    插入排序 平均时间复杂度O(n*n) 最差情况O(n*n) 最好情况O(n) 空间复杂度O(1) 稳定性:稳定 function insertSort (arr) { var len = arr.le ...

  4. Match function in R

    Examples:     print(match(5, c(1,2,9,5,3,6,7,4,5)))[1] 4     5 %in% c(1,2,9,5,3,6,7,4,5)[1] TRUE    ...

  5. html 之 td valign 和 align

    1.align属性趋向于左右对齐,其值包含:left.right.center 2.valign属性趋向于垂直对齐,其值包含:top.bottom.middle.baseline 兼容性 在 HTML ...

  6. MVC 之 初识(一)

    创建一个mvc项目,在项目中会startup.cs文件,startup文件主要是将项目寻找一个宿主 过去,项目一般都是寄宿在iis上的,通过owin可以寄宿到不同的宿主. 可以关闭owin:<a ...

  7. c# 之系统环境安装

    在重装系统后,对一些原有软件进行了卸载,不知道是什么原因总是提示vs2015 需安装IE10,但是又碰到ie10的一些插件不适合此系统.网上介绍的vs修复没有任何作用 最后找到方法是:重装系统,然后不 ...

  8. SQL语句总结2018-11-7

    增加一条数据 insert into table (列字段1,列字段2)values(列1值,列2值) 删除一条数据 delete from table where 列名1=值1 修改一条数据 upd ...

  9. python基础实践 -python是一门动态解释性的强类型定义语言

    python是一门动态解释性的强类型定义语言 Python能做什么? Python是一门综合性的语言,你几乎能在计算机上通过Python做任何事情,以下是Python应该最广泛的几个方面: 1.网络应 ...

  10. UIUseImgWindow

    using System;using UnityEngine;using UnityEngine.UI;using UnityEditor;using System.Collections;using ...