Sphinx 在 Linux 下的安裝與基本配置

Sphinx 在 Linux 下的安裝與基本配置

  • Sphinx
  • Linux
  • Mysql

1.下載

Sphinx 官網:http://sphinxsearch.com/
wget http://sphinxsearch.com/files/sphinx-2.2.10-release.tar.gz

安裝

解壓壓縮包

tar zxvf sphinx-2.2.10-release.tar.gz
cd sphinx-2.2.10-release

找到 mysql 的安裝目錄,我的是在 /usr/bin/mysql 執行 /usr/lcoal/sphinx 爲 sphinx 的安裝目錄。

sudo ./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql
make 
make install

不出問題的話應該已經安裝成功了

其他參數的配置

 --with-mysql-includes=/usr/local/mysql/include/mysql/
 --with-mysql-libs=/usr/local/mysql/lib/mysql/
 --with-mmseg=/usr/local/mmseg/
 --with-mmseg-includes=/usr/local/mmseg/include/mmseg/
 --with-mmseg-libs=/usr/local/mmseg/lib/

配置

找到 sphinx 的安裝目錄 /usr/local/sphinx/etc .複製一份 sphinx.conf.dist 爲 test.conf
打開文件對照註釋編寫配置文件。由於都是英文,這裏將經常用到的一些配置做解釋如下:

數據源配置解析:

source 
{
     # 數據源類型 mysql,pgsql,mssql,xmlpipe,xmlpipe2,odbc
     type           = mysql
     # -------------------------連接sql數據源的一些配置---------------------------
     sql_host        = localhost
     sql_user        = root
     sql_pass       = 123456
     sql_db           = test
     sql_port         = 3306
     #  使用 unix sock連接可以使用這個
     #sql_sock      = /tmp/mysql.sock

     # --------------------------mysql 相關配置----------------------------------------

     # mysql 與 sphinx 之間的交互,0/32/2048/32768  無/使用壓縮協議/握手後切換到ssl/Mysql 4.1版本身份認證。
     mysql_connect_flags   = 32
     ## 當mysql_connect_flags設置爲2048(ssl)的時候,下面幾個就代表ssl連接所需要使用的幾個參數。
     # mysql_ssl_cert        = /etc/ssl/client-cert.pem
     # mysql_ssl_key     = /etc/ssl/client-key.pem
     # mysql_ssl_ca      = /etc/ssl/cacert.pem

     #---------------------------mssql 相關配置----------------------------------------
     # 是否使用 windows 登陸
     # mssql_winauth     = 1
     # 使用unicode還是單字節數據
     # mssql_unicode     = 1

     #----------------------------odbc 相關配置-------------------------------------------
     odbc_dsn      = DBQ=C:\data;DefaultDir=C:\data;Driver={Microsoft Text Driver (*.txt; *.csv)};

     #-----------------------------sql 相關配置--------------------------------------------
     # sql某一列的緩衝大小,一般是針對字符串來說的
     # sql_column_buffers    = content=12M, comments=1M
     # 索引的 sql 執行前需要執行的操作,比如設置字符串爲 utf8
     sql_query_pre     = SET NAMES utf8
     # 索引的 sql 執行語句
     sql_query       =  SELECT id, name, age FROM test
     # 聯合查詢
     # sql_joined_field是增加一個字段,這個字段是從其他表查詢中查詢出來的。
     # 如果是query,則返回id和查詢字段,如果是payload-query,則返回id,查詢字段和權重
     # 查詢需要按照id進行升序排列
     # sql_joined_field  = tags from query; SELECT docid, CONCAT('tag',tagid) FROM tags ORDER BY docid ASC
     # sql_joined_field  = wtags from payload-query; SELECT docid, tag, tagweight FROM tags ORDER BY docid ASC

     #----------------------------字段屬性的配置(用於過濾和排序)----------------------------------------
     # uint無符號整型屬性
     sql_attr_uint       = id
     # 布爾值屬性
     # sql_attr_bool     = is_deleted
     # 長整型屬性(有負數用 bigint)
     # sql_attr_bigint       = my_bigint_id
     # 時間戳屬性,經常被用於做排序
     sql_attr_timestamp  = date_added
     # 字符串排序屬性。一般我們按照字符串排序的話,我們會將這個字符串存下來進入到索引中,然後在查詢的時候比較索引中得字符大小進行排序。
     # 但是這個時候索引就會很大,於是我們就想到了一個方法,我們在建立索引的時候,先將字符串值從數據庫中取出,暫存,排序。
     # 然後給排序後的數組分配一個序號,然後在建立索引的時候,就將這個序號存入到索引中去。這樣在查詢的時候也就能完成字符串排序的操作。
     # 這,就是這個字段的意義。
     # sql_attr_str2ordinal  = author_name
     # 浮點數屬性
     # sql_attr_float        = lat_radians
     # sql_attr_float        = long_radians
     # 字符串屬性
     # sql_attr_string       = stitle
     # 文檔詞彙數記錄屬性。比如下面就是在索引建立的時候增加一個詞彙數的字段
     # sql_attr_str2wordcount    = stitle
  }

     # sphinx 的 source 有繼承屬性,也就是說共有的部分可以寫在父級數據源中,比如數據庫連接配置信息
     source main_0: main
   {
       sql_ranged_throttle = 100
   }

