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
/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
本文轉自ljl_19880709 51CTO部落格,原文連結:http://blog.51cto.com/luojianlong/1345682,如需轉載請自行聯系原作者