MySQL+Sphinx实现全文搜索

本文详细介绍了如何利用Sphinx全文检索引擎进行图书对象级搜索的优化,包括安装、配置和使用方式。Sphinx以其高速索引、搜索能力以及对中文的支持,成为构建高性能图书搜索系统的理想选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做一个搜索引擎,主要是对图书方面的对象级的搜索,首先来了解下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存储引擎检索流程:

基于Sphinx存储引擎检索:

我还是比较喜欢使用第二种存储引擎,即使你的编程语言不支持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在本文中用来生成中文分词词库)。

wget http://www.coreseek.com/uploads/sources/mmseg-0.7.3.tar.gz

tar zxvf mmseg-0.7.3.tar.gz

cd mmseg-0.7.3

./configure

make

make install

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

wget http://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.1.26-rc.tar.gz

tar zxvf mysql-5.1.26-rc.tar.gz

 

wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8-rc2.tar.gz

wget http://www.coreseek.com/uploads/sources/sphinx-0.98rc2.zhcn-support.patch

wget http://www.coreseek.com/uploads/sources/fix-crash-in-excerpts.patch

tar zxvf sphinx-0.9.8.rc2.tar.gz

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

patch –p1 <../fix-crash-in-excerpts.patch     #补丁

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 <string.h>

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

本文由转载于博客园http://www.bwdianying.com

内容概要:本文档提供了关于“微型车间生产线的设计与生产数据采集试验研究”的毕业设计复现代码,涵盖从论文结构生成、机械结构设计、PLC控制系统设计、生产数据采集与分析系统、有限元分析、进度管理、文献管理和论文排版系统的完整实现。通过Python代码和API调用,详细展示了各个模块的功能实现和相互协作。例如,利用SolidWorks API设计机械结构,通过PLC控制系统模拟生产流程,使用数据分析工具进行生产数据的采集和异常测,以及利用进度管理系统规划项目时间表。 适合人群:具有机械工程、自动化控制或计算机编程基础的学生或研究人员,尤其是从事智能制造领域相关工作的人员。 使用场景及目标:①帮助学生或研究人员快速搭建和理解微型车间生产线的设计与实现;②提供完整的代码框架,便于修改和扩展以适应不同的应用场景;③作为教学或科研项目的参考资料,用于学习和研究智能制造技术。 阅读建议:此资源不仅包含详细的代码实现,还涉及多个学科领域的知识,如机械设计、电气控制、数据分析等。因此,在学习过程中,建议读者结合实际操作,逐步理解每个模块的功能和原理,并尝试调整参数以观察不同设置下的系统表现。同时,可以参考提供的文献资料,深入研究相关理论和技术背景。
本次的学生体质健康信息管理网站,按照用户的角色可以分为教师与学生,后台设置管理员角色来对学生的信息进行管理。,设计如下: 1、后台管理系统 后台管理系统主要是为该系统的管理员提供信息管理服务的系统,具体包括的功能模块如下: (1)管理员信息管理 (2)教师信息管理 (3)学生信息管理 (4)健康信息统计(图形化进行健康,亚健康等学生的信息数量统计) 2、教师角色的功能模块设计 教师角色所需要的功能模块主要包括了如下的一些内容: (1)个人资料修改 (2)学生体质健康管理:录入相关数据,包括但不限于身高、体重、肺活量、视力等生理指标以及运动能力、身体成分、骨密度等健康指标,并且设置健康,亚健康状态 (3)学生健康建议:根据体质信息,进行学生健康的建议 (4)健康预警:对健康出问题的学生,进行健康预警 (5)饮食和锻炼情况管理,查看 3、学生角色 学生角色可以通过该信息网站看到个人的基本信息,能够看到教师给与学生的健康建议等,功能模块设计如下: (1)个人资料修改 (2)我的健康建议查看 (3)我的健康预警 (4)饮食和锻炼情况管理,记录平时的饮食和锻炼情况 完整前后端源码,部署后可正常运行! 环境说明 开发语言:Java后端 框架:ssm,mybatis JDK版本:JDK1.8+ 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:eclipse/idea Maven包:Maven3.3+ 部署容器:tomcat7.5+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值