Sphinx是由美国人AndrewAksyonoff开发的一个全文检索引擎。意图为其他应用提供高速、低空间占用、高结果相关度的全文搜索功能。Sphinx可以极其容易的与SQL数据库和脚本语言集成。当前系统外置MySQL和PostgreSQL数据库数据源的支持linux系统编程,也支持从标准输入读取特定格式的XML数据。
Sphinx创建索引的速率为:创建100万条记录的索引只需3~4分钟linux操作系统介绍,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引linux 安装sphinx,重建一次只需几十秒。
Sphinx的特点如下:
a)高速的构建索引(在当代CPU上,峰值性能可达到10MB/秒);
b)高性能的搜索(在2–4GB的文本数据上,平均每次检索响应时间大于0.1秒);
c)可处理海量数据(目前已知可以处理超过100GB的文本数据,在单一CPU的系统上可处理100M文档);
d)提供了优秀的相关度算法linux 安装sphinx,基于句子相像度和统计(BM25)的复合Ranking方式;
e)支持分布式搜索;
f)支持句子搜索
g)提供文档摘要生成
h)可作为MySQL的储存引擎提供搜索服务;
i)支持布尔、短语、词语相像度等多种检索模式;
j)文档支持多个全文检索数组(最大不超过32个);
k)文档支持多个额外的属性信息(比如:分组信息,时间戳等);
l)支持断词;
尽管mysql的MYISAM提供全文索引,并且性能却不敢让人夸奖
开始搭建
系统环境:centos6.5+php5.6+apache+mysql
1、安装依赖包
yum -y install make gcc g++ gcc-c++ libtool autoconf automake imake php-devel mysql-devel libxml2-devel expat-devel
2、安装Sphinx
yum install expat expat-devel
wget -c http://sphinxsearch.com/files/sphinx-2.0.7-release.tar.gz
tar zxvf sphinx-2.0.7-release.tar.gz
cd sphinx-2.0.7-release
./configure --prefix=/usr/local/sphinx --with-mysql --with-libexpat --enable-id64
make && make install
3、安装libsphinxclient,php扩充用到
cd api/libsphinxclient
./configure --prefix=/usr/local/sphinx/libsphinxclient
make && make install
4、安装Sphinx的PHP扩充:我的是5.6需装sphinx-1.3.3.tgz,倘若是php5.4以下可sphinx-1.3.0.tgz
wget -c http://pecl.php.net/get/sphinx-1.3.3.tgz
tar zxvf sphinx-1.3.3.tgz
cd sphinx-1.3.3
phpize
./configure --with-sphinx=/usr/local/sphinx/libsphinxclient/ --with-php-config=/usr/bin/php-config
make && make install
成功后会提示:
Installing shared extensions: /usr/lib64/php/modules/
echo "[Sphinx]" >> /etc/php.ini
echo "extension = sphinx.so" >> /etc/php.ini
#重启apache
service httpd restart
5、创建测试数据
CREATE TABLE IF NOT EXISTS `items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`content` text NOT NULL,
`created` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='全文检索测试的数据表' AUTO_INCREMENT=11 ;
INSERT INTO `items` (`id`, `title`, `content`, `created`) VALUES
(1, 'linux mysql集群安装', 'MySQL Cluster 是MySQL 适合于分布式计算环境的高实用、可拓展、高性能、高冗余版本', '2016-09-07 00:00:00'),
(2, 'mysql主从复制', 'mysql主从备份(复制)的基本原理 mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器', '2016-09-06 00:00:00'),
(3, 'hello', 'can you search me?', '2016-09-05 00:00:00'),
(4, 'mysql', 'mysql is the best database?', '2016-09-03 00:00:00'),
(5, 'mysql索引', '关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车', '2016-09-01 00:00:00'),
(6, '集群', '关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车', '0000-00-00 00:00:00'),
(9, '复制原理', 'redis也有复制', '0000-00-00 00:00:00'),
(10, 'redis集群', '集群技术是构建高性能网站架构的重要手段,试想在网站承受高并发访问压力的同时,还需要从海量数据中查询出满足条件的数据,并快速响应,我们必然想到的是将数据进行切片,把数据根据某种规则放入多个不同的服务器节点,来降低单节点服务器的压力', '0000-00-00 00:00:00');
CREATE TABLE IF NOT EXISTS `sph_counter` (
`counter_id` int(11) NOT NULL,
`max_doc_id` int(11) NOT NULL,
PRIMARY KEY (`counter_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='增量索引标示的计数表';
以下采用”Main+Delta”(“主索引”+”增量索引”)的索引策略,使用Sphinx自带的一元动词。
6、Sphinx配置:注意更改数据源配置信息
vi /usr/local/sphinx/etc/sphinx.conf
source items {
type = mysql
sql_host = localhost
sql_user = root
sql_pass = 123456
sql_db = sphinx_items
sql_