Sphinx+PHP搜尋服務

來源:互聯網
上載者:User
隨著自己電影網站資源逐漸增多,增加電影資源搜尋服務成為必然。直接操作資料庫的搜尋,IO口請求增多減低了搜尋效能。之前項目中有sphinx的使用基礎,加之支援中文檢索服務,最後決定採用基於sphinx的Coreseek搜尋服務。

下載安裝步驟【本人採用 linux環境下 4.1版本,系統支援mysql和xml資料來源】:

  1. coreseek下載地址,下載 coreseek-4.1-beta.tar.gz 包

  2. 解壓gz包,tar zxvf coreseek-4.1-beta.tar.gz

  3. 編譯安裝 mmseg【中文分詞包】

    1. ./bootstrap

    2. ./configure --prefix=/usr/local/mmseg3

    3. make && make install

  4. 編譯安裝 coreseek

    1. sh buildconf.sh #輸出的warning資訊可以忽略,如果出現error則需要解決

    2. ./configure --prefix=/usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql #with-mmseg-libs就是mmseg中文分詞路徑

    3. make && make install

電影網站更新周期比較長,sphinx採用主索引+增量索引方式進行索引,最後合并兩個索引檔案。下面開始部署自己的搜尋設定檔:

  1. 進入coreseek安裝目錄下的etc檔案,建立或修改 .conf設定檔

  2. 配置source源

    1. source movie
      {
      type = mysql
      sql_host = localhost #mysql資料庫host
      sql_user = root #mysql使用者
      sql_pass = #mysql使用者密碼
      sql_db = movie #movie
      sql_port = 3306 # optional, default is 3306
      sql_query_pre = SET NAMES utf8

      #建立增量索引
      sql_query_pre = REPLACE INTO movie_sph_counter SELECT 1, MAX(id) FROM movie
      sql_query = SELECT id, UNIX_TIMESTAMP(cdate) AS date ,id AS movie_id ,name, year, type,status,sync_status FROM movie WHERE id<=( SELECT max_movie_id FROM movie_sph_counter WHERE counter_id=1 )

      #搜尋返回欄位
      sql_attr_uint = movie_id
      sql_attr_uint = year
      sql_attr_uint = type
      sql_attr_uint = date
      sql_attr_uint = status
      sql_attr_uint = sync_status
      sql_field_string = name

      sql_query_info_pre = SET NAMES utf8 #命令列查詢時,設定正確的字元集
      sql_query_info = SELECT * FROM movie WHERE id=$id #命令列查詢時,從資料庫讀取未經處理資料資訊
      }

      #增量索引源
      source delta : movie
      {
      sql_query_pre = SET NAMES utf8
      sql_query = SELECT id, UNIX_TIMESTAMP(cdate) AS date ,id AS movie_id ,name , year, type ,status,sync_status FROM movie WHERE id>( SELECT max_movie_id FROM movie_sph_counter WHERE counter_id=1 )
      sql_query_post_index = REPLACE INTO movie_sph_counter SELECT 1, MAX(id) FROM movie
      }

  3. 配置索引

    1. #index定義
      index movie
      {
      source = movie #對應的source名稱
      path = /usr/local/coreseek/var/data/movie #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
      docinfo = extern
      mlock = 0
      morphology = none
      min_word_len = 1
      html_strip = 0

      #中文分詞配置,詳情請查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
      charset_dictpath = /usr/local/mmseg/etc/ #BSD、Linux環境下設定,/符號結尾 mmseg路徑

      charset_type = zh_cn.utf-8 #中文編碼
      }

      index delta : movie
      {
      source = delta
      path = /usr/local/coreseek/var/data/movie_delta #注意!!不要和主索引路徑名稱一樣

      docinfo = extern
      mlock = 0
      morphology = none
      min_word_len = 1
      html_strip = 0

      charset_dictpath = /usr/local/mmseg/etc/
      charset_type = zh_cn.utf-8
      }

  4. 配置搜尋服務

    1. #searchd服務定義
      searchd
      {
      listen = 9312 #連接埠號碼,可以自己定義
      read_timeout = 5
      max_children = 30
      max_matches = 1000
      seamless_rotate = 0
      preopen_indexes = 0
      unlink_old = 1

      compat_sphinxql_magics=0
      pid_file = /usr/local/coreseek/var/log/searchd_mysql.pid #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
      log = /usr/local/coreseek/var/log/searchd_mysql.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
      query_log = /usr/local/coreseek/var/log/query_mysql.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
      binlog_path = #關閉binlog日誌
      }

  5. 執行命令建立索引: /usr/local/coreseek/bin/indexer -c movie.conf --all

  6. 後台開啟搜尋服務運行:/usr/local/coreseek/bin/searchd -c movie.conf

  7. 建立定時任務,執行增量索引:/usr/local/coreseek/bin/indexer -c csft_movie.conf delta --rotate

  8. 建立定時任務,合并索引:/usr/local/coreseek/bin/indexer -c csft_movie.conf --merge movie delta --merge-dst-range deleted 0 0 --rotate

  9. 至此基於sphinx+mysql的搜尋服務已經搭建完畢,接下來就是根據sphinxapi.php開發搜尋介面代碼……

第一次自己搭建sphinx搜尋服務,最後測試網站搜尋,速度杠杠的。

特此分享,希望對大家有所協助

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.