在Ubuntu安裝和配置Sphinx

文件目錄  /etc/sphinxsearchphp

 

Ubuntu系統默認是配置有sphinx的,先檢查一下,別畫蛇添足。。。。。mysql

在開始本指南以前,您須要:linux

  • 一個Ubuntu 16.04服務器。git

  • sudo的一個非root用戶,您能夠經過如下設置本教程 。github

  • 安裝在服務器上,你能夠經過下面的第2步設置在MySQL 本教程 。sql

第1步 - 安裝Sphinx

在Ubuntu上安裝Sphinx很容易,由於它在本地軟件包存儲庫中。 使用安裝它apt-get 。不行能夠運行apt-get updateshell

sudo apt-get install sphinxsearch

如今您已經在服務器上成功安裝了Sphinx。 在啓動Sphinx守護進程以前,讓咱們進行配置。數據庫

第2步 - 建立測試數據庫

接下來,咱們將使用隨包提供的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的配置。

第3步 - 配置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文件,裏面有全部的變量在更詳細的解釋。

第4步 - 管理索引

在這一步中,咱們將數據添加到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已經徹底設置和配置,咱們能夠啓動服務並嘗試。

第5步 - 啓動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

你應該獲得相似下面的東西。

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守護程序即便在服務器從新啓動時也啓動。

第6步 - 測試

如今,一切都設置好了,讓咱們測試搜索功能。 使用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發現:

  • 5個匹配在3個文檔中的關鍵字'test'
  • 2在1個文檔中匹配關鍵字「1」
  • 0匹配0個文檔中的關鍵字'three'

如今你能夠離開MySQL shell了。

quit

結論

在本教程中,咱們向您展現瞭如何安裝Sphinx,並使用SphinxQL和MySQL進行簡單搜索。

您還能夠找到官方對於PHP,Perl,Python和Ruby和Java本地SphinxAPI實現 。 若是你正在使用的NodeJS,你也能夠使用該SphinxAPI包 。

經過使用Sphinx,您能夠輕鬆地添加自定義搜索到您的網站。 有關使用Sphinx的更多信息,請訪問該項目的網站 。

相關文章
相關標籤/搜索