文件目錄 /etc/sphinxsearchphp
Ubuntu系統默認是配置有sphinx的,先檢查一下,別畫蛇添足。。。。。mysql
在開始本指南以前,您須要:linux
在Ubuntu上安裝Sphinx很容易,由於它在本地軟件包存儲庫中。 使用安裝它apt-get
。不行能夠運行apt-get updateshell
sudo apt-get install sphinxsearch
如今您已經在服務器上成功安裝了Sphinx。 在啓動Sphinx守護進程以前,讓咱們進行配置。數據庫
接下來,咱們將使用隨包提供的SQL文件中的示例數據設置數據庫。 這將容許咱們測試Sphinx搜索之後工做。apache
讓咱們將示例SQL文件導入數據庫。 首先,登陸到MySQL服務器shell。npm
mysql -u root -p
提示時輸入MySQL root用戶的密碼。 您提示將改變爲mysql>
。
建立虛擬數據庫。 在這裏,咱們稱它爲測試 ,但你能夠將其命名爲任何你想要的。
CREATE DATABASE test;
導入示例SQL文件。
SOURCE /etc/sphinxsearch/example.sql;
而後離開MySQL shell。
quit
如今你有一個數據庫填充樣本數據。 接下來,咱們將定製Sphinx的配置。
Sphinx的配置應該是在一個名爲sphinx.conf
中/etc/sphinxsearch
。 配置包括那些運行必不可少的3個主要模塊: 索引 ,searchd的 ,和來源 。 咱們將提供一個示例配置文件供您使用,並解釋每一個部分,以便之後進行自定義。
首先,建立sphinx.conf
文件。
sudo nano /etc/sphinxsearch/sphinx.conf
這些指數 ,searchd的 ,和源塊的描述以下。 而後,在這個步驟結束時,對所有sphinx.conf
被包括爲你複製並粘貼到文件中。
源塊包含源代碼,用戶名和密碼到MySQL服務器的類型。 所述的第一列sql_query
應該是惟一的ID。 SQL查詢將在每一個索引上運行,並將數據轉儲到Sphinx索引文件。 下面是每一個字段和源塊自己的描述。
type
:數據源索引的類型。 在咱們的例子,這是MySQL。 其餘支持的類型包括pgsql,mssql,xmlpipe2,odbc等。sql_host
:主機名MySQL的主機。 在咱們的例子,這是localhost
。 這能夠是域或IP地址。sql_user
:用戶名MySQL的登陸。 在咱們的例子,這是根源 。sql_pass
:密碼爲MySQL用戶。 在咱們的示例中,這是根MySQL用戶的密碼。sql_db
:存儲數據的數據庫的名稱。 在咱們的例子,這是考驗 。sql_query
:查詢從數據庫到索引那轉儲數據。這是源塊:
sphinx.conf的源代碼塊
source src1 { type = mysql #SQL settings (for ‘mysql’ and ‘pgsql’ types) sql_host = localhost sql_user = root sql_pass = password 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 }
索引組件包含源和存儲數據的路徑。
在
source
:源塊的名稱。 在咱們的例子,這是src1的 。path
:路徑保存索引。sphinx.conf的索引塊
index test1 { source = src1 path = /var/lib/sphinxsearch/data/test1 docinfo = extern }
該searchd的組件包含端口和其餘變量來運行Sphinx守護進程。
listen
:這Sphinx守護進程運行的端口,後面的協議。 在咱們的例子,這是9306:mysql41。 已知的協議是:Sphinx (SphinxAPI)和:mysql41(SphinxQL)query_log
:路徑保存查詢日誌。pid_file
:到Sphinx守護進程的PID文件的路徑。seamless_rotate
:同時旋轉海量數據預緩存的指標,防止searchd的攤位。preopen_indexes
:是否強行盤前在啓動時的全部索引。unlink_old
:是否刪除成功旋轉舊的索引拷貝。searchd塊的sphinx.conf
searchd { listen = 9312:sphinx #SphinxAPI port listen = 9306:mysql41 #SphinxQL port 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 seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 binlog_path = /var/lib/sphinxsearch/data }
複製和粘貼的完整配置以下。 你須要下面來改變它惟一的變量是sql_pass
源塊,這是高亮顯示的變量。
完整的sphinx.conf文件
source src1 { type = mysql sql_host = localhost sql_user = root sql_pass = your_root_mysql_password sql_db = test sql_port = 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 = /var/lib/sphinxsearch/data/test1 docinfo = extern } searchd { listen = 9306:mysql41 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 seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 binlog_path = /var/lib/sphinxsearch/data }
探索更多的配置,你能夠看看在/etc/sphinxsearch/sphinx.conf.sample
文件,裏面有全部的變量在更詳細的解釋。
在這一步中,咱們將數據添加到Sphinx索引,並確保利用指數保持最新cron
。
首先,使用咱們以前建立的配置將數據添加到索引。
sudo indexer --all
你應該獲得相似下面的東西。
OutputSphinx 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.010 sec, 18552 bytes/sec, 384.50 docs/sec 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將每小時運行一次,並使用咱們以前建立的配置文件向索引添加新數據。 將其複製並粘貼到文件末尾,而後保存並關閉文件。
crontab
@hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf --all
如今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
你應該獲得相似下面的東西。
Output● sphinxsearch.service - LSB: Fast standalone full-text SQL search engine Loaded: loaded (/etc/init.d/sphinxsearch; bad; vendor preset: enabled) Active: active (running) since Tue 2016-07-26 01:50:00 EDT; 15s ago . . .
這也將確保Sphinx守護程序即便在服務器從新啓動時也啓動。
如今,一切都設置好了,讓咱們測試搜索功能。 使用MySQL接口鏈接到SphinxQL(在端口9306上)。 您提示將改變爲mysql>
。
mysql -h0 -P9306
讓咱們搜索一個句子。
SELECT * FROM test1 WHERE MATCH('test document'); SHOW META;
你應該獲得相似下面的東西。
Output+------+----------+------------+ | id | group_id | date_added | +------+----------+------------+ | 1 | 1 | 1465979047 | | 2 | 1 | 1465979047 | +------+----------+------------+ 2 rows in set (0.00 sec) +---------------+----------+ | Variable_name | Value | +---------------+----------+ | total | 2 | | total_found | 2 | | time | 0.000 | | keyword[0] | test | | docs[0] | 3 | | hits[0] | 5 | | keyword[1] | document | | docs[1] | 2 | | hits[1] | 2 | +---------------+----------+ 9 rows in set (0.00 sec)
在上述結果能夠看出,Sphinx發現從咱們的2場比賽test1
索引咱們的測試句子。 該SHOW META;
命令顯示以及在句子中每一個關鍵字的點擊。
讓咱們搜索一些關鍵字。
CALL KEYWORDS ('test one three', 'test1', 1);
你應該獲得相似下面的東西。
Output+------+-----------+------------+------+------+ | 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發現:
如今你能夠離開MySQL shell了。
quit
在本教程中,咱們向您展現瞭如何安裝Sphinx,並使用SphinxQL和MySQL進行簡單搜索。
您還能夠找到官方對於PHP,Perl,Python和Ruby和Java本地SphinxAPI實現 。 若是你正在使用的NodeJS,你也能夠使用該SphinxAPI包 。
經過使用Sphinx,您能夠輕鬆地添加自定義搜索到您的網站。 有關使用Sphinx的更多信息,請訪問該項目的網站 。