Sphinx是一个开源搜索引擎,允许全文搜索。最着名的是非常有效地对大数据执行搜索。要索引的数据通常可以来自非常不同的来源:SQL数据库,纯文本文件,HTML文件,邮箱等。 Sphinx的一些主要功能包括:
- 高索引和搜索性能
- 高级索引和查询工具
- 高级结果集后处理
- 经验证的可扩展性,高达数十亿个文档,TB级数据和每秒数千个查询
- 轻松集成SQL和XML数据源,SphinxQL,SphinxAPI或SphinxSE搜索接口
- 通过分布式搜索轻松扩展
优势
1.高速建索引
2.高性能搜索 搜索2-4G数据不超过0.1秒
3.处理海量数据
下载地址
一.安装sphinx
centos下载文档https://sphinxsearch.com/docs/manual-2.3.2.html#installing-redhat
sphinx-2.2.1-1.rhel6.x86_64.rpm下载地址
二.创建测试数据库
看到上面已经报错了 需要先建立数据库
mysql -u root -p连接数据库
报错了ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
可以到宝塔面板mysql配置上添加
重启mysql
再次登录即可
可以先修改数据库密码
use mysql;
update user set password=password("你的密码") where user="root";
flush privileges;
然后重启mysql;
导入数据库 SOURCE /usr/share/doc/sphinx-2.2.1/example.sql;
三.配置sphinx
cd /etc/sphinx/
vi sphinx.conf
#
# Minimal Sphinx configuration sample (clean, simple, functional)
#
source src1
{
type = mysql
sql_host = localhost
sql_user = 数据库账号
sql_pass = 数据库密码
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
sql_query_info = SELECT * FROM documents WHERE id=$id
}
index test1
{
source = src1
path = /var/lib/sphinx/test1
docinfo = extern
charset_type = utf-8
}
index testrt
{
type = rt
rt_mem_limit = 32M
path = /var/lib/sphinx/testrt
charset_type = utf-8
rt_field = title
rt_field = content
rt_attr_uint = gid
}
indexer
{
mem_limit = 128M
}
searchd
{
listen = 9312
listen = 9306:mysql41
log = /var/log/sphinx/searchd.log
query_log = /var/log/sphinx/query.log
read_timeout = 5
max_children = 30
pid_file = /var/run/sphinx/searchd.pid
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
workers = threads # for RT to work
binlog_path = /var/lib/sphinx/
}
四.管理索引
sudo indexer --all
配置定时任务
crontab -l查看定时任务
crontab -e编辑定时任务
@hourly /usr/bin/indexer --rotate --config /etc/sphinx/sphinx.conf --all
五.启动sphinx
六.测试搜索功能
SELECT * FROM test1 WHERE MATCH('test document'); SHOW META;
解决办法
在上述结果可以看出,Sphinx发现从我们的2场比赛test1
索引我们的测试句子。 该SHOW META;
命令显示以及在句子中每个关键字的点击。 让我们搜索一些关键字。
CALL KEYWORDS ('test one three', 'test1', 1);
在结果上面可以看到,在test1的指数,Sphinx发现:
- 5个匹配在3个文档中的关键字'test'
- 2在1个文档中匹配关键字“1”
- 0匹配0个文档中的关键字'three'