LNMP+sphinx实现大数据秒查

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介:

Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎。意图为其他应用提供高速、低空间占用、高结果 相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式 的XML数据。


Sphinx的特性如下:

a)  高速的建立索引(在当代CPU上,峰值性能可达到10 MB/秒);

b)  高性能的搜索(在2 – 4GB 的文本数据上,平均每次检索响应时间小于0.1秒);

c)  可处理海量数据(目前已知可以处理超过100 GB的文本数据, 在单一CPU的系统上可处理100 M 文档);

d)  提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法;

e)  支持分布式搜索;

f)  支持短语搜索

g)  提供文档摘要生成

h)  可作为MySQL的存储引擎提供搜索服务;

i)  支持布尔、短语、词语相似度等多种检索模式;

j)  文档支持多个全文检索字段(最大不超过32个);

k)  文档支持多个额外的属性信息(例如:分组信息,时间戳等);

l)  支持断词;


虽然mysql的MYISAM提供全文索引,但是性能却不敢让人恭维,另外数据库毕竟不是很善于做这样的事情,我们需要把这些活让给更适合的程序去做,减少数据库的压力。因此采用Sphinx来做mysql的全文索引工具是一个很好的选择。这个星期主要来学习这个这个工具的使用,下面将学习过程大致的记录一下,做个备忘,也希望能对学习这个工具的其他朋友有所启发。


  1. 安装sphinx

1
2
3
4
5
6
7
8
9
wget http: //sphinxsearch .com /files/sphinx-2 .2.11-release. tar .gz
tar  -xf sphinx-2.2.11-release. tar .gz  &&  cd  sphinx-2.2.11-release
. /configure   --prefix= /usr/local/spinx  --with-mysql
make  &&  make  install
ln  -s  /usr/local/mysql/lib/libmysqlclient .so.18  /usr/lib64/
libsphinxclient 安装(PHP模块需要)
cd  api /libsphinxclient
. /configure  –prefix= /usr/local/sphinx
make  &&   make  install

2.安装php扩展

1
2
3
4
wget http: //pecl .php.net /get/sphinx-1 .3.0.tgz
tar  zxf sphinx-1.3.3.tgz &&  cd  sphinx-1.3.3
. /configure  --with-php-config= /usr/local/php/bin/php-config  --with-sphinx= /usr/local/sphinx/
make  &&   make  install


3.创建配置文件

1
cp  /usr/local/sphinx/etc/sphinx-min .conf.dist   /usr/local/sphinx/etc/sphinx .conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#
# Minimal Sphinx configuration sample (clean, simple, functional)
#
 
source  src1
{
         type                     = mysql
 
         sql_host                = localhost
         sql_user                = root
         sql_pass                = www.123
         sql_db                  =  test
         sql_port                = 3306   # optional, default is 3306
 
         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
}
 
 
index test1
{
         source                   = src1
         path                    =  /usr/local/spinx/var/data/test1
}
 
 
indexer
{
         mem_limit               = 32M
}
 
 
searchd
{
         listen                  = 9312
         listen                  = 9306:mysql41
         log                     =  /usr/local/spinx/var/log/searchd .log
         query_log               =  /usr/local/spinx/var/log/query .log
         read_timeout            = 5
         max_children            = 30
         pid_file                =  /usr/local/spinx/var/log/searchd .pid
         seamless_rotate         = 1
         preopen_indexes         = 1
         unlink_old              = 1
         workers                 = threads  # for RT to work
         binlog_path             =  /usr/local/spinx/var/data
}


4.创建索引并启动

1
2
/usr/local/spinx/bin/indexer   -c  /usr/local/spinx/etc/sphinx .conf --all
/usr/local/spinx/bin/searchd   -c  /usr/local/spinx/etc/sphinx .conf

5.查询验证

1
2
3
4
5
6
7
8
9
10
cd  /root/sphinx-2 .2.11-release /api
python  test .py   test
DEPRECATED: Do not call this method or, even better, use SphinxQL instead of an API
Query  'test '  retrieved 3 of 3 matches  in  0.000 sec
Query stats:
         'test'  found 5  times  in  3 documents
Matches:
1. doc_id=1, weight=2, group_id=1, date_added=2016-11-30 01:21:20
2. doc_id=2, weight=2, group_id=1, date_added=2016-11-30 01:21:20
3. doc_id=4, weight=1, group_id=2, date_added=2016-11-30 01:21:20


1
2
3
4
5
6
7
8
9
mysql>  select  * from documents;
+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+
id  | group_id | group_id2 | date_added          | title           | content                                                                   |
+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+
|  1 |        1 |         5 | 2016-11-30 01:21:20 |  test  one        | this is my  test  document number one. also checking search within phrases. |
|  2 |        1 |         6 | 2016-11-30 01:21:20 |  test  two        | this is my  test  document number two                                       |
|  3 |        2 |         7 | 2016-11-30 01:21:20 | another doc     | this is another group                                                     |
|  4 |        2 |         8 | 2016-11-30 01:21:20 | doc number four | this is to  test  groups                                                     |
+----+----------+-----------+---------------------+-----------------+--------------------



本文转自 shouhou2581314 51CTO博客,原文链接:http://blog.51cto.com/thedream/1878194,如需转载请自行联系原作者
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
关系型数据库 MySQL 应用服务中间件
手动部署LNMP环境(Alibaba Cloud Linux 2)
本场景带您体验如何在Alibaba Cloud Linux 2.1903 LTS 64位操作系统的云服务器上搭建LNMP环境。
289 0
|
6月前
|
关系型数据库 应用服务中间件 nginx
基于Docker的LNMP环境微服务搭建
基于Docker的LNMP环境微服务搭建
基于Docker的LNMP环境微服务搭建
|
关系型数据库 MySQL 应用服务中间件
快速搭建LNMP环境
Nginx是一款小巧而高效的Web服务器软件,可帮您在Linux系统下快速方便地搭建出LNMP Web服务环境。本教程介绍如何搭建LNMP环境,其中LNMP分别代表Linux、Nginx、MySQL和PHP。
408 2
|
关系型数据库 MySQL 应用服务中间件
Nginx__高级进阶篇之LNMP动态网站环境部署
Nginx__高级进阶篇之LNMP动态网站环境部署
186 0
|
应用服务中间件 PHP nginx
基于Anolis OS 3快速搭建LNMP环境制作KodBox
本教程介绍如何搭建LNMP环境,其中本实验的LNMP分别代表Anolis OS 3、Nginx、Mariadb和PHP。
232 0
|
关系型数据库 MySQL 应用服务中间件
centos7 配置LNMP环境
centos7 配置LNMP环境
140 0
|
6月前
|
API PHP 数据库
Docker六脉神剑(四) 使用Docker-Compose进行服务编排搭建lnmp环境
Docker六脉神剑(四) 使用Docker-Compose进行服务编排搭建lnmp环境
61 0
|
关系型数据库 MySQL Linux
Linux环境下LNMP架构实战案例
Linux环境下LNMP架构实战案例
103 0
|
弹性计算 关系型数据库 MySQL
基于ROS快速部署LNMP环境(CentOS 7)
本教程提供在阿里云云服务器ECS上基于CentOS 7.9操作系统搭建LNMP环境的指引。LNMP是应用广泛的网站服务系统,由四种免费的开源软件Linux、Nginx、MySQL和PHP组成。搭建好LNMP环境后,您可以在该ECS实例上搭建网站、访问网站
471 0