首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Sphinx 配置文件深度解析:數據源、索引與中文分詞實戰

     編輯:MySQL 綜合教學

配置文件結構總覽

Sphinx 配置採用段落式結構,核心三大塊:source(數據源)、index(索引)、searchd(搜索服務)。本文聚焦前兩者。

數據源配置

source test
{
    type            = mysql
    sql_host        = 127.0.0.1
    sql_user        = root
    sql_pass        = root
    sql_db          = test
    sql_port        = 3306

    sql_query_pre   = SET NAMES utf8
    sql_query       = SELECT id, name, add_time FROM tbl_test

    sql_attr_timestamp = add_time

    sql_query_info_pre = SET NAMES utf8
    sql_query_info  = SELECT * FROM tbl_test WHERE id=$id
}

關鍵指令說明

  • sql_query:核心抓取 SQL,第一列必須為唯一整數 ID
  • sql_attr_*:定義屬性(整數、浮點、時間戳、字符串、MVA),用於過濾、排序、分組
  • sql_query_info:僅供命令行調試用,搜索 API 不使用

索引配置

index test_index
{
    source          = test
    path            = /usr/local/coreseek/var/data/test
    docinfo         = extern
    charset_dictpath = /usr/local/mmseg3/etc/
    charset_type    = zh_cn.utf-8
    ngram_len       = 1
    ngram_chars     = U+3000..U+2FA1F
}

核心參數

  • path:索引文件前綴,生成 .spa/.spi/.spd 等文件
  • docinfo:extern 將屬性單獨存儲(推薦),inline 混存
  • charset_type:zh_cn.utf-8 啟用內置中文分詞,utf-8 需配合 ngram

中文分詞兩大模式

1. N-gram(單字切分)

charset_type = utf8
ngram_len    = 1
ngram_chars  = U+3000..U+2FA1F

無需詞典,索引體積大、召回率高、精準度低,適合通用搜索。

2. mmseg(詞典分詞)

charset_type    = utf8
charset_dictpath = /usr/local/mmseg3/etc/
ngram_len       = 0

需 uni.lib 詞典,精準度高、索引小,適合垂直領域。

實戰驗證流程

  1. 準備數據表 tbl_test(id, name, add_time)
  2. indexer --all 構建索引
  3. search -c sphinx.conf "關鍵詞" 命令行測試
  4. API 調用:$cl->Query("關鍵詞", "test_index")

常見坑點

  • ID 列非整數或不唯一 → 索引構建失敗
  • 屬性類型與 SQL 列類型不匹配 → 異常
  • 中文亂碼 → 檢查 sql_query_pre、charset_type、數據庫連接字符集
  • 索引未更新 → 定時任務跑 indexer --rotate 或實時索引 (RT Index)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved