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