1. 程式人生 > >lnmp+coreseek實現站內全文檢索(安裝篇)

lnmp+coreseek實現站內全文檢索(安裝篇)

lec into .... 第一次 undefine 庫類 rwx rtm ocs

  • 軟件安裝包

    安裝環境

  • 系統環境
    • centos7.2
    • 1核2G
  • 軟件環境
    • coreseek-3.2.14
    • lnmp1.5
  • 安裝mmseg

    • 更新依賴包和安裝編譯環境
    yum -y install m4 autoconf automake libtool
    yum -y install gcc gcc-c++ wget
    yum -y install mysql-devel

    安裝coreseek

    tar -xzvf coreseek-3.2.14.tar.gz
    cd coreseek-3.2.14
    cd mmseg-3.2.14/
    ./bootstrap
    ./configure --prefix=/usr/local/mmseg3
    make
    make install
    
    cd ../csft-3.2.14/
    sh buildconf.sh
    ./configure --prefix=/usr/local/coreseek --without-python --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql --host=arm
    make
    make install

    <font color=‘red‘>在安裝csft的過程中出現了三種錯誤情況,錯誤情況如下錯誤記錄,可以參考修改即可</font>

    配置coreseek配置文件

    配置文件主要修改的幾個地方如下,具體的修改信息請參見 coreseek配置文件 目錄的進行配置

    source src1 
    {     
    type = mysql                                #數據庫類型
    sql_host = localhost                    # MySQL主機IP
    sql_user = root                             # MySQL用戶名
    sql_pass = 123                          # MySQL密碼
    sql_db   =  test                        # MySQL數據庫
    sql_port = 3306                     # MySQL端口
    sql_sock = /tmp/mysql.sock              #如果是linux下需要開啟,指定sock文件
    sql_query_pre = SET NAMES UTF8      # MySQL檢索編碼
    sql_query_pre = SET SESSION query_cache_type=OFF    #關閉緩存
    sql_query   = \                             #獲取數據的SQL語句 
    SELECT id, title, content FROM post
    #sql_attr_uint = group_id               #對排序字段進行註釋
    #sql_attr_timestamp = date_added       #對排序字段進行註釋
    sql_query_info      = SELECT * FROM post WHERE id=$id
    }                                           #這行不需要修改
    source srclthrottled:srcl               #繼承主數據源
    主數據源索引:
    index text1
    {   
    source = src1                           #索引源聲明
    charset_type = utf-8                #數據編碼(設置成utf8)
    charset_table =                     #上面指定了utf-8,這裏需要開啟
    }
    增量索引
    index testlstemmed:test1        #先進行註釋
    index distl                         #分布式也註釋掉
    索引器設置
    indexer 
    { 
    mem_limit = 256M # 內存大小限制 默認是 32M, 推薦為 256M 
    }                                       #其他用默認即可
    sphinx服務進程searchd的相關配置
    searchd {
    }                                       #全部用默認的就可以了

    除了上述的配置項外還需要單獨配置幾項(如果你是安裝的sphinx則進行上述配置即可,如果是coreseek則還需要配置下述內容)

    index test1
    {
    #stopwords                      = G:\data\stopwords.txt
    #wordforms                      = G:\data\wordforms.txt
    #exceptions                         = /data/exceptions.txt
    #charset_type                       = sbcs
    添加下面這兩行,意思是把中文分詞加入到配置文件中
    charset_type        = zh_cn.utf-8
    charset_dictpath    = /usr/local/mmseg/etc/    #你安裝mmseg的目錄
    }

    數據庫操作

    // 創建數據庫
    create database test;
    // 創建數據表
    userinfo | CREATE TABLE `userinfo` (
      `id` int(4) NOT NULL AUTO_INCREMENT,
      `name` varchar(10) NOT NULL,
      `age` int(3) NOT NULL,
      `sex` enum(‘女‘,‘男‘) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4
    // 插入數據
    INSERT INTO `userinfo` VALUES (1,‘張三‘,12,‘女‘),(2,‘李四‘,13,‘男‘),    
    (3,‘小明‘,12,‘女‘),(4,‘小紅‘,13,‘女‘),(5,‘小四‘,12,‘女‘),(6,‘章澤天‘,13,‘女‘);
    

    創建索引數據(indexer)

    // 第一次創建索引
    /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all
    // 第二次創建所以(當我們第一次創建索引之後,對數據表做了新的操作再按照上面的方式生成索引是會多增加一個參數)
    /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf  -rotate option

    如果上述的操作執行正確,則會提示如下信息

    Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]
    Copyright (c) 2007-2011,
    Beijing Choice Software Technologies Inc (http://www.coreseek.com)
    
     using config file ‘/usr/local/coreseek/etc/csft.conf‘...
    WARNING: no such index ‘-rotate‘, skipping.
    WARNING: no such index ‘option‘, skipping.
    total 0 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
    total 0 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg

    測試索引數據(search)

    /usr/local/coreseek/bin/search ‘小‘

    正常情況下會出現下述信息

    Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]
    Copyright (c) 2007-2011,
    Beijing Choice Software Technologies Inc (http://www.coreseek.com)
    
     using config file ‘/usr/local/coreseek/etc/csft.conf‘...
    index ‘test1‘: query ‘小 ‘: returned 3 matches of 3 total in 0.004 sec
    
    displaying matches:
    1. document=3, weight=1
    2. document=4, weight=1
    3. document=5, weight=1
    
    words:
    1. ‘小‘: 3 documents, 3 hits

    啟動searchd服務

    該服務是可以在/usr/local/coreseek/etc/csft.conf文件中的searchd配置項中配置,默認服務的端口已經配置,可以不單獨做配置

    // 啟動服務
    /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf
    // 檢測服務啟動情況
    [root@test ~]# netstat -anp | grep 9312
    tcp        0      0 0.0.0.0:9312            0.0.0.0:*               LISTEN      31672/searchd

    創建測試代碼

    測試代碼可以參見分享文件中的 測試代碼 目錄

    require ‘./api/sphinxapi.php‘;
    $sphinx = new SphinxClient();
    $sphinx->SetServer(‘127.0.0.1‘, 9312);
    $sphinx->SetArrayResult(true);
    $sphinx->SetMatchMode(SPH_MATCH_ALL);
    $sphinx->SetSortMode(SPH_SORT_RELEVANCE);
    $result = $sphinx->query(‘小‘, ‘*‘);
    var_dump($result);

    查詢出的結果如下

    array(10) {
      ["error"]=>
      string(0) ""
      ["warning"]=>
      string(0) ""
      ["status"]=>
      int(0)
      ["fields"]=>
      array(3) {
        [0]=>
        string(4) "name"
        [1]=>
        string(3) "age"
        [2]=>
        string(3) "sex"
      }
      ["attrs"]=>
      array(0) {
      }
      ["matches"]=>
      array(3) {
        [0]=>
        array(3) {
          ["id"]=>
          int(2)
          ["weight"]=>
          string(1) "1"
          ["attrs"]=>
          array(0) {
          }
        }
        [1]=>
        array(3) {
          ["id"]=>
          int(3)
          ["weight"]=>
          string(1) "1"
          ["attrs"]=>
          array(0) {
          }
        }
        [2]=>
        array(3) {
          ["id"]=>
          int(4)
          ["weight"]=>
          string(1) "1"
          ["attrs"]=>
          array(0) {
          }
        }
      }
      ["total"]=>
      string(1) "3"
      ["total_found"]=>
      string(1) "3"
      ["time"]=>
      string(5) "0.003"
      ["words"]=>
      array(1) {
        ["小"]=>
        array(2) {
          ["docs"]=>
          string(1) "3"
          ["hits"]=>
          string(1) "3"
        }
      }
    }

    coreseek錯誤記錄

    安裝coerseek問題一

    cd ../csft-3.2.14/????? 
    
    sh buildconf.sh
    
    ./configure --prefix=/usr/local/coreseek --without-python --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql --host=arm
    
    ?vi src/sphinxexpr.cpp? #然後將所有的T val = ExprEval ( this->m_pArg, tMatch ).....修改為T val =this->ExprEval ( this->m_pArg, tMatch ),共有三處。

    安裝coreseek錯誤二

    make[2]: *** [tokenizer_zhcn.o] Error 1
    make[2]: Leaving directory `/home/zyf/zyfwork/csft3.1b3/src’
    make[1]: *** [all] Error 2
    make[1]: Leaving directory `/home/zyf/zyfwork/csft3.1b3/src’
    make: *** [all-recursive] Error 1
    
    /usr/local/sphinx/src/sphinx.cpp:15557: undefined reference to `libiconv_open’
    libsphinx.a(sphinx.o)(.text+0x53a01):/usr/local/sphinx/src/sphinx.cpp:15575: undefined
    reference to `libiconv’
    libsphinx.a(sphinx.o)(.text+0x53a28):/usr/local/sphinx/src/sphinx.cpp:15581: undefined
    reference to `libiconv_close’
    collect2: ld returned 1 exit status
    make[2]: * [indexer] Error 1
    make[2]: Leaving directory `/usr/local/sphinx/src’
    make[1]: * [all] Error 2
    make[1]: Leaving directory `/usr/local/sphinx/src’
    make: * [all-recursive] Error 1
    
    修改 configure 文件把 #define USE_LIBICONV 0 最後的數值由1改為0

    安裝coreseek問題三

    db_interface_mysql.h:32:25: 致命錯誤:mysql/mysql.h:沒有那個文件或目錄
    // ubuntu系統解決方案
    sudo apt-get install libmysqlclient-dev
    // centos7解決方案
    sudo yum install mysql-devel

    參考鏈接

    參考鏈接一
    參考鏈接二
    參考鏈接三

    coreseek額外說明

    安裝路徑

    /usr/local/coreseek

    配置目錄

    /usr/local/coreseek/etc/

    執行程序目錄

    /usr/local/coreseek/bin/

    配置文件說明

    進入配置目錄,你會找到如下幾個文件

    -rw-r--r--. 1 root root   905 10月 13 21:27 example.sql
    -rw-r--r--. 1 root root 18954 10月 13 21:27 sphinx.conf.dist
    -rw-r--r--. 1 root root   956 10月 13 21:27 sphinx-min.conf.dist

    將sphinx.conf.dist文件復制一份名為csft.conf即可.其余文件可以不管.

    執行程序說明

    進入執行程序目錄可以看到如下幾個文件,具體參考請見sphinx文檔

    -rwxr-xr-x. 1 root root 7032560 10月 13 21:27 indexer // 生成索引程序
    -rwxr-xr-x. 1 root root 6650552 10月 13 21:27 indextool // 調試程序
    -rwxr-xr-x. 1 root root 6740544 10月 13 21:27 search  // 搜索程序
    -rwxr-xr-x. 1 root root 7970448 10月 13 21:27 searchd  // 提供客戶端查詢索引服務
    -rwxr-xr-x. 1 root root 6370256 10月 13 21:27 spelldump // 提取字典內容

    分享文件目錄說明

    ├── api.zip // coreseek類文件(該文件和測試代碼目錄下的api.zip是一樣的)
    ├── coreseek-3.2.14.tar.gz // coreseek安裝程序文件
    ├── coreseek配置文件 
    │?? └── csft.conf // 上述 配置coreseek配置文件 步驟中提交到的配置文件
    ├── 測試代碼 
    │?? ├── api.zip
    │?? └── index.php // 測試代碼
    └── 測試數據庫
        └── test.sql // 測試數據庫

    lnmp+coreseek實現站內全文檢索(安裝篇)