`

手把手搭建sphinx环境

 
阅读更多
原文地址:http://blog.csdn.net/uestc_huan/article/details/6562763


手把手搭建sphinx 环境 1
一.概述 1
二.虚拟机的搭建 2
1. 安装 virtualbox 2
2. 准备 suse 的安装环境 2
3. 安装 suse 4
4. 配置共享文件夹 5
5. 设置网络 7
三.Mysql 的安装 8
1. 获取 mysql 源代码 8
2. 获取 sphinx 源码 9
3. 增加 sphinxSE 引擎 9
4. 配置编译 9
5. 启动和测试 9
6. 系统自动启动 mysql 10
四.Sphinx 的搭建 10
1. 解压 coreseek 10
2.  首先安装MMSeg: 10
3. 安装 coreseek 10
4. 配置自动启动 11
五.测试 11
1. 创建数据库 11
2. 创建 sphinx 引擎表格 12
3. 创建 sphinx 配置文件 13
4. 建立索引 19
5. 运行 sphinx 服务器 19
6.查询测试 19
六. 进一步参考 19



一.概述
Sphinx是一个在 GPLv2 下分发的全文检索引擎; Coreseek  是一个可供企业使用的、基于 Sphinx (可独立于 Sphinx 原始版本运行)的中文全文检索引擎,按照 GPLv2 协议发行。
一般而言,Sphinx 是一个独立的全文搜索引擎;而 Coreseek 是一个支持中文的全文搜索引擎,意图为其他应用提供高速、低空间占用、高结果相关度的中文全文搜索能力。 Sphinx/Coreseek 可以非常容易的与 SQL 数据库和脚本语言集成。

本文介绍的是基于window XP 下的虚拟机环境搭建 sphinx 测试环境。使用的各软件版本如下,其他版本如有区别,请参考其他文献或代码。
coreseek-4.0.1-beta.tar.gz
VirtualBox-3.2.10-66523-Win.exe
mysql-5.1.56.tar.gz
openSUSE-11.3-DVD-i586.iso


二.虚拟机的搭建
1. 安装 virtualbox
双击,一路选择next 即可。

2. 准备 suse 的安装环境
(1 )新建一个虚拟机
(之前我建立了一个 opensuse 的虚拟机,这次建一个叫做 suse 的虚拟机。 )


(2) 创建一个新的虚拟硬盘

(3) 选择磁盘空间分配方式






(4) 分配磁盘空间大小
磁盘空间大小,建议不要小于15G 空间,建议使用 20G 或者以上。以备后期使用。






3. 安装 suse
(1 )用虚拟光驱加载 openSUSE-11.3-DVD-i586.iso ,
(2 )启动刚才建立的虚拟机



(3)安装 suse
跟正常安装linux 一样安装 suse 。
注意一点就是选择需要安装的软件。建议把开发软件全装上吧。根目录的空间分配要大一些。以备后面开发使用,免得来回折腾安装缺失的软件。下图就是选择需要安装软件的界面截图。




4. 配置共享文件夹
共享文件夹用于在虚拟机suse 上和宿主机 windowXP 之间共享传递文件,两个操作系统都能看见这个共享目录下的文件。
(1 )在 virtualbox 配置共享文件夹
在宿主机window xp 下创建共享目录 D:/share 。
关闭suse ,在 virtualBox 选择 suse, 右键选择设置 ->  数据空间  -> 固定分配, 选择共享目录 D:/share 。


(2) 修改 virtualbox的光驱配置
启动suse ,在菜单 " 设备 " — >" 分配光驱 " 中,选择 VBoxGuestAddiitions.iso 。


(3)在虚拟机上安装 virtualbox 增强工具
重启suse,  在主菜单中选择 computer,  挂载 VBOXADDITIONS_3.0.12_54655 。


cd /media, 可以看到 VBOXADDITIONS_3.0.12_54655 增强软件包的光盘。
用root 运行 VBoxLinuxAdditions-x86.run
重启

(3)在虚拟机上加载共享文件夹
mkdir /mnt/share;  mount -t vboxsf share /mnt/share, 这个时候就可以看到共享文件夹了。
suse可以在 /etc/init.d/boot.local 中添加 /bin/mount -t vboxsf share /mnt/share 让它启动时候自动加载。
但在/etc/fstab 中添加没有用,因为系统调用 fstab 的时候, Virtualbox 的共享目录的模块还没有加载,每次加载都会失败。


5. 设置网络
打开虚拟机suse 的浏览器,设置浏览器的网络链接代理,因为公司必须使用网络代理才能上网,所以必须设置。设置网络浏览器使用脚本 http://txp-01.tencent.com/lvsproxy.pac 。这个时候就可以正常上网了。






三.Mysql 的安装
1. 获取 mysql 源代码
直接在虚拟机上上网下载也可以,或者将window xp 中下载的 mysql-5.1.56.tar.gz 拷贝到共享目录中 (D:/share) ,然后在虚拟机上的共享目录 (/mnt/share )目录下,拷贝到你的目录(假如为 /home/software )中。
用tar  xvfz  mysql-5.1.56.tar.gz 解压。

2. 获取 sphinx 源码
跟获取mysql 类似。解压在 /home/software 目录下。之所以在这里预先获取 sphinx 的源码,是因为想给 mysql 预先建立 sphinxSE 的引擎。
Tar  xvfz   coreseek-4.0.1-beta.tar.gz

3. 增加 sphinxSE 引擎
将coreseek-xxx/csft-xxx/mysqlse 目录下的文件拷贝到 mysql/storage/sphinx 目录下。
cp  -r /home/software/coreseek-4.0.1-beta/csft-4.0.1/mysqlse /home/software/mysql-5.1.56/storage/sphinx

4. 配置编译
依次执行下面命令
sh BUILD/autorun.sh
Mkdir -p /home/sphinx/var/data
mkdir -p /var/log/mysql
mkdir -p /var/lib/mysql
mkdir -p /var/run/mysql
./configure --with-plugins=all  --prefix=/usr/local/mysql5.1.56/   --with-charset= gbk    --localstatedir=/ home/sphinx/var/data
Make
Make install

(1)关于上面几个目录的说明:
/var/下面的几个目录,是因为 /etc/my.cfg 里面设置的几个目录。你可以根据自己需要去修改 my.cfg 的路径,或者干脆就自己建立这几个目录让 mysql 使用,而不去修改 my.cfg 文件。
(2)关于 configure 的配置选项的说明:
--localstatdir是用来避免权限问题,其他选项 分别支持innodb 和 sphinx 驱动,同时跟 os 自带的 mysql 分开,支持 gbk 编码。自己可以根据需要适当修改。


5. 启动和测试
/usr/local/mysql5.1.56/bin/mysqld_safe &
连接命令:
Mysql
show engines; 检查是否有 sphinx 引擎。
如果启动mysql 有问题,可以用下面命令手动启动,检查对应的错误日志,根据错误日志定位问题。有一个常见的问题,是之前系统安装的时候自动安装了 mysql ,新安装的 mysql 两者有冲突,导致某些表不在配置文件的路径下,报找不到数据表的错误。如果这个错误,可以在用 /usr/local/mysql-5.1.56/bin/mysql_install_db 命令重建缺省的数据库。
/usr/local/mysql5.1.56/libexec/mysqld --basedir=/usr/local/mysql5.1.56 --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysql/mysqld.log --pid-file=/var/lib/mysql/linux-6ky2.pid --socket=/var/run/mysql/mysql.sock --port=3306
其他可能错误请自行google.
6. 系统自动启动 mysql
在/etc/rc.d/boot.local 中加入 mysql 的启动。加入下面一行。
/usr/local/mysql5.1.56/libexec/mysqld --basedir=/usr/local/mysql5.1.56 --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysql/mysqld.log --pid-file=/var/lib/mysql/linux-6ky2.pid --socket=/var/run/mysql/mysql.sock --port=3306 &
注意如果boot.local 启动错误,有可能导致系统启动不起来。这点很恶心。如果发生这种错误,就用安装盘,从安装盘进入 rescue  模式,然后用 fdisk -l  查看你的硬盘的分区号,这里假定是 /dev/sda2.  用命令 mount /dev/sda2  /mnt/ 挂载,然后 vi /mnt/etc/rc.d/boot.local 进行修改。



四.Sphinx 的搭建
1.  解压 coreseek
如果在安装 mysql已经解压了,直接进入解压以后的目录即可。
$ tar xzvf coreseek-3.2.14.tar.gz
$ cd coreseek
2.  首先安装MMSeg:
在 mmseg的目录下 依次运行下面命令
libtoolize --force
aclocal
automake --add-missing
autoconf
autoheader
make clean
./configure
Make
Make install

3. 安装 coreseek 
$ ./configure
configure程序有很多运行选项。完整的列表可以通过使用  --help  开关得到。最重要的如下:
·  --prefix, 定义将 Coreseek 安装到何处 ; 比如  --prefix=/usr/local/coreseek ( 以下全部示例都假定 Coreseek 安装在这个位置 )
·  --with-mysql, 当自动检测失败时,指出在那里能找到 MySQL  头文件和库文件 ;
·  --with-pgsql, 指出在那里能找到 PostgreSQL 头文件和库文件 .
·  --with-mmseg, 启用基于 MMSeg 的中文分词法,并指出在那里能找到 MMSeg 头文件和库文件 .
·  --with-python, 启用 Python 数据源支持 .  需要预先安装 Python2.6.
编译源代码生成二进制程序:
$ make
安装二进制程序到你设定的目录下: ( 类 Unix 操作系统下默认为  /usr/local/bin/ ,  但是可以被  configure --prefix)  修改安装目录
$ make install


4. 配置自动启动
在/etc/rc.d/boot.local 中加入 searchd 的开机启动。
/usr/local/coreseek/bin/searchd --config  /usr/local/coreseek/etc/csft_mysql.conf

五.测试
1. 创建数据库
Mysql登陆数据库以后,创建 db 和 schema 。
假如db 是 dbname  ,  schema 如下:
CREATE TABLE t_sns_share_info_0000
(
    ID  BIGINT UNSIGNED NOT NULL,
FShareId BIGINT UNSIGNED NOT NULL DEFAULT 0,
FUin INTEGER UNSIGNED NOT NULL DEFAULT 0,
FPostTime INTEGER      UNSIGNED  DEFAULT 0,
FSource INTEGER,
FPostType INTEGER NOT NULL,
FContent VARCHAR(512) NOT NULL DEFAULT '',
FComment VARCHAR(512) DEFAULT '',
FShareType INTEGER NOT NULL,
FOperate INTEGER DEFAULT 0,
FShopId INTEGER DEFAULT 0,
FShopName VARCHAR(255) DEFAULT '',
    PRIMARY KEY  sid (ID),
    UNIQUE KEY  shareid(FShareId)
)ENGINE=MYISAM DEFAULT CHARSET=utf8;;

插入两条测试数据:
insert into t_sns_share_info_0000  values(xxxxxx);
insert into t_sns_share_info_0000  values(xxxxxxx);

2. 创建 sphinx 引擎表格
CREATE TABLE t_shareinfo_sphinxSE
(
    id           bigint unsigned  UNSIGNED NOT NULL,
    weight      INTEGER default 1,
    query       VARCHAR(3072) NOT NULL,
    FUin       INTEGER  UNSIGNED default 0,     
    FPostTime    INTEGER  UNSIGNED default 0,
    FShareType INTEGER default 0,
    FShopId INTEGER DEFAULT 0,
    INDEX(query)
) ENGINE=SPHINX CONNECTION="sphinx://localhost:9312";


3. 创建 sphinx 配置文件
缺省的配置文件路径在/usr/local/coreseek/etc 目录下。在下面建立(如果没有)或者修改(如果已经存在)文件 /usr/local/coreseek/etc/csft_mysql.conf 。内容如下:
source t_sns_share_info_0000
{
    type                                    = mysql
    sql_host                                = 10.xx.xx.xx
    sql_user                                = dbuser
    sql_pass                                = dbpasswd 
    sql_db                                  = dbname
    sql_port                                = 3306 
    sql_sock                                = /xxx/mysql.sock 
    sql_query_pre = SET NAMES utf8  

sql_query                               =  SELECT ID, FShareId, FUin, FPostTime, FSource,FPostType,FContent,FComment,FShareType,FOperate,FShopId,FshopName FROM t_sns_share_info_0000

sql_attr_uint         =    FUin
sql_attr_uint         =    FShareId
sql_attr_uint         =    FPostTime
sql_attr_uint         =    FSource
sql_attr_uint         =    FPostType
sql_attr_uint         =    FShareType
sql_attr_uint         =    FShopId

}
index t_sns_share_info_0
{

source                  = t_sns_share_info_0000
        path                                    = /usr/local/coreseek/var/data/t_sns_share_info_0_0
        docinfo                                 = extern
        mlock                                   = 0
        morphology                              = none
        exceptions                              = /usr/local/coreseek/var/exceptions.txt
        min_word_len                    = 1
        charset_type                    = zh_cn.utf-8
        charset_dictpath                = /usr/local/coreseek/dict
        ngram_len                               = 0
        ngram_chars                     = U+3000..U+2FA1F
        html_strip                              = 0
}


#############################################################################
## indexer settings 
#############################################################################


indexer 
{
        # memory limit, in bytes, kiloytes (16384K) or megabytes (256M)
        # optional, default is 32M, max is 2047M, recommended is 256M to 1024M
        mem_limit                       = 40M 


        # maximum IO calls per second (for I/O throttling)
        # optional, default is 0 (unlimited) 
        # 
        # max_iops                      = 40


        # maximum IO call size, bytes (for I/O throttling)
        # optional, default is 0 (unlimited) 
        # 
        # max_iosize            = 1048576




        # maximum xmlpipe2 field length, bytes
        # optional, default is 2M 
        # 
        # max_xmlpipe2_field    = 4M




        # write buffer size, bytes 
        # several (currently up to 4) buffers will be allocated
        # write buffers are allocated in addition to mem_limit 
        # optional, default is 1M 
        # 
        write_buffer            = 1M





############################################################################# 
## searchd settings 
############################################################################# 


searchd 

        # hostname, port, or hostname:port, or /unix/socket/path to listen on
        # multi-value, multiple listen points are allowed 
        # optional, default is 0.0.0.0:9312 (listen on all interfaces, port 9312)
        # 
        # listen                                = 127.0.0.1
        # listen                                = 192.168.0.1:9312
        listen                          = 9312 
        # listen                                = /var/run/searchd.sock




        # log file, searchd run info is logged here 
        # optional, default is 'searchd.log' 
        log                                     = /usr/local/coreseek/var/log/searchd_t_sns_share_info_0.log


        # query log file, all search queries are logged here 
        # optional, default is empty (do not log queries) 
        query_log                      = /usr/local/coreseek/var/log/query_t_sns_share_info_0.log


        # client read timeout, seconds
        # optional, default is 5 
        read_timeout            = 5 


        # request timeout, seconds 
        # optional, default is 5 minutes 
        client_timeout          = 300 


        # maximum amount of children to fork (concurrent searches to run)
        # optional, default is 0 (unlimited)
        max_children            = 30 


        # PID file, searchd process ID file name
        # mandatory 
        pid_file                        = /usr/local/coreseek/var/log/searchd_9312.pid


        # max amount of matches the daemon ever keeps in RAM, per-index 
        # WARNING, THERE'S ALSO PER-QUERY LIMIT, SEE SetLimits() API CALL
        # default is 1000 (just like Google) 
        max_matches                     = 1000000


        # seamless rotate, prevents rotate stalls if precaching huge datasets
        # optional, default is 1 
        seamless_rotate         = 1 


        # whether to forcibly preopen all indexes on startup
        # optional, default is 0 (do not preopen)
        preopen_indexes         = 0 


        # whether to unlink .old index copies on succesful rotation.
        # optional, default is 1 (do unlink) 
        unlink_old                      = 1 


        # attribute updates periodic flush timeout, seconds 
        # updates will be automatically dumped to disk this frequently
        # optional, default is 0 (disable periodic flush)
        # 
        # attr_flush_period     = 900 




        # instance-wide ondisk_dict defaults (per-index value take precedence)
        # optional, default is 0 (precache all dictionaries in RAM)
        # 
        # ondisk_dict_default   = 1




        # MVA updates pool size 
        # shared between all instances of searchd, disables attr flushes!
        # optional, default size is 1M 
        mva_updates_pool        = 1M 


        # max allowed network packet size 
        # limits both query packets from clients, and responses from agents
        # optional, default size is 8M 
        max_packet_size         = 8M


        # crash log path 
        # searchd will (try to) log crashed query to 'crash_log_path.PID' file
        # optional, default is empty (do not create crash logs)
        # 
        # crash_log_path                = /usr/local/coreseek/var/log/crash




        # max allowed per-query filter count
        # optional, default is 256 
        max_filters                     = 256


        # max allowed per-filter values count
        # optional, default is 4096 
        max_filter_values       = 4096




        # socket listen queue length
        # optional, default is 5
        # 
        # listen_backlog                = 5




        # per-keyword read buffer size
        # optional, default is 256K
        # 
        # read_buffer                   = 256K 




        # unhinted read size (currently used when reading hits)
        # optional, default is 32K
        # 
        # read_unhinted         = 32K
}

# --eof--    

4. 建立索引

/usr/local/coreseek/bin/indexer -c  /usr/local/coreseek/etc/csft_mysql.conf  --all
这个命令会根据配置文件/usr/local/coreseek/etc/csft_mysql.conf  生成对应的索引文件。
5. 运行 sphinx 服务器
/usr/local/coreseek/bin/searchd  -c  /usr/local/coreseek/etc/csft_mysql.conf
启动服务。

6.查询测试
可以通过sphinxSE 进行查询测试。
在mysql 中运行命令 Select * from     t_shareinfo_sphinxSE where query="product"; 即可查看查询的结果。更多 sphinxSE 支持的语句请参考手册。

六. 进一步参考
当你走到这一步的时候,恭喜你,完成了sphinx 环境的搭建。
更多的知识,请参考coreseek 和 sphinx 的手册。
http://www.coreseek.cn/docs/coreseek_3.2-sphinx_0.9.9.html
http://www.coreseek.cn/docs/sphinx-1.11-beta.html
多操作,多实践是掌握sphinx 的最快方法。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics