lnmp+coreseek實現站內全文檢索(安裝篇)
coreseek安裝與簡單實用
安裝環境
-
系統環境
- centos7.2
- 1核2G
-
軟體環境
- coreseek-3.2.14
- ofollow,noindex" target="_blank">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
在安裝csft的過程中出現了三種錯誤情況,錯誤情況如下錯誤記錄,可以參考修改即可
配置coreseek配置檔案
配置檔案主要修改的幾個地方如下,具體的修改資訊請參見coreseek配置檔案 目錄的進行配置
source src1 { type = mysql#資料庫型別 sql_host = localhost# SQL/">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 tcp00 0.0.0.0:93120.0.0.0:*LISTEN31672/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 root905 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 root956 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 // 測試資料庫