Sphinx是开源的全文本检索引擎,它以高效搜索大数据而闻名。它能从不同的数据源生成索引:数据库(MySQL,PostgreSQL),纯文本文件、HTML文件等等。
Sphinx的主要特性: 检索速度快 高级索引和查询工具 高级结果集后处理(post-processing) 支持数据量大,每秒钟可以执行几千次查询 非常容易集成SQL和XML数据源,和SphinxQL、SphinxAPI、SphinxSE检索接口 容易扩展为分布式搜索
下面我们安装Sphinx和MySQL,然后使用SQL例子文件测试,熟悉Sphinx的基本流程。
第一步、安装MySQL 如果你没有安装MySQL,安装MySQL: sudo apt-get update sudo apt-get install mysql-server 安装过程中应该需要输入root密码。
第二步、安装Sphinx 执行如下命令: sudo apt-get install sphinxsearch 安装完成之后不急着启动,我们还需要配置sphinx。
第三步、创建测试数据库 测试数据库使用sphinx自带的SQL文件,需要把它导入到MySQL中。 登录到MySQL命令行: mysql -u root -p 输入root密码,命令行提示符改为 mysql>。 创建一个叫test的数据库: mysql> CREATE DATABASE test; 导入测试SQL文件: mysql> SOURCE /etc/sphinxsearch/example.sql; 退出MySQL命令行: mysql> quit 现在test数据库中已经有数据了。
第四步、配置Sphinx 创建编辑sphinx.conf配置文件: sudo vim /etc/sphinxsearch/sphinx.conf Sphinx配置文件包含3个基本的配置块,它们是index,searchd,和source,各块在下面列出,把每块的内容拷贝到sphinx.conf中。 source块包含数据的类型,连接到MySQL的用户名和密码。下面sql_query查询语句的第一列应该为唯一主键ID,SQL查询在每次索引执行,然后把数据导出到Sphinx索引文件。下面列出了source块的每个字段的意思: sql_host:MySQL的主机,可以是localhost,也可以是远程主机IP或域名。 sql_user:MySQL的用户名。 sql_pass:MySQL对应用户名的密码 sql_db:存储数据的数据库名称 sql_query:SQL查询语句 source src1 { type = mysql sql_host = localhost sql_user = root sql_pass = password # 改为你的密码 sql_db = test sql_port = 3306 # mysql端口默认是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包含要索引的数据源和存储数据的路径。 source:上面的source块 src1 path:保存索引的路径 charset_type:索引使用的字符集,例如utf-8 index test1 { source = src1 path = /var/lib/sphinxsearch/data/test1 docinfo = extern charset_type = sbcs } searchd包含Sphinx服务运行时使用的端口和其他设置。 listen:sphinx监听的端口,这里使用9312端口 query_log:查询日志 pid_file:sphinx进程的PID文件 max_matches:每次查询的最大匹配 searchd { listen = 9312 # Port to listen on log = /var/log/sphinxsearch/searchd.log query_log = /var/log/sphinxsearch/query.log read_timeout = 5 max_children = 30 pid_file = /var/run/sphinxsearch/searchd.pid max_matches = 1000 seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 binlog_path = /var/lib/sphinxsearch/data } 把上面三块配置代码拷贝到sphinx.conf中。
第五步、把数据添加到Sphinx索引 使用上面的配置文件添加索引: sudo indexer --all 现在已经把test数据中数据添加到索引中了,如果在添加完成之后有新数据添加到test数据库中,还需要运行上面命令把索引更新到最新。可以设置cron任务自动更新索引: crontab -e 选择一个编辑器,把下面一样拷贝到文件最后: @hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf --all 上面的cronjob每一小时执行一次indexer命令。
第六步、启动Sphinx 在默认情况下Sphinx后台进程是关闭的,编辑/etc/default/sphinxsearch打开: sudo vim /etc/default/sphinxsearch START=no改为yes: START=yes 启动Sphinx服务: sudo service sphinxsearch start
第七步、测试搜索 使用search命令: search my test document 上面只是简单的命令行搜索,你可以在PHP,Perl,Python,Ruby和Java语言中使用SphinxAPI执行搜索。 使用Sphinx你可以很方便的为你的网站加入自定义搜索,关于Sphinx更多信息,看项目首页。
|