sphinx mysql实时搜素_MySQL+Sphinx实现全文搜索

最近在做一个搜索引擎,主要是对图书方面的对象级的搜索,首先来了解下Sphinx吧。

它能够提高你的查询的速度,这个不是一般的快。

Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,他可以提供比数据库本身更专业的搜索功能,使 得应用程序更容易实现专业化的全文检索。         Sphinx特别为一些脚本语言设计搜索API接口,如:PHP、Python、Perl、Ruby等,同时为MySQL也设计了一个存储 引擎插件。

Sphinx单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为毫秒级。Sphinx创建索引的速度为:创建100万条记录的索引只 需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

Sphinx的主要特性包括:

高速索引 (在新款CPU上,近10 MB/秒);

高速搜索 (2-4G的文本量中平均查询速度不到0.1秒);

高可用性 (单CPU上最大可支持100 GB的文本,100M文档);

提供良好的相关性排名

支持分布式搜索;

提供文档摘要生成;

提供从MySQL内部的插件式存储引擎上搜索

支持布尔,短语, 和近义词查询;

支持每个文档多个全文检索域(默认最大32个);

支持每个文档多属性;

支持断词;

支持单字节编码与UTF-8编码;

看了上面的特点还是挺不错的,在看看使用的方式吧.

原生MySQl存储引擎检索流程:

e49e2516dc11258fe055343468f853b0.png

基于Sphinx存储引擎检索:

ed2a49298980fd35f80c5c7b3532b793.png

我还是比较喜欢使用第二种存储引擎,即使你的编程语言不支持Sphinx的API的接口也可以使用哟。

在开始安装之前需要安装一些必要的组件

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

(1)安装python支持

yum install –y python python-devel

(2)编译安装LibMMSeg(LibMMSeg是为Sphinx全文搜索引擎设计的中文分词软件包,其在GPL协议下发行的中文分词法,采用Chin-Hao Tsai的MMSEG算法。LibMMSeg在本文中用来生成中文分词词库)。

tar zxvf mmseg-0.7.3.tar.gz

cd mmseg-0.7.3

./configure

make

make install

(1)       编译安装MySQL5.1.26-rc、Sphinx、SphinxSE存储引擎

tar zxvf mysql-5.1.26-rc.tar.gz

tar zxvf sphinx-0.9.8.rc2.tar.gz

patch –p1 < ../sphinx-0.98rc2.zhcn-support.patch    #补丁

patch –p1 <..>

cp –rf mysqlse ../mysql-5.1.26-rc/storage/sphinx

cd ../

cd mysql-5.1.26-rc/

sh BUILD/autorun.sh

./configure --with-plugins=

partition,innobase,myisammrg,sphinx  --prefix=/usr/local/mysql /

--enable-assembler --with-extra-charsets=complex

--enable-thread-safe-client --with-big-tables --with-readline --with-ssl

--with-embedded-server --enable-local-infile

make && make install

cd ../

启动MySQL数据库

cp support-files/my-medium.cnf /etc/my.cnf # 配置文件

cp support-files/mysql.server /etc/rc.d/mysqld # 添加 MySQL 服务控制

cd /usr/local/mysql

bin/mysql_install_db --user=mysql # 安装

bin/mysqld_safe --user=mysql & # 测试安装是否成功

bin/mysql # 进入 MySQL 命令提示符

启动停止

/etc/rc.d/mysqld start

/etc/rc.d/mysqld stop

于是我们自己创建文件/etc/rc.local并给予执行权限。大致内容为:

#!/bin/sh

/usr/local/mysql/bin/mysqld_safe --user=mysql &

或者

/etc/rc.d/mysqld start

输入下列命令出现SPHINX表示SphinxSE已经移植到MySQL中去了。

show engines;

本文使用的0.9.8版本,建议使用0.9.9版本,0.9.9版本是最稳当的版本,我最后也改成了0.9.9版本的。

