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

安装日历_安装包_linux 安装sphinx

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_

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复