概述:什么是全文检索?检索是指从文献资料、网络信息等信息集合中查找到自己需要的信息或资料的过程。

生活中的数据总体分为两类:

  1. 结构化数据
  2. 非结构化数据

结构化数据:是指具有固定格式或有限长度的数据,如数据库,元数据等。

非结构化数据:指没有固定格式或不定长的数据,如邮件,Word文档等。

非结构化数据又称全文数据。

搜索方式也分为,结构化和非结构化,结构化搜索:对文件类型,sql语句,类型和修改时间,非结构为搜索百度大量数等

对全文数据的搜索还可以分为两种

  1. 顺序扫描:如要找内容包含某个字符串的文件,会一个文档一个文档的从头到尾的找,如Llke查找。
  2. 索引扫描:把非结构化的数扣中的内容提取出来一部分重新组织,让它变的有结构化,这部分我们提取出来的数据就叫做索引

Sphinx:msyql查询一模糊数据(Like)基本是查一个字段,Sphinx 能无差别攻击 把所有包含like的词全部查出来

一、Sphinx PHP扩展下载

Sphinx的扩展需要到PHP官方扩展库上,下载链接地址 ,目前没有最新的dll扩展

pecl库地址

二、安装Coreseek和使用

为什么是coreseek? 这个是基于sphinx的改版、支持中文分词。我2017年项目也在用

linux版本的目录结构为

  1. csft-x.y.z:coreseek源代码 注意:安装成功后、默认配置文件是csft.conf
  2. mmseg-i.j.k:mmseg源代码
  3. testpack:测试配置和数据包

windows下安装

目录

百度一下coreseek 然后去官网下载win版 然后解压到目录后 ,可以把bin目录绑定到系统变量里,可以用里面的exe的执行文件,比较方便

coreseek斯芬克斯中文版安装

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会出现下面的错误

error

然后执行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

Last modification:November 19, 2020
如果觉得我的文章对你有用,请随意赞赏