Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词
搜索引擎架构搭建手记
研究了一下sphinx,发现真是个好东西,先来几句废话,
什么是Sphinx
Sphinx 是一个在GPLv2 下发布的一个全文检索引擎,一般而言,Sphinx是一个独立的搜索引擎,意图为其他应用提供高速、低空间占用、高结果相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。当前系统内置MySQLPostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式的XML数据。通过修改源代码,用户可以自行增加新的数据源(例如:其他类型的DBMS的原生支持)。
Sphinx的特性
高速的建立索引(在当代CPU上,峰值性能可达到10 MB/);
高性能的搜索(2 – 4GB 的文本数据上,平均每次检索响应时间小于0.1);
可处理海量数据(目前已知可以处理超过100 GB的文本数据, 在单一CPU的系统上可处理100 M 文档);
提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法; 支持分布式搜索;
provides document exceprts generation;
可作为MySQL的存储引擎提供搜索服务;
支持布尔、短语、词语相似度等多种检索模式;
文档支持多个全文检索字段(最大不超过32);
文档支持多个额外的属性信息(例如:分组信息,时间戳等);
停止词查询;
支持单一字节编码和UTF-8编码;
原生的MySQL支持(同时支持MyISAM InnoDB );
      原生的PostgreSQL 支持.
更多特性参考手册。
原生MySQL存储引擎检索流程:
基于Sphinx存储引擎检索:
开始
本文以CentOS5.5+mysql-5.1.55+sphinx-0.9.9coreseek-3.2.)为例介绍
Sphinx+MySQL5.1x+SphinxSE存储引擎+mmseg中文分词搜索引擎架构搭建过程。
通过yum命令更新依赖包(推荐使用CentOS本地源,速度快)其实不需要这么多软件包,我是在搭建PHP环境基础上增加的,所以比较多。
yum -y install gcc g++ gcc-c++ libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers patch libtool automake imake mysql-devel expat-devel
安装MySQL+SphinxSE,进入软件包目录
tar zxvf mysql-5.1.
tar zxvf sphinx-0.9.
cp -r sphinx-0.9.9/mysqlse/ mysql-5.1.55/storage/sphinx
cd mysql-5.1.55
.
/BUILD/autorun.sh
./configure --prefix=/usr/local/webserver/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=partition,innobase,myisammrg,sphinx
make
make install
。。。省略若干配置步骤,和平时配置MySQL没什么两样。
安装完成启动MySQL后查看sphinx存储引擎是否安装成功
mysql命令行下执行
show engines;
如果出现如下图红方框内的信息说明SphinxSE已经安装成功!
安装Sphinx全文检索服务器
Sphinx默认不支持中文索引及检索, 以前用Coreseek的补丁来解决,目前Coreseek 不单独提供补丁文件,而基于sphinx开发了Coreseek 全文检索服务器,Coreseek应该是现在用的最多的sphinx中文全文检索,它提供了为Sphinx设计的中文分词包LibMMSeg包含mmseg中文分词,其实coreseek-3.2.中已经包含了sphinx,前面安装SphinxSE时也可以使用这个压缩包里的mysqlse
我们来看一下的安装过程:
安装autoconf
tar zxvf autoconf-2.
cd autoconf-2.64
./configure --prefix=/usr
make
make install
cd ..
安装Coreseek
tar zxvf coreseek-3.2.
cd coreseek-3.2.14
cd mmseg-3.2.14/
./bootstrap
./configure --prefix=/usr/local/mmseg3
make
make install
cd ../csft-3.2.14/
sh buildconf.sh
./configure --prefix=/usr/local/coreseek --without-python --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql --host=arm
make
make install
cd /usr/local/coreseek/etc
进入配置目录通过命令ls可以看到3个文件
example.sql  f.dist  f.dist
其中example.sql是示例sql脚本我们将其导入到数据库中的test数据库中作为测试数据(会创建两张表 documentstags)
f
输入以下内容
source src1
{
    type                    = mysql
    sql_host                = localhost
    sql_user                = root
    sql_pass                =12345678
    sql_db                = test
    sql_port                = 3306    # optional, default is 3306
    sql_sock                              = /tmp/mysql.sock
    sql_query_pre = SET NAMES utf8
    sql_query                = \
        SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
        FROM documents
    sql_attr_uint            = group_id
    sql_attr_timestamp        = date_added
    sql_query_info            = SELECT * FROM documents WHERE id=$id
}
index test1
{
    source                    = src1
    path                    = /usr/local/coreseek/var/data/test1
    docinfo                    = extern
    charset_type            = zh_cn.utf-8
    mlock            = 0
    morphology        = none
    min_word_len        = 1
    html_strip        = 0
    charset_dictpath        = /usr/local/mmseg3/etc/
    ngram_len                    = 0
}
indexer
{
    mem_limit                = 32M
}
searchd
{
    port                    = 9312
    log                        = /usr/local/coreseek/var/log/searchd.log
    query_log                = /usr/local/coreseek/var/log/query.log
    read_timeout            = 5
    max_children            = 30
    pid_file                = /usr/local/coreseek/var/log/searchd.pid
mysql存储文档
    max_matches                = 1000
    seamless_rotate            = 1
    preopen_indexes            = 0
    unlink_old                = 1
}
说明:
代码段source src1{***} 代表数据源里面主要包含了数据库的配置信息,src1表示数据源名字,可以随便写。
代码段index test1{***} 代表为哪个数据源创建索引,source *** 是成对出现的,其中的source参数的值必须是某一个数据源的名字。
其他参数可以查看手册,这里不再赘述。
生成索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/f --all
其中参数--all表示生成所有索引
当然也可以是索引的名字例如:/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/f test1
执行后可以在/usr/local/coreseek/var/data目录中看到多出一些文件,是以索引名为文件名的不同的扩展名的文件
在不启动sphinx的情况下即可测试命令:
  /usr/local/coreseek/bin/search -c /usr/local/coreseek/f number

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。