5. MySQL数据源配置

如果是MySQL,需要设置读取数据输出字符集为UTF-8;请现将数据的字符集转换为UTF-8或者至少可以输出为UTF-8。


mysql> show variables like 'character_set_%';

+--------------------------+--------------------------------------------+

| Variable_name            | Value                                      |

+--------------------------+--------------------------------------------+

| character_set_client     | utf8                                       |

| character_set_connection | utf8                                       |

| character_set_database   | utf8                                       |

| character_set_filesystem | binary                                     |

| character_set_results    | utf8                                       |

| character_set_server     | utf8                                       |

| character_set_system     | utf8                                       |

| character_sets_dir       | /var/www/dream/mysql/share/mysql/charsets/ |

+--------------------------+--------------------------------------------+



root@CC-57:~# vi /usr/local/coreseek/etc/csft.conf

数据源定义:

source  main

{

     type                             = mysql

     sql_host                        = localhost

     sql_user                        = root

     sql_pass                        = xxxx

     sql_db                            = xxxx

      sql_port                         = 3306

     sql_query_pre                  = SET NAMES utf8                               #命令行查询时,设置正确的字符集,3.2.14开始支持

     sql_query                  = select id, title, connect from tablename     #sql_query第一列id需为整数

sql_query_info            = SELECT * FROM documents WHERE id=$id  #命令行查询时,从数据库读取原始数据信息

}


索引定义:


index main

{

source = main                                                                                                    #对应的source名称

path = /usr/local/coreseek/var/data/main

docinfo = extern

mlock = 0 morphology = none

min_word_len = 1

html_strip = 0

charset_dictpath = /usr/local/mmseg3/etc/                                                          #BSD、Linux环境下设置,/符号结尾

#charset_dictpath = etc/                                                                                      #Windows环境下设置,/符号结尾

charset_type = zh_cn.utf-8

}


重新建立索引:

root@CC-57:~# /usr/local/coreseek/bin/indexer --all

搜索测试:可以支持中文检索

root@CC-57:~# /usr/local/coreseek/bin/search 篮球

words:

1. '篮球': 1250 documents, 1272 hits


6. coreseek实时索引配置

  数据库中的数据很大,然后我有些新的数据后来加入到数据库中,也希望能够检索到,全部重新建立索引很消耗资源,这样需要用到主索引+增量索引的思路来解决,这个思路实现的主要原理就是设置俩个数据源和俩个索引。

a.创建一个索引器

 一个简单的实现是,在数据库中增加一个计数表,记录将文档集分为俩个部分的文档ID,每次重新构建主索引时,更新这个表

先在mysql中插入一个计数表:

mysql> create table sph_counter(counter_id int unsigned auto_increment primary key,max_doc_id int);

mysql> desc sph_counter;

+------------+------------------+------+-----+---------+----------------+

| Field      | Type             | Null | Key | Default | Extra          |

+------------+------------------+------+-----+---------+----------------+

| counter_id | int(10) unsigned | NO   | PRI | NULL    | auto_increment |

| max_doc_id | int(11)          | YES  |     | NULL    |                |

+------------+------------------+------+-----+---------+----------------+

2 rows in set (0.00 sec)


b. 再次修改配置文件

 主数据源,继承主数据源,主索引,继承索引(继承索引也就是增量索引)

 主数据源里面,需要把欲查询语句改成下面的语句

 root@CC-57:~# vi /usr/local/coreseek/etc/csft.conf

 source main {

    把sql_query_pre的语句改成下面的

    sql_query_pre     = replace into sph_counter select 1,max(id) from tablename


    把sql_query 的语句改成下面的

    sql_query = select id, title, connect from tablename

                    where  id <=(select max_doc_id from sph_counter where counter_id=1)

}


继承主数据源

 source delta : main {

         sql_query_pre = SET NAMES utf8

          sql_qurey = select id, title, connect from tablename

                    where  id >(select max_doc_id from sph_counter where counter_id=1)

}

继承索引

index delta : main

{

       source                  = delta

       path                    = /usr/local/coreseek/var/data/delta

#       morphology              = stem_en

}


剩下的基本不变

注意:主source 的select 项要与继承source的select 项匹配,否则合并时会出错

source main: select id, title, connect from tablename

source detal: select id, title, connect from tablename


c. 测试主索引+增量索引

  如果想测试增量索引是否成功,往数据库表中插入数据,查找是否能够检索到,这个时候应该为空,然后再重新单独建立增量   索引

/usr/local/coreseek/bin/indexer     detal

查看是否将新的记录进行了索引,如果成功

此时,再用/usr/local/coreseek/bin/search 工具来检索,能够看到在主索引中检索到的结果为0,而在增量索引中检索到结果,当然前提条件是检索的词只在后添加的数据中存在


d. 实时更新索引


需要建立来个脚本,还要用到计划任务


main.sh     delta.sh  

在增量索引中写下 delta.sh

vi     /usr/local/coreseek/etc/delta.sh

#!/bin/bash

/usr/local/coreseek/bin/indexer delta   --rotate  >> /usr/local/coreseek/var/log/delta.log

在主索引中写下 main.sh

vi     /usr/local/coreseek/etc/main.sh

#!/bin/bash

/usr/local/coreseek/bin/indexer main    --rotate  >> /usr/local/coreseek/var/log/merge.log


chmod a+x   /usr/local/coreseek/etc/delta.sh

chmod a+x   /usr/local/coreseek/etc/main.sh


最后,需要脚本自动运行,实现5分钟建立增量索引 ,每天定时执行一次主索引


crontab -e

*/5 * * * *      /usr/local/coreseek/etc/delta.sh

30 2 * * *      /usr/local/coreseek/etc/main.sh