Sphinx 優勢mysql
Sphinx 缺點sql
Sphinx是介於PHP和mysql的中間層,它提供比mysql更專業的搜索功能,性能更高,由於存在於mysql以前,能夠更好的緩解數據庫壓力數據庫
安裝緩存
sudo apt-get install sphinxsearch -y
安裝完成後在 / etc / sphinxsearch / 目錄下有如下4個文件bash
example.sql 數據源,用於測試服務器
sphinx.conf.dist 完整的配置,包含所有配置less
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 = 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 }
源塊包含源代碼,用戶名和密碼到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 = 9312 listen = 9306:mysql41 log = /var/lib/sphinxsearch/log/searchd.log query_log = /var/lib/sphinxsearch/log/query.log read_timeout = 5 max_children = 30 pid_file = /var/run/sphinxsearch/searchd.pid seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 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發現: