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

浪子程式設計走四方發表於2018-10-18

coreseek安裝與簡單實用

安裝環境

  • 系統環境
    • centos7.2
    • 1核2G
  • 軟體環境

安裝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

在安裝csft的過程中出現了三種錯誤情況,錯誤情況如下錯誤記錄,可以參考修改即可

配置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:datastopwords.txt
#wordforms                      = G:datawordforms.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 // 測試資料庫

相關文章