Sphinx 安装与使用
Sphinx 优点
- 高速索引(接近10M/S)
- 高速搜索(2-4G文本搜索耗时不到0.1秒)
- 高可用性(单CPU支持100GB文本,100M文档)
- 提供相关性排名、分布式搜索、文档摘要(高亮显示)
Sphinx 缺点
- 必须有主键
- 主键必须是整形
- 不负责数据存储
- 配置复杂
Sphinx是介于PHP和mysql的中间层,它提供比mysql更专业的搜索功能,性能更高,因为存在于mysql之前,可以更好的缓解数据库压力
安装
sudo apt-get install sphinxsearch -y
安装完成后在 / etc / sphinxsearch / 目录下有以下4个文件

example.sql 数据源,用于测试
sphinx.conf.dist 完整的配置,包含全部配置
sphinx.conf.sample 配置参考
sphinx-min.conf.dist 精简配置,包含主要配置
我们来看看 sphinx-min.conf.dist 中的配置项
拷贝sphinx-min.conf.dist 到当前目录下 sphinx.conf
源配置:
source src1
{
type = mysql sql_host = localhost
sql_user = test
sql_pass =
sql_db = test
sql_port = # optional, default is 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
}
源块包含源代码,用户名和密码到MySQL服务器的类型。 所述的第一列sql_query应该是唯一的ID。 SQL查询将在每个索引上运行,并将数据转储到Sphinx索引文件。 下面是每个字段和源块本身的描述。
type:数据源索引的类型。 在我们的例子,这是MySQL。 其他支持的类型包括pgsql,mssql,xmlpipe2,odbc等。sql_host:主机名MySQL的主机。 在我们的例子,这是localhost。 这可以是域或IP地址。sql_user:数据库用户名sql_pass:密码sql_db:存储数据的数据库的名称sql_query:查询从数据库到索引那转储数据。
索引配置:
index test1
{
source = src1
path = /var/lib/sphinxsearch/data/test1
}
source:源块的名称。 在我们的例子,这是src1的 。path:路径保存索引。
端口和常量配置:
searchd
{
listen =
listen = :mysql41
log = /var/lib/sphinxsearch/log/searchd.log
query_log = /var/lib/sphinxsearch/log/query.log
read_timeout =
max_children =
pid_file = /var/run/sphinxsearch/searchd.pid
seamless_rotate =
preopen_indexes =
unlink_old =
workers = threads # for RT to work
binlog_path = /var/lib/sphinxsearch/data
}
该searchd的组件包含端口和其他变量来运行Sphinx守护进程。
listen:这Sphinx守护进程运行的端口,后面的协议。 在我们的例子,这是9306:mysql41。 已知的协议是:Sphinx (SphinxAPI)和:mysql41(SphinxQL)query_log:路径保存查询日志pid_file:到Sphinx守护进程的PID文件的路径。seamless_rotate:同时旋转海量数据预缓存的指标,防止searchd的摊位。preopen_indexes:是否强行盘前在启动时的所有索引。unlink_old:是否删除成功旋转旧的索引拷贝。
管理索引
将数据添加到Sphinx索引
sudo indexer --all
Sphinx 2.2.9-id64-release (rel22-r5006)
Copyright (c) 2001-2015, Andrew Aksyonoff
Copyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com) using config file '/etc/sphinxsearch/sphinx.conf'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.032 sec, 5922 bytes/sec, 122.75 docs/sec
skipping non-plain index 'testrt'...
total 4 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 12 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
表示创建索引成功
在生产环境中,有必要保持索引为最新。 为了做到这一点,让我们创建一个cronjob。 首先,打开crontab
crontab -e
可能会询问您要使用哪个文本编辑器。 选择你喜欢的; 在本教程中,我们使用nano 。
随后的cronjob将每小时运行一次,并使用我们之前创建的配置文件向索引添加新数据。 将其复制并粘贴到文件末尾,然后保存并关闭文件
@hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf --all
现在Sphinx已经完全设置和配置,我们可以启动服务并尝试
启动 sphinx
默认情况下,Sphinx守护程序关闭。 首先,我们将改变这一行启用START=no到START=yes中/etc/default/sphinxsearch
sudo sed -i 's/START=no/START=yes/g' /etc/default/sphinxsearch
然后,使用systemctl重启Sphinx守护进程
sudo systemctl restart sphinxsearch.service
要检查Sphinx守护程序是否正确运行,请运行
sudo systemctl status sphinxsearch.service

