Sphinx搜索引擎 Coreseek 中文分词搜索引擎安装使用,站内搜索,php简单使用;
一.简介
Coreseek 是一款中文全文检索开源软件,基于Sphinx研发并独立发布,专攻中文搜索和信息处理领域,适用于行业/垂直搜索、论坛/站内搜索、数据库搜索、文档/文献检索、信息检索、数据挖掘等应用场景。
相比Sphinx,Coreseek增加了一个带有中文分司的词库。
二.Coreseek下载
wget http://files.opstool.com/man/coreseek-4.1-beta.tar.gz
tar -zxvf coreseek-4.1-beta.tar.gz
cd coreseek-4.1-beta
#目录文件:
csft-4.1
mmseg-3.2.14
README.txt
testpack
##csft-4.1相当与Sphinx,mmseg-3.2.14为一个中文分词词库
三.先安装中文分词词库mmseg
cd mmseg-3.2.14/
./bootstrap
./configure --prefix=/home/dev/local/coreseek/mmseg
make && make install
四.安装csft(Sphinx)
cd csft-4.1
sh buildconf.sh
./configure --prefix=/home/dev/local/coreseek/csk --without-unixodbc --with-mmseg --with-mmseg-includes=/home/dev/local/coreseek/mmseg/include/mmseg --with-mmseg-libs=/home/dev/local/coreseek/mmseg/lib --with-mysql
make && make install
错误:
configure.ac:232: the top level
configure.ac:63: error: required file 'config/ar-lib' not found
configure.ac:63: 'automake --add-missing' can install 'ar-lib'
.......
automake: warnings are treated as errors
/usr/share/automake-1.13/am/library.am: warning: 'libstemmer.a': linking libraries using a non-POSIX
/usr/share/automake-1.13/am/library.am: archiver requires 'AM_PROG_AR' in 'configure.ac'
libstemmer_c/Makefile.am:2: while processing library 'libstemmer.a'
/usr/share/automake-1.13/am/library.am: warning: 'libsphinx.a': linking libraries using a non-POSIX
/usr/share/automake-1.13/am/library.am: archiver requires 'AM_PROG_AR' in 'configure.ac'
src/Makefile.am:14: while processing library 'libsphinx.a'
[root@VM_0_16_centos csft-4.1]#
解决:
- 修改buildconf.sh
vi buildconf.sh
##在&& aclocal \ 加上
&& automake --add-missing --foreign \
完整文件:
#! /bin/sh
##&& automake --foreign \
autoheader \
&& aclocal \
&& automake --add-missing --foreign \
&& autoconf
- 修改configure.ac
#修改AM_INIT_AUTOMAKE([-Wall -Werror foreign]) 为:
#AM_INIT_AUTOMAKE([-Wall foreign])
#在AC_PROG_RANLIB后添加:
#AM_PROG_AR
##源文件
......
AC_CONFIG_AUX_DIR([config])
#AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AM_INIT_AUTOMAKE([-Wall foreign])
......
AC_PROG_RANLIB
AM_PROG_AR
......
- 修改src/sphinxexpr.cpp
#替换所有 T val = ExprEval ( this->m_pArg, tMatch );
#为:
#T val = this->ExprEval ( this->m_pArg, tMatch );
#大概3处
五.配置
#进入到sphinx 安装目录etc下
cd /home/dev/local/coreseek/csk/etc
#文件列表:
example.sql sphinx.conf.dist sphinx-min.conf.dist
cp sphinx-min.conf.dist sphinx.conf
vi sphinx.conf
......
#索引源
source src_name1
{
#索引源类别[mysql,数据库]
type = mysql
#索引源数据库地址
sql_host = localhost
#索引源数据库用户名
sql_user = root
#索引源数据库密码
#如果密码里面有#号需要使用转意字符,否则连接不了数据库
sql_pass = 123
#索引源数据库名称
sql_db = shiwen
#索引源数据库端口号
sql_port = 3306 # optional, default is 3306
#要根据你自己数据库的编码改变,比如如果编码是utf8mb4而编码写的是utf8 会出现没有搜索结果的问题
#一般中文搜索时添加 SET NAMES utf8
sql_query_pre = SET NAMES utf8
#生成索引,indexer的sql执行语句;
#id 为必填项目,如果没有id,可用别名,id后面的需要添加索引的字段
sql_query = \
SELECT id, name, author_name, period_str, content, flags, praise \
FROM sw_push
#下面都是些不同属性的数据了
#先要了解属性的概念:属性是存在索引中的,它不进行全文索引,但是可以用于过滤和排序。
#uint无符号整型属性
sql_attr_uint = praise
#bool属性
#sql_attr_bool =xxx
## 长整型属性
# sql_attr_bigint = xxx
## 时间戳属性,经常被用于做排序
#sql_attr_timestamp = xxx
## 字符串属性。
# sql_attr_string = xxx
# 命令行获取信息查询。
# 我们进行索引一般只会返回主键id,而不会返回表中的所有字段。
#但是在调试的时候,我们一般需要返回表中的字段,那这个时候,就需要使用sql_query_info。
#同时这个字段只在控制台有效,在api中是无效的。
sql_query_info = SELECT * FROM sw_push WHERE id=$id
}
index src_index1
{
#索引源
source = src_name1
#索引存放路径以及名称
path = /home/dev/local/coreseek/csk/var/data/src_index1
docinfo = extern
#中文全文搜索分词时添加下面2项目
#分词目录[mmseg安装目录下面]
charset_dictpath = /home/dev/local/coreseek/mmseg/etc/
charset_type = zh_cn.utf-8
}
......
六.创建索引
cd到csft安装目录]
cd bin
./indexer -c /usr/local/coreseek/etc/sphinx.conf -all --rotate
#如果sphinx在运行中,要indexer时,需要加上--rotate参数,这样索引完就直接生效了。
说明:
如果sphinx在运行中,要indexer时,需要加上--rotate参数,这样索引完就直接生效了。
原因是sphinx的searchd在启动时会创建一个.sql锁文件,因为这时已经标志sphinx正在运行中,除非使用--rotate。
rotate运行机制
- indexer完成索引
- 发送SIGHUP给searchd(同时在终端输出索引已经 完成)
- searchd接到中断信号-》等待所有子进程退出
- 重命名 当前索引为旧索引为.old
- 重命名 .new索引文件作为当前索引
- 尝试加载索引文件
6.1 如果加载失败,searchd会把.old文件回滚为当前文件,并把刚建立的新索引重命名为.new- 加载成的话,完成无缝切换
七.启动服务
cd到csft安装目录]
cd bin
./searchd -c /home/dev/local/coreseek/csk/etc/sphinx.conf
结束:到此安装完成!
PHP测试Demo:
在源码目录../coreseek-4.1-beta/csft-4.1/api/有一个PHP接口文件,复制到自己的www目录下:
cp sphinxapi.php xxxx/xxxx/sphinxapi.php
编写php demo文件:
setServer('localhost','9312');
// 执行查询 query('查询关键词','使用索引')
$keywords = '武则天';
$indexName = 'src_index1';
$res = $sphinxClient->query($keywords,$indexName);
// 设置查询数量,(offset limit)
$sphinxClient->setLimits(1, 10);
// 返回结果
$ids = $res['matches'];
//打印结果
print_r($ids);
?>
PS:建立脚本(为了操作方便可以创建脚本)
- 启动服务 start.sh
#!/bin/bash
/home/dev/local/coreseek/csk/bin/searchd -c /home/dev/local/coreseek/csk/etc/sphinx.conf
- 构建索引build.sh
#!/bin/bash
/home/dev/local/coreseek/csk/bin/indexer -c /home/dev/local/coreseek/csk/etc/sphinx.conf --all
- 停止服务stop.sh
#!/bin/bash
/home/dev/local/coreseek/csk/bin/searchd -c /home/dev/local/coreseek/csk/etc/sphinx.conf --stop
4.添加执行权限
chmod +x start.sh
chmod +x stop.sh
chmod +x build.sh