Sphinx 安裝與使用

Sphinx 優勢mysql

  • 高速索引(接近10M/S)
  • 高速搜索(2-4G文本搜索耗時不到0.1秒)
  • 高可用性(單CPU支持100GB文本,100M文檔)
  • 提供相關性排名、分佈式搜索、文檔摘要(高亮顯示)

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=noSTART=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'
相關文章
相關標籤/搜索