美文网首页
Sphinx搜索引擎 Coreseek 中文分词搜索引擎安装使用

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

作者: 一件小毛衣 | 来源:发表于2020-01-12 20:25 被阅读0次

    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文件:

    <?php
        header("content-type:text/html;charset=utf8");
        require 'sphinxapi.php';
        // 创建对象
        $sphinxClient = new SphinxClient();
        // 连接服务器
        $sphinxClient->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 中文分词搜索引擎安装使用

          本文链接:https://www.haomeiwen.com/subject/zeziactx.html