分詞搜索 sphinx+php+mysql


sphinx3.1.1的安裝與使用

  1. 下載sphinx3.1.1
    • wget http://sphinxsearch.com/files/sphinx-3.1.1-612d99f-linux-amd64.tar.gz
  2. 解壓 
    • tar zxf sphinx-3.1.1-612d99f-linux-amd64.tar.gz
  3. 改名 sphinx 並移動到 /usr/local/
    • mv sphinx-3.1.1 sphinx
    • mv sphinx /usr/local/
  4. 到sphinx目錄下創建 data,log文件夾
    • cd /usr/local/sphinx
    • mkdir data && mkdir log
  5. 在/usr/local/sphinx/etc 編寫 sphinx.conf 配置文件
    • vim /usr/local/sphinx/etc/sphinx.conf
    • #
      # Minimal Sphinx configuration sample (clean, simple, functional)
      #
      
      source src1
      {
          type                = mysql
          sql_host            = localhost
          sql_user            = root
          sql_pass            = root
          sql_db              = test
          sql_port            = 3306    # optional, default is 3306
          sql_query_pre       = SET NAMES utf8
          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                    = /usr/local/sphinx/data/test1
          min_word_len            = 1
          ngram_len               = 1
          ngram_chars             = U+3000..U+2FA1F
      }
      
      indexer
      {
          mem_limit        = 128M
      }
      
      searchd
      {
              listen                  = 9312
              listen                  = 9306:mysql41
              log                     = /usr/local/sphinx/log/searchd.log
              query_log               = /usr/local/sphinx/log/query.log
              read_timeout            = 5
              max_children            = 30
              pid_file                = /usr/local/sphinx/log/searchd.pid
              seamless_rotate         = 1
              preopen_indexes         = 1
              unlink_old              = 1
              binlog_path             = /usr/local/sphinx/data/
      }
  6. 在test數據庫中 運行/usr/local/sphinx/etc目錄下的example.sql文件
    • 進入mysql
    • use test;
    • source /usr/local/sphinx/etc/example.sql
  7. 添加索引
    • /usr/local/sphinx/bin/indexer -c  /usr/local/sphinx/etc/sphinx.conf test1
    • /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf test1 --rotate  // 重新生成索引命令
  8. 運行sphinx
    • /usr/local/sphinx/bin/searchd -c  /usr/local/sphinx/etc/sphinx.conf
    • /usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf --stop  //停止sphinx命令

  9. php操作sphinx
    • 復制/usr/local/sphinx/api/ 目錄下的 sphinxapi.php
    • $sphinx = new SphinxClient();
      $q      = $_GET['key'] ?? 'test'; //搜索關鍵字
      // 3.1已經棄用了setMatchMode!直接寫查詢語法就可以
      // 如果要匹配字符串中任意一個詞或字使用如下寫法
      // '"string1" | "string2" | "string3"'

      // '@(title,content) string' @括號中的是要搜索的字段 可以寫多個或單個

      // '^$string$' 表示全部匹配 類似mysql中的 fieldName = 'string'
      // 更多用法可以參考正則表達式或者官方文檔

      // 中文分詞擴展建議使用scws,官網安裝和使用教程說明很詳細,(不過sphinx自帶的一元分詞已經夠用了,一般不需要scws
      //http://www.xunsearch.com/scws/
      $sql = ""; $host = "127.0.0.1"; $port = 9312; $index = "test1"; $sphinx->SetServer($host, $port); $sphinx->SetConnectTimeout(10); $sphinx->SetArrayResult(true); $res = $sphinx->Query($q, $index); print_r($res);

       運行結果如下:

結束,記得數據庫數據改變后需重新生成索引


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM