Sphinx搜索引擎 Coreseek 中文分词搜索引擎安装使用,站内搜索

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]# 
解决:
  1. 修改buildconf.sh
vi buildconf.sh
##在&& aclocal \  加上
&& automake --add-missing --foreign \

完整文件:
#! /bin/sh
##&& automake --foreign \
autoheader \
&& aclocal \
&& automake --add-missing --foreign \
&& autoconf
  1. 修改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
......

  1. 修改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运行机制

  1. indexer完成索引
  2. 发送SIGHUP给searchd(同时在终端输出索引已经 完成)
  3. searchd接到中断信号-》等待所有子进程退出
  4. 重命名 当前索引为旧索引为.old
  5. 重命名 .new索引文件作为当前索引
  6. 尝试加载索引文件
    6.1 如果加载失败,searchd会把.old文件回滚为当前文件,并把刚建立的新索引重命名为.new
  7. 加载成的话,完成无缝切换
七.启动服务
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:建立脚本(为了操作方便可以创建脚本)
  1. 启动服务 start.sh
#!/bin/bash
/home/dev/local/coreseek/csk/bin/searchd -c /home/dev/local/coreseek/csk/etc/sphinx.conf
  1. 构建索引build.sh
#!/bin/bash
/home/dev/local/coreseek/csk/bin/indexer -c /home/dev/local/coreseek/csk/etc/sphinx.conf --all
  1. 停止服务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

你可能感兴趣的:(Sphinx搜索引擎 Coreseek 中文分词搜索引擎安装使用,站内搜索)