分类目录归档:搜索引擎

coreseek 4.0.1(即sphinx 1.11)在MySQL 5.5.8以上版本的安装、配置实例

coreseek-4.0.1(即sphinx-1.11)在MySQL 5.5.8以上版本的安装、配置实例
本文参考自http://www.coreseek.cn/products-install/上的说明
coreseek-4.0.1-beta.tar.gz下载

cd /tmp/
tar zxvf mysql-5.5.8.tar.gz
tar zxvf coreseek-4.0.1-beta.tar.gz
cp -R coreseek-4.0.1-beta/csft-4.0.1/mysqlse/ mysql-5.5.8/storage/sphinx
cd mysql-5.5.8/
cmake   .   -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-sphinx -DWITH_EXTRA_CHARSETS=complex -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=yes -DWITH_SPHINX_STORAGE_ENGINE=1 -DWITH_EMBEDDED_SERVER=0
(cmake  .   -LH可以查看到各种选项及其有效参数值)
make && make install
cd /usr/local/mysql-sphinx/
mkdir  -p  /webserver/mysql/3406/
cd /webserver/mysql/3406/
mkdir binlog  data   log   relaylog
cp /usr/local/mysql-sphinx/support-files/my-medium.cnf    my.cnf
vim   my.cnf

对my.cnf做如下修改

[client]
port		= 3406
socket	= /tmp/mysql3406.sock
character-set-server = utf8

[mysqld]
port		= 3406
socket	= /tmp/mysql3406.sock
character-set-server = utf8
default-storage-engine = MyISAM
basedir     = /usr/local/mysql-sphinx
datadir     = /webserver/mysql/3406/data

启动新的mysql服务

chown -R mysql.mysql /webserver/mysql/3406/
/usr/local/mysql-sphinx/scripts/mysql_install_db --basedir=/usr/local/mysql-sphinx/ --user=mysql   --datadir=/webserver/mysql/3406/data
/usr/local/mysql-sphinx/bin/mysqld_safe --defaults-file=my.cnf 2>&1 > /dev/null &
/usr/local/mysql-sphinx//bin/mysqladmin -P 3406 -h 127.0.0.1 -u root password "123456"

安装sphinx存储引擎

cd /usr/local/mysql-sphinx
ll   lib/plugin/   可以查看到有一个ha_sphinx.so的插件,此即为sphinx存储引擎
bin/mysql -h 127.0.0.1 -P 3406 -u root -p123456
mysql>install plugin sphinx soname "ha_sphinx.so";
mysql>show engines;		即可看到一个叫sphinx的存储引擎,版本为1.11

安装mmseg

cd /tmp/coreseek-4.0.1-beta/mmseg-3.2.14/
./bootstrap			忽略产生的警告信息
./configure --prefix=/usr/local/mmseg
make && make install
ll  /usr/local/mmseg/etc/    

可以看到存在uni.lib文件,这是coreseek自带的分词词库,此库对于一般应用来说,已经足够了。如果需要更多,更准的库,请自行抓取,并使用下面的命令进行生成,具体的过程,可以参见张宴博客上面的相关文章

 mmseg  -u   unigram.txt
 

安装coreseek(即sphinx服务)

cd /tmp/coreseek-4.0.1-beta/csft-4.0.1/
bash 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
make && make install

如果上面在make时提示找不到libiconv.so文件,则vim src/Makefile,查找”expat”,在LIBS的后面添加上” -liconv”即可

配置基于MySQL源的sphinx服务,并导入测试数据进行测试

cd /usr/local/coreseek
mkdir -p var/test
cp /tmp/coreseek-4.0.1-beta/testpack/var/test/documents.sql var/test/
/usr/local/mysql-sphinx/bin/mysql test < var/test/documents.sql -h 127.0.0.1 -P 3406 -u root -p123456
cp /tmp/coreseek-4.0.1-beta/testpack/etc/csft_mysql.conf etc/
vim etc/csft_mysql.conf
#MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/
#请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库

#源定义
source mysql
{
    type                    = mysql

    sql_host                = 127.0.0.1
    sql_user                = root
    sql_pass                = 123456
    sql_db                    = test
    sql_port                = 3406
    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/mmseg/etc/ #BSD、Linux环境下设置,/符号结尾
    #charset_dictpath = etc/                             #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8
}

#全局index定义
indexer
{
    mem_limit            = 128M
}

#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/...
    binlog_path =                                #关闭binlog日志
}

建立sphinx索引数据

bin/indexer -c etc/csft_mysql.conf --all				//		--all 表示全部索引
bin/indexer -c etc/csft_mysql.conf   索引名称
bin/indexer -c etc/csft_mysql.conf  索引名称  --rotate		// 不重启searchd服务的情况下更新索引数据(用于建立实时索引时非常有用)

启动sphinx服务

bin/searchd -c etc/csft_mysql.conf

停止后台服务

bin/searchd -c etc/csft_mysql.conf   --stop

使用php测试sphinx服务

mkdir  api
cp /tmp/coreseek-4.0.1-beta/testpack/api/sphinxapi.php api/
vim api/t.php

在t.php中输入如下内容

SetServer("127.0.0.1", 9312);

// 以下设置用于返回数组形式的结果
$c1->SetArrayResult(true);

// 取从头开始的前20条数据,0,20类似SQL语句的limit 0,20
$c1->SetLimits(0, 20);

// 在做索引时,没有进行sql_attr_类型设置的字段,可以作为"搜索字符串",进行全文搜索
$res = $c1->Query('查找资料',  "*");	// "*" 表示在所有索引里面同时搜索,"索引名称"则表示搜索指定的

print_r($res['matches']);
print_r($res);
print_r($c1->GetLastError());
print_r($c1->GetLastWarning());

执行测试脚本

php   api/t.php

则得到如下结果

Array
(
    [0] => Array
        (
            [id] => 3
            [weight] => 2
            [attrs] => Array
                (
                    [group_id] => 3
                    [date_added] => 1270094460
                )

        )

)
Array
(
    [error] => 
    [warning] => 
    [status] => 0
    [fields] => Array
        (
            [0] => title
            [1] => content
        )

    [attrs] => Array
        (
            [group_id] => 1
            [date_added] => 2
        )

    [matches] => Array
        (
            [0] => Array
                (
                    [id] => 3
                    [weight] => 2
                    [attrs] => Array
                        (
                            [group_id] => 3
                            [date_added] => 1270094460
                        )

                )

        )

    [total] => 1
    [total_found] => 1
    [time] => 0.009
    [words] => Array
        (
            [查找] => Array
                (
                    [docs] => 1
                    [hits] => 1
                )

            [资料] => Array
                (
                    [docs] => 1
                    [hits] => 1
                )

        )

)