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参数)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章