如何在Ubuntu 16.04和14.04上安装和配置Sphinx
时间:2019-05-19 01:26:33 来源:igfitidea点击:
Sphinx是一个简单、实用、开源的全文搜索服务器。
它是用c++编程语言编写的,可以与Linux和其他流行的操作系统一起工作。
本教程将在Ubuntu 16.04, 14.04 LTS操作系统上安装和配置Sphinx全文搜索服务器。
准备工作
在Ubuntu上安装MySQL服务器
步骤1 -安装Sphinx
在Ubuntu上安装Sphinx很容易,因为它在本地包存储库中。
在Ubuntu系统上使用apt-get包管理器安装它。
sudo add-apt-repository ppa:builds/sphinxsearch-rel22 sudo apt-get update sudo apt-get install sphinxsearch
步骤2 -导入MySQL数据库
让我们将示例SQL文件导入数据库。
首先,在MySQL服务器中创建一个名为test的数据库,然后恢复sphinx搜索包提供的数据库。
sudo mysqladmin -u root -p create test sudo mysql -u root -p test < /usr/share/doc/sphinxsearch/example-conf/example.sql
步骤3 -配置Sphinx
编辑sphinx配置文件,设置MySQL连接。
sudo vi /etc/sphinxsearch/sphinx.conf
source src1 { # data source type. mandatory, no default value # known types are mysql, pgsql, mssql, xmlpipe, xmlpipe2, odbc type = mysql ##################################################################### ## SQL settings (for 'mysql' and 'pgsql' types) ##################################################################### # some straightforward parameters for SQL source types sql_host = localhost sql_user = root sql_pass = secret sql_db = test sql_port = 3306 # optional, default is 3306
步骤4 -运行索引器
运行索引器从数据创建全文索引。
索引器是Sphinx的两个主要工具中的第一个。
它用于收集可搜索的数据。
$ sudo indexer --all Sphinx 2.2.11-id64-release (95ae9a6) Copyright (c) 2001-2016, Andrew Aksyonoff Copyright (c) 2008-2016, 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.006 sec, 30791 bytes/sec, 638.16 docs/sec indexing index 'test1stemmed'...
步骤5 -启动Sphinx
另外,将Sphinx服务器配置为在系统引导时自动启动。
使用下面的命令将START设置为yes。
sudo sed -i 's/START=no/START=yes/g' /etc/default/sphinxsearch
现在也第一次启动服务并检查状态。
service sphinxsearch start service sphinxsearch status
我们还可以在crontab中配置索引器,使其定期运行。
下面的crontab将每小时运行一次。
0 * * * * /usr/bin/indexer --rotate --all
步骤6 -使用Sphinx
让我们在Sphinx服务器上执行一些查询。
首先使用下面命令连接到Sphinx MySQL服务器。
mysql -h0 -P9306
现在逐个运行下面的命令并查看更改。
mysql> SELECT * FROM test1 WHERE MATCH('document'); mysql> INSERT INTO rt VALUES (1, 'adding', 'sample text here', 11); mysql> INSERT INTO rt VALUES (2, 'adding some more', 'sample text here', 22); mysql> SELECT gid/11 FROM rt WHERE MATCH('sample') GROUP BY gid; mysql> SELECT * FROM rt ORDER BY gid DESC; mysql> SELECT *, WEIGHT() FROM test1 WHERE MATCH('"document one"/1'); mysql> SHOW META; mysql> SET profiling=1; mysql> SELECT * FROM test1 WHERE id IN (1,2,4); mysql> SHOW PROFILE; mysql> SELECT id, id%3 idd FROM test1 WHERE MATCH('this is | nothing') GROUP BY idd; mysql> SHOW PROFILE; mysql> SELECT id FROM test1 WHERE MATCH('is this a good plan?'); mysql> SHOW PLAN; mysql> SELECT COUNT(*) FROM test1; mysql> CALL KEYWORDS ('one two three', 'test1'); mysql> CALL KEYWORDS ('one two three', 'test1', 1); mysql> SHOW TABLES;