概述:什么是全文检索?检索是指从文献资料、网络信息等信息集合中查找到自己需要的信息或资料的过程。
生活中的数据总体分为两类:
- 结构化数据
- 非结构化数据
结构化数据:是指具有固定格式或有限长度的数据,如数据库,元数据等。
非结构化数据:指没有固定格式或不定长的数据,如邮件,Word文档等。
非结构化数据又称全文数据。
搜索方式也分为,结构化和非结构化,结构化搜索:对文件类型,sql语句,类型和修改时间,非结构为搜索百度大量数等
对全文数据的搜索还可以分为两种
- 顺序扫描:如要找内容包含某个字符串的文件,会一个文档一个文档的从头到尾的找,如Llke查找。
- 索引扫描:把非结构化的数扣中的内容提取出来一部分重新组织,让它变的有结构化,这部分我们提取出来的数据就叫做索引
Sphinx
:msyql查询一模糊数据(Like)基本是查一个字段,Sphinx 能无差别攻击 把所有包含like的词全部查出来
一、Sphinx PHP扩展下载
Sphinx的扩展需要到PHP官方扩展库上,下载链接地址 ,目前没有最新的dll扩展
二、安装Coreseek和使用
为什么是coreseek? 这个是基于sphinx的改版、支持中文分词。我2017年项目也在用
linux版本的目录结构为
- csft-x.y.z:coreseek源代码 注意:安装成功后、默认配置文件是csft.conf
- mmseg-i.j.k:mmseg源代码
- testpack:测试配置和数据包
windows下安装
百度一下coreseek 然后去官网下载win版 然后解压到目录后 ,可以把bin目录绑定到系统变量里,可以用里面的exe的执行文件,比较方便
sphinx 中重要的三个命令(bin目录下)
Indexer 创建索引命令
Searchd 启动进程命令
Search 命令行搜索命令
Searchd是脚本和进程交互的服务 ,负责API处理的查询,并返回
我现在把etc\csft_mysql.conf复制到了bin目录下然后 我生成索引
indexer -c F:\mysql\coreseek-3.2.14-win32\bin\csft_mysql.conf –all
生成后
然后就可以直接使用了 搜索
search -c F:\mysql\coreseek-3.2.14-win32\bin\csft_mysql.conf
1
我搜索的数据 1
结果
配置文件配置不好,特别容易出错、默认的安装包是有个示例的sql的,然后根据官方的配置微改一下。下面是配置
#MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/
#请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库
#源定义
source mysql
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = 123456
sql_db = test
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents
#sql_query第一列id需为整数
#title、content作为字符串/文本字段,被全文索引
##以下是用来过滤或条件查询的属性,这里列出的字段将可以进行条件查询,同时不参与全文检索 ##
sql_attr_uint = group_id #从SQL读取到的值必须为整数
sql_attr_timestamp = date_added #从SQL读取到的值必须为整数,作为时间属性
#sql_attr_float
#sql_attr_string
sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集
sql_query_info = SELECT * FROM documents WHERE id=$id #命令行查询时,从数据库读取原始数据信息
}
#index定义
index mysql
{
source = mysql #对应的source名称
path = F:/mysql/sphinx/documents/ #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 1
#中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
#charset_dictpath = /usr/local/mmseg/etc/ #BSD、Linux环境下设置,/符号结尾
charset_dictpath = F:/mysql/coreseek-3.2.14-win32/etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
charset_type = zh_cn.utf-8
}
#全局index定义
indexer
{
mem_limit = 128M
}
#searchd服务定义
searchd
{
# compat_sphinxql_magics = 0
listen = 9312
read_timeout = 5
max_children = 30
max_matches = 1000
seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
pid_file = F:/mysql/coreseek-3.2.14-win32/var/log/searchd_mysql.pid #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
log = F:/mysql/coreseek-3.2.14-win32/var/log/searchd_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
query_log = F:/mysql/coreseek-3.2.14-win32/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
#binlog_path = #关闭binlog日志
}
也可以单独加载
linux的centos安装
注意安装前先把msyql安装上并安装下面的mysql头文件
yum install mysql-devel libxml2-devel expat-devel
需要安装mysql的支持 coreseek 默认只有xml的支持
安装扩展
材料coreseek源码包 和 sphinx-php7扩展
unzip sphinx-php7.zip
ll
cd sphinx-php7-339e123/
phpize
./configure
如果你是第一次安装,编译的时候基本出现这句
checking for libsphinxclient headers in default path… not found configure: error: Cannot find libsphinxclient headers
然后进入到
cd coreseek-3.2.14/csft-3.2.14/api/libsphinxclient
./configure
make && make install
然后接着回到上一步 进入到
cd sphinx-php7-339e123/
./configure
make && make install
编译成功后 会提示你去添加扩展
cd /usr/local/php/etc
vim pho.ini
然后 在最后一行添加 extension = sphinx.so
service php-fpm restart
centos5.5安装coreseek3.2.14
先进入mmseg 中文分词 coreseek依赖他所以先安装
执行
cd mmseg-3.2.14
./configure --prefix=/usr/local/mmseg
百分之90会出现下面的错误
然后执行automake 然后在make && make install
有的需要 libtool 总之不管怎么样 先把它安装了
./configure --prefix=/usr/local/coreseek/ --with-mysql=/usr/local/mysql
--with-mmseg=/usr/local/mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/
--width-mmseg-libs=/usr/local/mmseg/lib/
contos7安装coreseek3.2.1.4
yum install make gcc gcc++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel
先把上面的安装包装一遍 然后开始安装
tar -zxvf coreseek-3.2.14.tar.gz
cd coreseek-3.2.14 #解压出来的文件夹
##############安装 mmseg #################
cd mmseg-3.2.14
./bootstrap #输出的warning信息可以忽略,如果出现error则需要解决,一般不会出现错误
./configure --prefix=/usr/local/mmseg #指定 mmseg 的安装目录
make && make install
#############安装 csft-3.2.14 ###############
cd /usr/local/src/csft-3.2.14
#这里我们要修改 src/sphinxexpr.cpp 文件,将该文件中的 1013、1047、1080 行的 ExprEval
改为 this->ExprEval(这里的行数跟网上的教程说的行数不一样,
可能是版本的问题吧,但是如果你用的是我提供的版本,该行数是正确的),
懂点 C++ 的同学也可以自己看看 ExprEval 错在哪里。
#改完上面所说的问题后:
sh buildconf.sh
#此文件是在coreseek 目录中 要注意位置
./configure --prefix=/usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/ --with-mysql
make && make install
centos7安装coreseek和异常处理
centos7安装coreseek3.2和4.1一定出现错误、问题的原因是在于GCC的版本、在centos6.5左右gcc的版本在4.7以下所以安装不会出问题
环境依赖
yum -y install automake libtool
解压 coreseek包 内部有mmse csf
先安装mmseg
cd mmseg-3.2.14/
./bootstrap
automake: warning: autoconf input should be named ‘configure.ac‘, not ‘configure.in‘
警告不处理
./configure --prefix=/usr/local/mmseg
make && make install
安装sphinx服务
cd ../csft-3.2.14
sh buildconf.sh
出现错误 automake: warnings are treated as errors
总体意思是: archiver requires ‘AM_PROG_AR‘ in ‘configure.ac‘
解决办法:在 csft-4.1/configure.ac 文件中,查找:
AC_PROG_RANLIB
后面加上
AM_PROG_AR
最终格式为:AC_PROG_RANLIB AM_PROG_AR
再次执行 sh buildconf.sh 出现错误 configure.ac:61: error: required file ‘config/ar-lib‘ not found configure.ac:61: ‘automake --add-missing‘ can install ‘ar-lib‘
运行 automake --add-missing
再次执行 sh buildconf.sh
./configure --prefix=/usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/ --with-mysql=mysql路径 --with-python
make && make install
编译时出错 ‘ExprEval’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
处理方法:
修改vim src/sphinxexpr.cpp
把所有 T val = ExprEval ( this->m_pArg, tMatch ); 修改为-> T val = this->ExprEval ( this->m_pArg, tMatch );
再次执行make && make install
【也可以用补丁在我的网盘里面 连接:https://pan.baidu.com/s/1MDRvjp0weYhCOYrh-_VRjw】
【使用方法在最下面】
错误 :
In file included from sphinxstd.cpp:24:0:
py_layer.h:16:27: fatal error: Python.h: No such file or directory
#include <Python.h>
这是由于缺少了python环境的devel支持包
解决办法:yum install python-devel
启动服务及测试
cd ../testpack/
##如要启动搜索服务,请使用
/usr/local/coreseek/bin/searchd -c etc/csft.conf(注意-c后面是相对路径)
##如要停止搜索服务,请使用
/usr/local/coreseek/bin/searchd -c etc/csft.conf --stop
/usr/local/src/coreseek-3.2.14/testpack/etc/pysource
支持python选项,会有一个
发现sphinx indexer依赖库ibmysqlclient.so.18找不到,通过编辑此文件来修复这个错误 /etc/ld.so.conf
vi /etc/ld.so.conf
将下面这句加到文件到尾部,并保存文件
/usr/local/mysql/lib
然后运行下面这个命令即可
ldconfig
php7不支持 类名作为构造函数 把接口文件更改成 __construct
4.7版本gcc、coreseek3.2和4.1补丁使用方法
unzip sphinxexpr.cpp_.patch_.zip
patch -p1 < sphinxexpr.cpp-csft-3.2.13.patch
然后输入我 coreseek 源码的路径
/core/coreseek-3.2.14/csft-3.2.14/src/sphinxexpr.cpp
注意:我这里是 3.2.1 ,也有 4.1 的补丁,替换下路径就对了
然后我们重新编译
./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/ --without-mysql
make && make install
在安装的过程中,只要不提示错误 error,那么其他的如 warning 信息都是可以忽略的。至此我们已经成功的将中文检索引擎安装到我们服务器上来了。
当你运行这个 ./indexer -c /usr/local/coreseek/etc/csft.conf –all
出现
error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory
这主要是因为你安装库后,没有配置相应的环境变量.可以通过连接修正这个问题ln -s /usr/local/mysql/lib/libmysqlclient.so.20 /usr/lib/libmysqlclient.so.20
然后再重试. OK
命令 indexer
-c 指定配置文件
--all 对所有索引重新编制索引
--rotate 用于轮换索引,主要是在不停止服务的时候,增加索引
--merge 合并索引
cd testpack
cat var/test/test.xml #此时应该正确显示中文
/usr/local/mmseg/bin/mmseg -d /usr/local/mmseg/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 #如要已启动服务,要更新索引
安装编译容易出现的问题
config.status: error: cannot find input file:
Makefile.in'`如果出现这种报错 config.status: error: cannot find input file: src/Makefile.in
,就在 configure
之前执行如下命令
aclocal
libtoolize --force
automake --add-missing
autoconf
autoheader
文章参考:http://blog.csdn.net/baidu
文章参考:http://blog.csdn.net/e421083458/article/details/21529969