• Linux下PHP+MySQL+CoreSeek中文检索引擎配置


    说明:

    操作系统:CentOS 5.X

    服务器IP地址:192.168.21.127

    Web环境:Nginx+PHP+MySQL

    站点根目录:/usr/local/nginx/html

    目的:安装coreseek中文检索引擎,配置MySQL数据库访问接口,使用PHP程序实现中文检索。

    CoreSeek官方网站:

    http://www.coreseek.cn/

    http://www.coreseek.cn/products/=%22/products-install/step_by_step/

    http://www.coreseek.cn/products-install/mysql/

    具体操作:

    一、安装编译工具

    yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel

    二 、安装CoreSeek

    1、下载CoreSeek

    下载地址:http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz

    上传coreseek-3.2.14.tar.gz到/usr/local/src目录

    wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz

    2、安装mmseg

    cd /usr/local/src

    tar zxvf coreseek-3.2.14.tar.gz  #解压

    cd coreseek-3.2.14

    cd mmseg-3.2.14

    ./bootstrap    #输出的warning信息可以忽略,如果出现error则需要解决

    ./configure --prefix=/usr/local/mmseg3  #配置

    make  #编译

    make install  #安装

    3、安装CoreSeek

    cd /usr/local/src

    cd coreseek-3.2.14

    cd csft-3.2.14

    sh buildconf.sh    #输出的warning信息可以忽略,如果出现error则需要解决

    ./configure --prefix=/usr/local/coreseek  --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql  #配置

    make  #编译

    make install  #安装

    三、测试mmseg分词、coreseek搜索、MySQL数据源

    cd /usr/local/src

    cd coreseek-3.2.14

    cd testpack

    cat /usr/local/src/coreseek-3.2.14/testpack/var/test/test.xml    #此时应该正确显示中文,如下图所示

    /usr/local/mmseg3/bin/mmseg  -d  /usr/local/mmseg3/etc  /usr/local/src/coreseek-3.2.14/testpack/var/test/test.xml

    系统运维  www.osyunwei.com  温馨提醒:qihang01原创内容 版权所有,转载请注明出处及原文链接

    /usr/local/coreseek/bin/indexer -c /usr/local/src/coreseek-3.2.14/testpack/etc/csft.conf --all

    /usr/local/coreseek/bin/search -c /usr/local/src/coreseek-3.2.14/testpack/etc/csft.conf 网络搜索

    /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx-min.conf.dist

    /usr/local/coreseek/bin/indexer -c /usr/local/src/coreseek-3.2.14/testpack/etc/csft.conf --all --rotate  #启动服务,更新索引

    测试MySQL数据源:

    测试数据库下载:http://www.coreseek.cn/uploads/csft/test/documents.sql

    上传documents.sql到/usr/local/src目录

    导入数据库到MySQL从服务器:

    mysql  -u root -p  #进入MySQL控制台

    create database documents;   #创建数据库

    use documents    #进入数据库

    source  /usr/local/src/documents.sql  #导入备份文件到数据库

    exit #退出MySQL控制台

    cp  /usr/local/src/coreseek-3.2.14/testpack/etc/csft_mysql.conf  /usr/local/coreseek/etc/csft_mysql.conf  #拷贝MySQL数据源配置文件

    ln -s  /usr/local/coreseek/etc/csft_mysql.conf  /etc/csft_mysql.conf  #添加软连接

    vi  /etc/csft_mysql.conf  #编辑,修改

    ###############################################################################

    #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                    = documents  #MySQL数据库名称

    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_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集

    sql_query_info            = SELECT * FROM documents WHERE id=$id #命令行查询时,从数据库读取原始数据信息

    }

    #index定义

    index mysql

    {

    source            = mysql             #对应的source名称

    path            = /usr/local/coreseek/var/data/mysql #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

    docinfo            = extern

    mlock            = 0

    morphology        = none

    min_word_len        = 1

    html_strip                = 0

    #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/

    charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾

    #charset_dictpath = etc/                             #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...

    charset_type        = zh_cn.utf-8

    }

    #全局index定义

    indexer

    {

    mem_limit            = 1024M  #内存使用限制

    max_iops = 100

    max_iosize = 0

    }

    #searchd服务定义

    searchd

    {

    listen                  =   9312

    read_timeout        = 5

    max_children        = 30

    max_matches            = 1000

    seamless_rotate        = 0

    preopen_indexes        = 0

    unlink_old            = 1

    pid_file = /usr/local/coreseek/var/log/searchd_mysql.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

    log =/usr/local/coreseek/var/log/searchd_mysql.log        #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

    query_log =/usr/local/coreseek/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

    }

    #################################################################################

    :wq!  #保存退出

    cp  /usr/local/src/coreseek-3.2.14/testpack/api/sphinxapi.php  /usr/local/nginx/html/sphinxapi.php  #拷贝测试文件到web站点根目录下

    cp  /usr/local/src/coreseek-3.2.14/testpack/api/test_coreseek.php  /usr/local/nginx/html/test_coreseek.php #拷贝测试文件到web站点根目录下

    cd /usr/local/nginx/html  #进入web站点根目录

    vi test.php  #编辑,添加以下代码

    #################################################################################

    <?php

    //注意文件的编码格式需要保存为为UTF-8格式

    require ( "sphinxapi.php" );

    $cl = new SphinxClient ();

    $cl->SetServer ( '127.0.0.1', 9312);

    //以下设置用于返回数组形式的结果

    $cl->SetArrayResult ( true );

    /*

    //ID的过滤

    $cl->SetIDRange(3,4);

    //sql_attr_uint等类型的属性字段,需要使用setFilter过滤,类似SQL的WHERE group_id=2

    $cl->setFilter('group_id',array(2));

    //sql_attr_uint等类型的属性字段,也可以设置过滤范围,类似SQL的WHERE group_id2>=6 AND group_id2<=8

    $cl->SetFilterRange('group_id2',6,8);

    */

    //取从头开始的前20条数据,0,20类似SQl语句的LIMIT 0,20

    $cl->SetLimits(0,20);

    //在做索引时,没有进行 sql_attr_类型 设置的字段,可以作为“搜索字符串”,进行全文搜索

    $res = $cl->Query ( '搜索字符串', "*" );    //"*"表示在所有索引里面同时搜索,"索引名称(例如test或者test,test2)"则表示搜索指定的

    //如果需要搜索指定全文字段的内容,可以使用扩展匹配模式:

    //$cl->SetMatchMode(SPH_MATCH_EXTENDED);

    //$res=cl->Query( '@title (测试)' , "*");

    //$res=cl->Query( '@title (测试) @content ('网络')' , "*");

    echo '<pre>';

    print_r($res['matches']);

    print_r($res);

    print_r($cl->GetLastError());

    print_r($cl->GetLastWarning());

    echo '</pre>';

    ?>

    ###############################################################################

    :wq!  #保存退出

    /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate  #建立索引服务

    /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf --console  #启动测试模式

    /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf   #后台启动模式

    /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf  --stop  #停止

    /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate  #更新索引服务

    打开浏览器测试:如下图所示

    http://192.168.21.127/test.php

    http://192.168.21.127/test_coreseek.php

    四、设置coreseek开机自动后台运行

    vi /etc/rc.d/rc.local #编辑,在最后一行添加下面的代码

    /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf

    :wq!  #保存退出

    vi /usr/local/coreseek/bin/build_index.sh  #添加以下更新索引脚本

    #!/bin/sh

    /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate

    :wq!  #保存退出

    chmod +x /usr/local/coreseek/bin/build_index.sh  #添加脚本执行权限

    vi /etc/crontab    #编辑,在最后一行添加以下代码

    */30 * * * * root /usr/local/coreseek/bin/build_index.sh  #每隔30分钟执行一次

    :wq!  #保存退出

    service crond reload  #重新加载任务计划

    php页面调用 远程调用 记得把服务器9312端口允许访问

    <html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=gbk" />
    <title>coreseek中文全文搜索在php程序中的应用</title>
    </head>
    <body>
    <h3><font color="blue">coreseek全文搜索在php程序中应用</font></h3>
    <form action="test2.php" method="post">
    输入搜索的关键词:<input type="text" name="keyword" size="30" <?php echo $_POST['keyword'];?> />
    <input type="submit" name="sub" value="搜索" />
    </form>
    <hr />
    <?php
    echo "<pre />";
    #引入接口文件,其实你懂的,就是一个类
    require_once('sphinxapi.php');
    if(isset($_POST['sub']) && $_POST['keyword'] != ''){
        $keyword = trim($_POST['keyword']);    //接收关键词
        $sph = new SphinxClient();            //实例化 sphinx 对象
        $sph->SetServer('23.27.157.36',9312);    //连接9312端口
        $sph->SetMatchMode(SPH_MATCH_ALL);    //设置匹配方式
        $sph->SetSortMode(SPH_SORT_RELEVANCE);    //查询结果根据相似度排序
        $sph->SetArrayResult(false);            //设置结果返回格式,true以数组,false以PHP hash格式返回,默认为false
        /**
            *关键词高亮显示,以及产生文本摘要
            *BuildExcerpts($docs, $index, $words, $opts=array())
            *参数(包含文档内容的数组,索引名,关键词,高亮参数)
        **/
        $opts = array(
            "before_match"    => "<font color='red'>",    //关键词高亮开始的html代码
            "after_match"    => "</font>",                //关键词高亮结束的html代码
            "limit"            => 100,                        //摘要最多包含的符号数,默认256
            "around"        => 3,                        //每个关键词左右选取的词的数目,默认为5
        );
        $result = $sph->Query($keyword,'mysql');//执行搜索操作,参数(关键词,[索引名])
        
        if(!array_key_exists('matches', $result)){    //如果没有匹配结果,直接返回
            echo "搜索无结果";
            return;
        }
        $arr_key = array_keys($result['matches']);    
        //获取到匹配文章的ID
        $ids = implode(',',$arr_key);    //数组转成字符串
        echo "<font color='blue'>按相关性排序id(结果数:",count($arr_key),"):</font>",$ids,"<hr />";
        
        //连接数据库
       $conn=@mysql_connect('localhost','root','root') or die("db info error!");
        $db=@mysql_select_db('zhi11416316',$conn) or die('dbname error');
        mysql_query("SET NAMES UTF8"); //设定编码方式为UTF8    
        $query = "select id,product_name from products where id in(".$ids.")";
        $res=mysql_query($query);
        echo "<table border='1' bordercolor='green' cellspacing='0'><tr><th>文章id</th><th>标题</th></tr>";
        while($row=mysql_fetch_array($res)){
             // $result = $sph->BuildExcerpts($row, 'dede', $keyword, $opts);
            echo "<tr><td>",$row[0],"</td><td>",$row[1],"</td></tr>";
        }
        //搜索词没有高亮显示
        /* while($row = $res->fetch_assoc()){
            echo "<tr><td>",$row['typeid'],"</td><td>",$row['id'],"</td><td>",$row['title'],"</td><td>",$row['description'],"</td></tr>";
        } */
        
        //使用高亮显示代码
        // while($row = $res->fetch_assoc()){
            // $result = $sph->BuildExcerpts($row, 'dede', $keyword, $opts);
            // if(!$res){
                // die("Error:".$sph->GetLastError());
            // }
            // echo "<tr><td>",$result[0],"</td><td>",$result[1],"</td><td>",iconv('utf-8','gbk',$result[2]),"</td><td>",iconv('utf-8','gbk',$result[3]),"</td></tr>";
        // }
        
        echo "</table>";    
    }
    ?>

    至此,Linux下PHP+MySQL+CoreSeek中文检索引擎配置完成。

    转载于 http://www.osyunwei.com/archives/7496.html

  • 相关阅读:
    我的程序优化尽量减少数据库连接操作
    dreamhappy博客索引
    一步一步实现网站的多语言版本
    spring入门基础
    discuz模版的学习
    第七次jsp作业
    第五次作业
    jsp第二次作业
    第六次作业
    jsp第六周作业
  • 原文地址:https://www.cnblogs.com/houdj/p/5352567.html
Copyright © 2020-2023  润新知