博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LNMP+sphinx实现大数据秒查
阅读量:6257 次
发布时间:2019-06-22

本文共 3956 字,大约阅读时间需要 13 分钟。

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,如需转载请自行联系原作者
你可能感兴趣的文章
浅析 ThreadLocal
查看>>
Pycharm批量操作代码快捷键
查看>>
oracle备份与恢复
查看>>
LLDB调试器
查看>>
cordova Ionic 和cordova的区别是什么
查看>>
【ZZ】C 语言中的指针和内存泄漏 & 编写高效的C程序与C代码优化
查看>>
linux暂停一个在运行中的进程【转】
查看>>
设计安全的账号系统
查看>>
SP2 PRIME1 - Prime Generator
查看>>
eclipse maven项目错误
查看>>
Xcode export/upload error: Your session has expired. Please log in 解决方法
查看>>
Daily Scrum - 12/02
查看>>
创建和编辑 crontab 文件
查看>>
钉钉发消息
查看>>
centos7 防火墙端口增加白名单
查看>>
Lucky Sum
查看>>
城市承灾体脆弱性和易损性的影响因素
查看>>
2019.1.22 区块链论文翻译
查看>>
centos7上修改主机名
查看>>
样式技巧总结
查看>>