天天看點

coreseek,php,mysql全文檢索部署(二)

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,如需轉載請自行聯系原作者