coreseek配置以及增量索引合并索引

2 篇文章 0 订阅

引导:本人是个php菜鸟,公司的业务并不繁琐,但是最近使用到了全文搜索,就想着用sphinx。
大致分为三个部分,1:安装;2配置:3调用api 。这里主要说一下配置及调用api。安装的步骤我之前单独写了一个帖子可以去看看,如果不太明白可以去官网,安装步骤说的很清楚,废话不多说,开始。
一、为什么要用增量索引?其实我个人认为对数据量小的业务来说用增量索引完全没有必要。可以定时重新生成索引就OK了。增量索引就是对 截至到上次生成的索引 以后添加的内容单独生成索引,这样数据量比较小,并且不影响业务处理,然后定期进行索引合并,为了保持数据统一性,还需要定期从新生成索引。
1、上次生成索引的id需要记录下来,可以用一张表来存储。
CREATE TABLEtbl_pre_coursevideo(
idint(11) NOT NULL DEFAULT '0',
maxidint(11) NOT NULL DEFAULT '0',
PRIMARY KEY (
id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、配置文件

source mysql
{
 type                    = mysql
    sql_host             = 127.0.0.1
    sql_user              = root
    sql_pass              = 123456
    sql_db                = test
    sql_port              = 3306
    sql_query_pre        = SET NAMES utf8
    sql_query_pre       = SET SESSION query_cache_type=OFF #如果这里报错去mysql配置文件修改
    sql_query_pre         = REPLACE INTO tbl_pre_coursevideo SELECT 1, MAX(id) FROM tbl_coursevideo    #在刚才新建的表中将当前索引生成的最多id存起来,为增量索引做准备。


    sql_query                = SELECT id,title,create_time, subtitle,content,type FROM tbl_coursevideo WHERE id <=(SELECT maxid FROM tbl_pre_coursevideo WHERE id=1)
   #上面这条sql可以分为两部分WHERE 之前,是对数据的查询(根据自己的业务来定)where之后,是对刚才的记录
   最大ID 的筛选

    sql_attr_uint            = id           #从SQL读取到的值必须为整数
     sql_attr_timestamp        = create_time #从SQL读取到的值必须为整数,作为时间属性


    sql_field_string          = title  #字符串字段(可全文搜索,可返回原始文本信息)  
     sql_field_string          = subtitle  #字符串字段(可全文搜索,可返回原始文本信息)  
     sql_field_string          = content  #字符串字段(可全文搜索,可返回原始文本信息)  
}
source increment : mysql
{
sql_query_pre = SET NAMES utf8
sql_query                = SELECT id,title,create_time, subtitle,content,type FROM  

tbl_coursevideo WHERE id >(SELECT maxid FROM tbl_pre_coursevideo WHERE id=1)
#这是增量索引的数据源sql。和上面保持一致,唯一的变化,就是where条件之后,这里查询的是大于上次重新生成索引的id,即:刚刚添加的数据
}


#index定义
index mysql
{
   source            = mysql             #对应的source名称
    path            = /usr/local/coreseek/var/data/mysql#请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    docinfo            = extern
    mlock            = 0
    morphology        = none
    min_word_len        = 1
    html_strip                = 0

    #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
    charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
    #charset_dictpath = etc/                             #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8
}


index increment : mysql
{
  source=increment

    path            = /usr/local/coreseek/var/data/increment
    charset_dictpath = /usr/local/mmseg3/etc/
    charset_type    = zh_cn.utf-8
}
#全局index定义
indexer
{
    mem_limit            = 128M
}


#searchd服务定义
searchd
{
    listen                  =   9312
    read_timeout        = 5
    max_children        = 30
    max_matches            = 1000
    seamless_rotate        = 0
    preopen_indexes        = 0
    unlink_old            = 1


    pid_file = /usr/local/coreseek/var/log/searchd_mysql.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

    log =/usr/local/coreseek/var/log/searchd_mysql.log       #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

    query_log =/usr/local/coreseek/var/log/query_mysql.log  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...


}

使用:
1、生成索引(一下命令都是我自己的安装环境路径,具体的修改成自己的)
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all #生成索引
这时tbl_pre_coursevideo 表里会增加一条记录。存放的就是你内容表中的最大id

2、
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf #开启后台进程

这时候对mysql数据源进行搜索的话其实已经是有数据的。
3、增量索引(内容表新增数据的前提)
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf increment --rotate #执行完成以后会提示生成几条增量索引数据,即你刚才在内容表添加的数据条数。这时候其实就可以测试你的增量索引成功没cl->Query($keyword, ‘increment ‘);调用api时可以用增量索引查询你刚添加的内容
4、合并索引

usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf
–merge mysql increment –rotate

cl->Query('查询的关键字', 'mysql'); //就能查询出来刚才的新添加的数据,以及以前的数据。

5、为了保持数据统一,还需要定时从新生成索引

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all --rotate
#--rotate 是不影响服务器搜索时可以添加这个属性

二、
1、调用api,这是我自己封装的,sphinxapi.php安装完成的文件里有这个类

require 'sphinxapi.php';

class Sphinx {

    private $host = '127.0.0.1';
    private $port = 9312;
    private $cl;

    /*
     * @desc 构造函数  初始化sphinx对象
     */

    public function __construct() {
        $this->cl = new SphinxClient ();
        $this->cl->SetServer($this->host, $this->port);
        $this->cl->SetConnectTimeout(1);
        $this->cl->SetArrayResult(true);
        $this->cl->SetMatchMode(SPH_MATCH_EXTENDED2);
        $this->cl->SetRankingMode(SPH_RANK_WORDCOUNT);
    }

    /*
     * @desc 搜索
     * @param $page  页数
     * @param $pagesize  条数
     * @param $keyword  搜索关键字
     * @param $source 索引源
     */

    public function search($keyword, $p, $pagesize) {
        $page = ($p - 1) * 10;
        $this->cl->SetLimits($page, $pagesize); //分页
        $res = $this->cl->Query($keyword, $source); //sphinx 查询

    }
  }

2、定时任务
yum install crontab //安装
crontab -e //打开编辑
然后定时 执行增量索引,合并索引,从新生成索引

住:如果说合并索引页成功了。但是查询出来的数据一直为空,那你就看看配置文件那

 path            = /usr/local/coreseek/var/data/increment #这里的配置,主索引是否和增量索引这只的路径一样,increment 就是索引的文件名,会在data文件夹下。

至此就讲了。如果有什么不会的,把这篇博客好好看看,包括注释,这都是我遇到的一些问题,都给注释了起来。如果有什么不明白的地方也可以给我留言,知无不尽。下次给大家讲一讲分词哪一块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值