Sphinx默认不支持中文索引及检索,以前用Coreseek的补丁来解决,目前Coreseek不单独提供补丁,而

基于Sphinx开发了Coreseek全文检索服务器,Coreseek应该是现在用的最多的Sphinx中文全文检索,它提供了为Sphinx设计的

中文分词包LibMMSeg包含mmseg中文分词,其实coreseek-3.2.14.tar.gz中已经包含了sphinx,前面安装

SphinxSE时也可以使用这个压缩包里的mysqlse。

安装autoconf

tar zxvf autoconf-2.64.tar.gz

cd autoconf-2.64

./configure –prefix=/usr

make

make install

安装Coreseek

tar zxvf coreseek-3.2.14.tar.gz

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  sphinx.conf.dist  sphinx-min.conf.dist

其中example.sql是实例sql脚本我们将其导入到数据库中的test数据库中作为测试数据(会创建documents表和tags表)

vi sphinx.conf

输入一些内容:

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

max_matches                 = 1000

seamless_rotate             = 1

preopen_indexes             = 0

unlink_old                  = 1

}

说明:代码段sorce src1{***}代表数据源里面主要包含了数据库的配置信息,src1表示数据源名字,可以随便写。

代码段index test1{***} 代表为那个数据源创建索引,与source ***是成对出现的,其中的source参数的值必须是某个数据源的名字。

生成索引

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

出现的问题:

问题1:如果sh  BUILD/autorun.sh

但sphinx就是不会出现在configure –h里面,需要执行sh BUILD/cleanup 再执行sh BUILD/autorun.sh 然后执行./configure –h现在就可以看到sphinx了。

问题2:如果编译mysql是报错查看是否安装ncurses安装包

可以执行:yum list|grep ncurses

yum –y install ncurses-devel

yum install ncurses-devel

然后再执行./configure。

问题3 在安装LibMMSeg需要先执行yum install mysql-devel libxml2-devel expat-devel

问题4 在安装MMSeg的时候出现错误提示为:css/UnigramCorpusReader.cpp:89: error: 'strncmp' was not declared in this scope

手动修改了src/css/UnigramCorpusReader.cpp

在上面添加了一句

#include

然后再开始编译安装就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sphinx 是一个开源的全文搜索引擎,最初设计用于支持大规模的全文搜索功能。它可以帮助用户快速地在大型文本数据库中进行搜索,并返回相关的结果。然而,最初版本的 Sphinx 并不直接支持与 MySQL 数据库的集成,需要通过一些额外的插件或配置来实现。 随着时间的推移和开发者的努力,Sphinx 逐渐增加了对 MySQL 数据库的支持。现在,使用 Sphinx 可以非常方便地与 MySQL 进行集成,实现更高效的全文搜索功能。 在使用 Sphinx 进行 MySQL 数据库的全文搜索时,需要首先配置 Sphinx 的索引,将所需要搜索的数据从 MySQL 数据库中导入到 Sphinx 的索引中。这一步可以使用 Sphinx 的一些命令行工具来完成。然后,可以使用 Sphinx 提供的 API 来进行搜索操作,通过指定相关的搜索条件和排序规则来获取查询结果。 Sphinx 应对大型数据集和高负载的查询具有很好的性能表现,因此很受大型网站和应用程序的青睐。通过将 SphinxMySQL 集成,可以提升全文搜索的速度和效率,并且具有良好的可扩展性,适用于处理大规模的文本数据集。 值得注意的是,虽然 Sphinx 支持 MySQL 数据库的全文搜索,但并不代表它是一个完整的关系型数据库管理系统。它主要专注于全文搜索功能,而不提供其他数据库管理的功能,如事务处理和数据关系建立等。 总结来说,Sphinx 已经支持与 MySQL 数据库的集成,这使得用户可以更方便地进行全文搜索,并提升了搜索的效率和性能。如果需要在应用程序中实现高效的全文搜索功能,使用 SphinxMySQL 结合是一个很好的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值