发布于 2015-11-21 12:26:29 | 278 次阅读 | 评论: 0 | 来源: PHPERZ
Coreseek 中文全文检索引擎
Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和信息处理领域,适用于行业/垂直搜索、论坛/站内搜索、数据库搜索、文档/文献检索、信息检索、数据挖掘等应用场景,用户可以免费下载使用
准备为之前说的电商系统做一个功能完善搜索功能,我的需求是关键字相关搜索,搜索结果多样化排序,根据用户搜索记录为用户提供最优搜索结果。在网上看了好多,看来看去感觉Coreseek还不错。Coreseek是一个基于Sphinx二次开发的搜索工具,属于国内出品,有完善的中文文档。废话不多说,这篇是Coreseek安装篇,废了我不少劲。
Sphinx是一个独立的全文搜索引擎;而Coreseek是一个支持中文的全文搜索引擎,意图为其他应用提供高速、低空间占用、高相关度结果的中文全文搜索能力。CoreSeek/Sphinx可以非常容易的与SQL数据库和脚本语言集成。
应用程序可以通过三种不同的接口方式来与Sphinx搜索服务(searchd)通信: a) 通过原生的搜索 API (SphinxAPI), b) 通过Sphinx自身支持的MySQL网络协议 (使用命名为SphinxQL的SQL精简子集), 或者 c) 通过MySQL 服务端的存储插件引擎(SphinxSE)。当然, 还可以通过可以使用 a)、b)、c) 的应用程序来构建webservice来为其他应用程序提供通信
在Sphinx发行版本中提供的原生搜索API支持PHP、Python、Perl、Rudy和Java。搜索API非常轻量化,可以在几个小时之内移植到新的语言上。第三方API接口和插件提供了对Perl、C#、Haskell、Ruby-on-Rails支持,以及对其他可能的语言或者框架的支持。
从版本1.10-beta开始,Sphinx支持两种不同的索引后端:“磁盘(disk)”索引后端和“实时索引(realtime)”(RT)索引后端。磁盘索引支持在线全文索引重建,但是仅支持非文本(属性)数据的在线更新。RT实时索引在此基础上,又增加了在线的全文索引更新。在此之前的版本仅支持磁盘索引。
使用命名为数据源的接口,数据可以被加载到磁盘索引。当前系统内置MySQL和PostgreSQL以及ODBC兼容(MS SQL、Oracle等) 数据库数据源的支持,也支持从管道标准输入读取特定格式的XML数据。通过适当修改源代码,用户可以自行增加新的数据源驱动(例如:对其他类型的DBMS的原生支持)。在Coreseek发行的版本中,用户还可以使用Python脚本作为数据源来获取任何已知世界和未知世界的数据,这极大的扩展了数据源的来源。从1.10-beta版本开始的RT实时索引,只能使用MySQL接口通过SphinxQL来操作。
<!--more-->
系统环境:Ubuntu15.10
Coreseek-4.1-beta:下载地址
软件依赖:gcc g++ automake libtool mysql-client libmysqlclient-dev libxml2-dev libexpat1-dev mysql-server-5.6
libiconv:下载地址
首先把存在Ubuntu软件源的依赖装上:
sudo apt-get install gcc g++ automake libtool mysql-client libmysqlclient-dev libxml2-dev libexpat1-dev mysql-server-5.6
解压Coreseek
tar -xvf coreseek-4.1-beta.tar.gz
安装mmseg
cd mmseg-3.2.14
// 编辑
./bootstrap
./configure --prefix=/usr/local/mmseg3
sudo make && sudo make install
测试分词软件(mmseg)是否安装成功
cd /usr/local/mmseg3/bin
./mmseg -d /usr/local/mmseg3/etc/ /usr/local/src/coreseek-4.1-beta/mmseg-3.2.14/src/t1.txt
安装libiconv
tar xvf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure
make && sudo make install && ldconfig
如果你的glibc版本在2.16以上,make时很有可能出现如下错误
In file included from progname.c:26:0:
./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
^
参考这里的方法,下载patch文件,解压后打上patch即可。
wget -O - http://blog.atime.me/static/resource/libiconv-glibc-2.16.patch.gz | gzip -d - | patch -p0
安装csft
更改configure.ac文件,将
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
改为
AM_INIT_AUTOMAKE([-Wall foreign])
编译:
cd csft-4.1
automake --add-missing
sh buildconf.sh
./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 --with-python LIBS=-liconv
如果你的gcc版本在4.7以上,编译的时候可能会因为sphinx的一个bug报错,解决方法参考bug报告里的一个patch,在csft-4.1目录下执行:
wget -O - http://blog.atime.me/static/resource/sphinxexpr-gcc4.7.patch.gz | gzip -d - | patch -p0
然后执行:
make -j4 #-j4表示使用4核编译
sudo make install
搞定!
将csft-4.1/contrib/scripts目录下的searchd脚本拷贝到/etc/init.d/目录下,即可使用service命令启动和终止searchd服务。
安装好coreseek后,将/usr/local/coreseek/share/man/目录下的所有文件和目录都拷贝到/usr/local/share/man/目录里,即可使用man命令查看indexer和searchd的使用手册。
安装完成,然后去/usr/local/coreseek/bin执行searchd提示:
./searchd: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
原因是动态链接库未找到__解决方法:__
在/etc/ld.so.conf中加一行/usr/local/lib,运行ldconfig。ld.so.conf和ldconfig是维护系统动态链接库的。