索引配置解析:

   index test1
  {
       # 索引類型,包括有plain,distributed和rt。分別是普通索引/分佈式索引/增量索引。默認是plain。
       # type          = plain
       # 索引數據源
       source          = src1
       # 索引文件存放路徑
       path            =/usr/local/sphinx/var/data/src1
       # 字符集編碼類型,可以爲sbcs,utf-8
       charset_type        =  utf-8
       # 字符表和大小寫轉換規則
       # 'sbcs' default value is
       # charset_table     = 0..9, A..Z->a..z, _, a..z, U+A8->U+B8, U+B8, U+C0..U+DF->U+E0..U+FF, U+E0..U+FF
       # 'utf-8' default value is
       # charset_table     = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
   }

搜索服務searchd 配置

   searchd
 {
   # 監聽端口
   listen          = 9312
   listen          = 9307:mysql4
   # 監聽日誌路徑
   log             = /usr/local/sphinx/var/log/searchd.log
   # 查詢日誌路徑
   query_log       = /usr/local/sphinx/var/log/query.log
   # 客戶端讀超時時間
   read_timeout    = 5
   # 客戶端持久時間
   client_timeout  = 300
   #並行執行搜索數量
   max_children    = 0
   #進程 pid 文件
   pid_file        = /usr/local/sphinx/var/log/searchd.pid
   #當進行索引輪換的時候,可能需要消耗大量的時間在輪換索引上。
   # 啓動了無縫輪轉,就以消耗內存爲代價減少輪轉的時間
   seamless_rotate = 1
   # 索引預開啓,強制重新打開所有索引文件
   preopen_indexes = 1
   # 索引輪換成功之後,是否刪除以.old爲擴展名的索引拷貝
   unlink_old      = 1
   # 多值屬性MVA更新的存儲空間的內存共享池大小
   mva_updates_pool = 1M
   #網絡通訊時允許的最大的包的大小
   max_packet_size = 8M
   # 每次查詢允許設置的過濾器的最大個數
   max_filters     = 256
   # 單個過濾器允許的值的最大個數
   max_filter_values = 4096
   # 每次批量查詢的查詢數限制
   max_batch_queries = 32
   # 多處理模式(MPM)。 可選項;可用值爲none、fork、prefork,以及threads。 默認在Unix類系統爲form,Windows系統爲threads。
   workers         = form
}

開啓sphinx

  1. 生成索引

    /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/test.conf --all
    
  2. 打開 sphinx 進程

    /usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf
    

參考

  1. http://www.cnblogs.com/yjf512/p/3598332.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章