linux系统环境下搭建coreseek(sphinx+mmseg3)
1、下载并解压coreseek软件,操作命令如下:
wget
http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz
说明:文件下载在系统当前目录中
tar xzvf coreseek-3.2.14.tar.gz
说明:文件解压在系统当前目录中
cd coreseek-3.2.14
说明:进入解压后的文件夹
2、安装coreseek
2.1、安装mmseg3
cd mmseg-3.2.14
说明:进入mmseg3安装目录
./bootstrap
./configure --prefix=/usr/local/mmseg3
make && make install
说明:输出的warning信息可以忽略,如果出现error则需要解决
遇到的问题:
error: cannot find input file: src/Makefile.in
或者遇到其他类似error错误时...
解决方案:
依次执行下面的命令,如果运行'aclocal'时又出现了错误,解决方案看下文描述
yum -y install libtool
aclocal
libtoolize --force
automake --add-missing
autoconf
autoheader
make clean
cd .. #退出mmseg3安装目录
安装好'libtool'继续从'aclocal'开始执行上面提到的一串命令,执行完后再运行最开始的安装流程即可。
2.2、安装coreseek
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
说明:如果提示mysql问题,可以查看MySQL数据源安装说明http://www.coreseek.cn/product_install/install_on_bsd_linux/#mysql
make && make install
cd .. #退出csft-3.2.14目录
出现这个 xmlpipe2 support NOT compiled in. To use xmlpipe2,
install missing XML libra
错误执行以下命令:
yum -y install expat expat-devel
依次安装后,从新安装coreseek,然后再生成索引,就可以通过了。
3、coreseek系统配置执行
3.1、创建配置sphinx与mysql的配置文件
安装完成后:进入coreseek-3.2.14/testpack/etc目录中的csft_msyql.conf文件,建议下载到本地修改,设置如下:
#源定义
source mysql
{
type
= mysql #源的名称
sql_host
= localhost #服务器地址
sql_user
= root #数据库帐户
sql_pass
= 123456 #数据库密码
sql_db
= buy #数据库名称
sql_port
= 3306 #数据库访问端口
sql_query_pre= SET NAMES utf8 #数据库访问编码
sql_query=SELECT ProductID as productid,ClassID as
classid,UNIX_TIMESTAMP(AddTime) AS date_added ,ProductTitle as
producttitle,TyNames as tynames,ProductBatch as
productbatch,CompanyTitle as companytitle FROM products
#sql_query第一列productid需为整数
# producttitle、productbatch、tynames、companytitle作为字符串/文本字段,被全文索引
sql_attr_uint = classid
#从SQL读取到的值必须为整数
sql_attr_timestamp
= date_added
#从SQL读取到的值必须为整数,作为时间属性
sql_query_info_pre=SET NAMES utf8
#命令行查询时,设置正确的字符集
sql_query_info= SELECT * FROM products WHERE
ProductID=$id
#命令行查询时,从数据库读取原始数据信息
}
#index定义
index mysql
{
source
= mysql
#对应的source名称
path
= /usr/local/coreseek/var/data
#请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
docinfo
= extern
mlock
= 0
morphology
= none
min_word_len =
1
html_strip
= 0
#中文分词配置,详情请查看:
charset_type
= zh_cn.utf-8
}
#全局index定义
indexer
{
mem_limit
= 128M
}
#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/...
}
3.2、中文分词核心配置
3.2.1、词汇长度的设置
默认为5个UTF-8汉字,如果需要修改,可以如下操作:
打开:mmseg源代码coreseek-3.2.14/mmseg-3.2.14/src/css/segmenter.cpp
修改:#define MAX_TOKEN_LENGTH 15
//3*5
重新编译mmseg和coreseek(实际上就是重新安装一次)
3.2.2、生成分词库
/usr/local/mmseg3/ mmseg -u /usr/local/mmseg3/etc/thesaurus.txt
说明:生成一个thesaurus.txt.uni文件,改名为uni.lib即可,thesaurus.txt必须为UTF-8格式,内容编写规则请查看官方文档。
3.2.3、生成同义词词典
/usr/local/mmseg3/ mmseg -t
/usr/local/mmseg3/etc/thesaurus.txt
将thesaurus.lib放到uni.lib同一目录,coreseek索引和搜索时,会自动进行复合分词处理,thesaurus.txt必须为UTF-8格式,内容编写规则请查看官方文档。
3.2.4、特殊短语词库构造命令:
/usr/local/mmseg3/ mmseg -b
/usr/local/mmseg3/etc/exceptions.txt
其中, 开关'-b'指示mmseg是要构造特殊短语词库;exceptions.txt是用户编辑的特殊短语转换规则。该命令执行后,将在当前目录下产生一个名为"synonyms.dat"的文件,将该文件放在"uni.lib"同一目录下,分词系统将自动启动特殊短语转换功能。exceptions.txt必须为UTF-8格式,内容编写规则请查看官方文档。
3.3、生成索引
3.3.1、执行索引(查询、测试前必须执行一次)
/usr/local/coreseek/bin/indexer -c
/usr/local/coreseek/etc/csft_mysql.conf --all --rotate
3.3.2、执行增量索引
/usr/local/coreseek/bin/indexer -c
/usr/local/coreseek/etc/csft_mysql.conf delta --rotate
3.3.3、合并索引
/usr/local/coreseek/bin/indexer -c
/usr/local/coreseek/etc/csft_mysql.conf --merge main delta --rotate
--merge-dst-range deleted 0 0
说明:为了防止多个关键字指向同一个文档加上--merge-dst-range deleted 0 0
3.4、启动守护程序
3.4.1、启动后台服务(必须开启)
/usr/local/coreseek/bin/searchd -c
/usr/local/coreseek/etc/csft_mysql.conf
3.4.2、关闭后台服务
/usr/local/coreseek/bin/searchd -c
/usr/local/coreseek/etc/csft_mysql.conf --stop
3.5、自动化命令
crontab -e
*/1 * * * * /bin/sh /usr/local/coreseek/bin/indexer -c
/usr/local/coreseek/etc/csft_mysql.conf delta --rotate
*/5 * * * * /bin/sh /usr/local/coreseek/bin/indexer -c
/usr/local/coreseek/etc/csft_mysql.conf --merge main delta --rotate
--merge-dst-range deleted 0 0
30 1 * * * /bin/sh
/usr/local/coreseek/bin/indexer -c
/usr/local/coreseek/etc/csft_mysql.conf --all --rotate
说明:以下任务计划的意思是:每隔一分钟执行一遍增量索引,每五分钟执行一遍合并索引,每天1:30执行整体索引。