测试
现在,一切都设置好了,让我们测试搜索功能。 使用MySQL接口连接到SphinxQL(在端口9306上)。 您提示将改变为mysql>
mysql -h0 -P9306
搜索:test1 代表sphinx配置文件中索引名称 match(搜索条件)
select * from test1 where match('another');
测试关键字
CALL KEYWORDS ('test one three', 'test1', 1);
输出:
+------+-----------+------------+------+------+
| qpos | tokenized | normalized | docs | hits |
+------+-----------+------------+------+------+
| 1 | test | test | 3 | 5 |
| 2 | one | one | 1 | 2 |
| 3 | three | three | 0 | 0 |
+------+-----------+------------+------+------+
3 rows in set (0.00 sec)
在结果上面可以看到,在test1的指数,Sphinx发现:
- 5个匹配在3个文档中的关键字'test'
- 2在1个文档中匹配关键字“1”
- 0匹配0个文档中的关键字'three'
Sphinx 安装与使用的更多相关文章
- Linux Sphinx 安装与使用
一.什么是 Sphinx? Sphinx 是一个基于SQL的全文检索引擎,可以结合 MySQL,PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序 更容易实现专业化 ...
- sphinx 安装使用
一.linux(centos)下安装源码包 1.下载 wget http://sphinxsearch.com/files/sphinx-2.3.1-beta.tar.gz 2.安装 切换目录到 ...
- Sphinx安装配置应用
Sphinx 是由俄罗斯人Andrew Aksyonoff开发的一个全文搜索引擎.意图为其他应用提供高速.地空间占用.高结果相关度的全文搜索功能.Sphinx可以非常容易的与SQL数据库和脚本语言集成 ...
- sphinx安装记录 转
[转]sphinx服务器安装及配置详解 安装PHP sphinx扩展 1.架构:ip192.168.0.200 redhat5.4(64位)2.安装 #cd /usr/local/src #y ...
- ubuntu下 mysql5.6.4 +sphinx安装
安装mysql 5.6.4 下载源码 安装cmake sudo apt-get install cmake 进入mysql源码包: 创建mysql用户与用户组 groupadd mysql usera ...
- coreseek(sphinx)安装1(xml数据源配置和测试)
1.下载coreseek-3.2.14-32版本.网址:http://www.coreseek.cn/products-install/install_on_windows/ (有详细的安装说明) ...
- CoreSeek Sphinx 安装
1.centos Sphinx 先安装 yum install postgresql-libs yum install unixODBC CoreSeek 安装: http://www.coresee ...
- Sphinx安装流程及配合PHP使用经验
1.什么是Sphinx Sphinx是俄罗斯人Andrew Aksyonoff开发的高性能全文搜索软件包,在GPL与商业协议双许可协议下发行. 全文检索式指以文档的全部文本信息作为检索对象的一种信息检 ...
- Sphinx 安装与使用(1)-- 安装Coreseek
Coreseek就是Sphinx的中文版 官方网站 http://www.coreseek.cn/ 一.安装 1.修改LANG 永久修改: vim /etc/locale.conf LANG=&quo ...
随机推荐
- javascript 跨域请求详细分析(终极跨域解决办法)
自从我接触前端以来,接手的项目里面很大部分都是前后端分离的,后端只提供接口,前端根据后端接口渲染出实际页面.个人觉得这是一个挺好的模式,前后端各自负责各自的模块,分工明确,而且也给前端更大的发挥空间. ...
- Ubuntu16.04+CUDA8.0+cuDNN5.1+Python2.7+TensorFlow1.2.0环境搭建
软件版本说明:我选的Linux系统是Ubuntu16.04,CUDA用的8.0,Ubuntu16.04+CUDA8.0+cuDNN5.1+Python2.7只支持TensorFlow1.3.0以下的版 ...
- browser-sync第一次打开提示路径错误,path.js应该输出字符串;之后重启一直提示插入代码片段,插入后无效依然提示
网上找到gulp类似提示,是node版本问题. nvm派上用场, browser-sync@2.23.6,node用的8.3.0 解决办法: nvm install 7.8.0 nvm use 7.8 ...
- java面向对象编程(六)--四大特征之继承
本文将介绍继承.方法重载和方法覆盖.其中方法重载和方法覆盖是在讲多态时必须要清楚的一个知识点. 一.继承 1.继承的概念 继承可以解决代码复用,让我们的编程更加靠近人类思维.当多个类存在相同的属性(变 ...
- iOS tableView分割线高度自定义
1.系统自带的集中分割线的形式 myTableView.separatorStyle=UITableViewCellSeparatorStyleNone;(这个是去掉所有分割线)可以通过这个来设置 2 ...
- android用户信息保存
一.SharedPreferences key-value方式保存简单类型的数据.文件位置data/data/相应的包名/xml文件 保存 SharedPreferences preference = ...
- Flask+uwsgi+virtualenv环境配置
Linux系统版本: SLES12sp3 (阿里云) 1. 首先需要安装python-devel,否则后续安装会报错! rpm -qa|grep python-base 结果: python-base ...
- Session & Cookie小知识~
Cookie 一个HTTP cookie的(也称为网络Cookie,互联网的cookie,浏览器cookie,或者干脆饼干)是一小块从发送的数据的网站用户的并存储在用户的计算机上的网页浏览器,而用户浏 ...
- 20155208徐子涵《网络对抗》Exp2 后门原理与实践
20155208徐子涵<网络对抗>Exp2 后门原理与实践 基础问题回答 (1)例举你能想到的一个后门进入到你系统中的可能方式? 答:当我们在非官方网站上下载软件时,后门极有可能会进入我们 ...
- (26)基于cookie的登陆认证(写入cookie、删除cookie、登陆后所有域下的网页都可访问、登陆成功跳转至用户开始访问的页面、使用装饰器完成所有页面的登陆认证)
获取cookie request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age ...