Sphinx和Coreseek中文搜索引擎的安裝

sphinx是一個全文檢索引擎,coreseek則是基於sphinx開發的、增加了中文分詞功能的搜索引擎。最新版本的sphinx是免安裝的,只需要到 sphinx官網 下載相應版本的文件即可。而coreseek的版本較舊,因此安裝稍微複雜一些,在此做一下記錄。

目錄介紹

  • 安裝目錄:/usr/local/coreseek
  • 索引存放目錄:/home/coreseek/data
  • 日誌存放目錄:/home/coreseek/log

安裝mmseg

mmseg目錄下,運行以下命令

./configure --prefix=/usr/local/mmseg
make && make install

安裝csft

csft目錄下,運行以下命令

./configure --prefix=/usr/local/coreseek --with-mmseg=/usr/local/mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/
make && make install

編輯csft.conf文件

進入/usr/local/coreseek/etc目錄下,新建csft.conf文件(文件名可以隨意起)並打開。下面給出一個可運行的最小文件配置。

source src1
{
    type                    = mysql
    sql_host                = mysql的ip地址
    sql_user                = root
    sql_pass                = root
    sql_db                  = 數據庫名稱
    sql_port                = 3306
    sql_query_pre           = SET NAMES utf8
    sql_query               = SELECT id, content FROM table1 # sql查詢語句
}

index src1
{
    source                  = src1
    path                    = /home/coreseek/data/src1 # 存放該索引的位置
    docinfo                 = extern
    mlock                   = 0
    morphology              = none
    min_word_len            = 1
    html_strip              = 0
    charset_dictpath        = /usr/local/mmseg/etc/
    charset_type            = zh_cn.utf-8
}

indexer
{
    mem_limit               = 128M
}

searchd
{
    listen                  = 9312
    read_timeout            = 5
    max_children            = 30
    max_matches             = 1000
    pid_file                = /home/coreseek/log/searchd.pid # pid文件位置
    log                     = /home/coreseek/log/searchd.log # searchd服務的日誌位置
    query_log               = /home/coreseek/log/query.log # 記錄查詢內容日誌的位置
}

生成全部索引

/usr/local/coreseek/bin目錄下,運行命令./indexer -c ../etc/csft.conf --all建立所有索引。

啓動coreseek搜索進程

進入/usr/local/coreseek/bin目錄,運行命令./searchd -c ../etc/csft.conf啓動coreseek搜索進程。

增量索引

如果數據庫中數據是不斷增長的,每次重建所有索引會比較耗時,因此可以採用增量索引+定期重建全部索引的方式來維護索引。增量索引的基本思想如下:
新建一個數據表sph_counter,用來維護主索引和增量索引的界限。主索引每次建立的時候,更新數據表中的max_doc_id,然後重建id小於max_doc_id的數據索引(即全部數據的索引);增量索引每次建立的時候,建立id大於max_doc_id的數據索引,然後更新max_doc_id。更新索引使用定時任務crontab完成。主索引每天更新一次,增量索引時間可以設短一點。在查詢內容的時候,在全部索引中查詢。
數據表sph_counter的建表語句如下:

CREATE TABLE `sph_counter` (
  `counter_id` int(1) NOT NULL COMMENT '標識不同的數據表',
  `max_doc_id` bigint(21) NOT NULL COMMENT '每個索引表的最大ID,會實時更新',
  PRIMARY KEY (`counter_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

csft.conf文件配置的部分內容如下所示:

source src_main
{
    ……省略
    sql_query_pre   = REPLACE INTO sph_counter SELECT 1,MAX(id) FROM table1
    sql_query       = SELECT id, content FROM table1 where \
        id <= (SELECT max_doc_id FROM sph_counter WHERE counter_id = 1)
}

source src_delta:src_main
{
    sql_query_pre   =   
    sql_query       = SELECT id, content FROM table1 where \
        id > (SELECT max_doc_id FROM sph_counter WHERE counter_id = 1)
    sql_query_post  = UPDATE sph_counter \
        SET max_doc_id = (SELECT MAX(id) FROM table1) WHERE counter_id = 1 
}

index src_main
{
    source          = src_main
    path            = /home/sphinx/data/src_main
}

index src_delta:src_main
{
    source          = src_delta
    path            = /home/sphinx/data/src_delta
}
……省略

命令彙總

以下命令均在/usr/local/coreseek/bin目錄下。

  • 啓動搜索進程:./searchd -c ../etc/csft.conf
  • 關閉搜索進程:./searchd -c ../etc/csft.conf --stop
  • 生成全部索引:./indexer -c ../etc/csft.conf --all --rotate(如果searchd進程未運行,則不用加–rotate參數)
  • 生成特定索引:./indexer -c ../etc/csft.conf 索引名 --rotate(如果searchd進程未運行,則不用加–rotate參數)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章