萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Coreseek (Sphinx + 中文分詞) 安裝配置與 PHP 整合實戰

Coreseek 基於 Sphinx 搜索引擎集成 MMSEG 中文分詞,解決 MySQL 中文全文檢索性能差、不支持分詞痛點。本文記錄 CentOS 下 Coreseek 3.2.14 從源碼編譯安裝、分詞/索引/搜索測試、example.conf 核心配置、searchd 服務管理、索引重建腳本、PHP SphinxAPI 查詢整合全流程,並整理 3 大高頻報錯解決方案。

一、架構組件

  • MMSEG:中文分詞庫,提供詞庫與分詞算法
  • CSFT (Coreseek Full Text):基於 Sphinx 0.9.9 修改的搜索服務端,包含 indexer(索引器)、searchd(守護進程)、search(命令行測試)

二、源碼編譯安裝

1. 安裝 MMSEG

wget https://www.coreseek.cn/uploads/csft/4.0/coreseek-3.2.14-beta.tar.gz
tar -zxvf coreseek-3.2.14-beta.tar.gz
cd coreseek-3.2.14-beta/mmseg-3.2.14
./bootstrap
./configure --prefix=/usr/local/mmseg3
make && make install
cd ..

2. 安裝 Coreseek (CSFT)

cd csft-3.2.14
sh buildconf.sh
./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=/usr/local/mysql
make && make install
cd ..

三、功能驗證


# 1. 測試分詞
cd /usr/local/src/coreseek-3.2.14/testpack
cat var/test/test.xml
/usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml

# 2. 建立索引
/usr/local/coreseek/bin/indexer -c etc/csft.conf --all

# 3. 命令行搜索測試
/usr/local/coreseek/bin/search -c etc/csft.conf

四、生產配置:example.conf 核心段落解析


source example
{
    type            = mysql
    sql_host        = localhost
    sql_user        = ***
    sql_pass        = ***
    sql_db          = ***
    sql_port        = 3306
    sql_sock        = /tmp/mysql.sock
    sql_query_pre   = SET NAMES utf8
    # 主查詢:第一列必須為 id(文檔 ID),後續為需索引字段
    sql_query       = SELECT id, content FROM table_name
    # 命令行 search 讀取原始數據用
    sql_query_info_pre = SET NAMES utf8
    sql_query_info  = SELECT * FROM table WHERE id=$id LIMIT 100
}

index example
{
    source          = example
    path            = /usr/local/coreseek/var/data/example/
    docinfo         = extern
    mlock           = 0
    morphology      = none
    min_word_len    = 1
    html_strip      = 0
    # 中文分詞關鍵配置
    charset_dictpath = /usr/local/mmseg3/etc/
    charset_type    = zh_cn.utf-8
}

indexer
{
    mem_limit       = 128M
}

searchd
{
    listen          = 9312
    read_timeout    = 5
    max_children    = 60
    max_matches     = 1000
    seamless_rotate = 0
    preopen_indexes = 0
    unlink_old      = 1
    pid_file        = /usr/local/coreseek/var/log/searchd_example.pid
    log             = /usr/local/coreseek/var/log/searchd_example.log
    query_log       = /usr/local/coreseek/var/log/query_example.log
}

五、服務管理與索引維護

1. 啟動 searchd(必須先啟動,否則 --rotate 會報錯)


# 確保 pid 文件目錄存在
mkdir -p /usr/local/coreseek/var/log
touch /usr/local/coreseek/var/log/searchd_example.pid

# 啟動
/usr/local/coreseek/bin/searchd --config /usr/local/coreseek/etc/example.conf

2. 全量建索引(含熱加載)


/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/example.conf --all --rotate

輸出 rotating indices: succesfully sent SIGHUP to searchd 表示熱加載成功。

3. 定時增量/全量重建(寫入 crontab)


# 每小時增量(需配置 sql_query_range + sql_range_step)
0 * * * * /usr/local/coreseek/bin/indexer -c /path/example.conf --rotate delta_index
# 每天凌晨全量
0 3 * * * /usr/local/coreseek/bin/indexer -c /path/example.conf --all --rotate

六、PHP 整合查詢示例


require_once('sphinxapi.php');
$s = new SphinxClient();
$s->SetServer('127.0.0.1', 9312);
$s->SetConnectTimeout(1);
$s->SetMatchMode(SPH_MATCH_BOOLEAN);  // 支持 EXTENDED/BOOLEAN/PHRASE 等模式
$s->SetLimits($offset, $page_size);
$s->SetSortMode(SPH_SORT_EXTENDED, "good_count DESC, @id DESC");
$s->SetArrayResult(true);
$res = $s->Query($keyword, '*');  // '*' 表示查所有索引
$res_list = $res['matches'];

七、高頻報錯與解決方案

報錯現象原因解決
error while loading shared libraries: libmysqlclient.so.18動態庫找不到echo "/usr/local/mysql/lib" >> /etc/ld.so.conf && ldconfig
FATAL: failed to open /path/.tmp.splsource 中 sql_sock 路徑錯誤在 source 塊添加 sql_sock = /tmp/mysql.sock
WARNING: failed to open pid_file ... indices NOT rotatedpid 文件不存在或內容為空1) touch pid 文件 2) 根本原因:未啟動 searchd,先啟動 searchd 再 --rotate

八、避坑提示

  • 數據量大時 max_matches 需調大,否則結果截斷
  • 中文分詞依賴 charset_dictpath 正確指向 mmseg etc 目錄,必須以 / 結尾
  • 生產環境建議啟用 seamless_rotate=1 實現無縫輪轉
  • 監控 query_log 分析慢查詢、調優分詞詞庫
copyright © 萬盛學電腦網 all rights reserved