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

技術小胖子發表於2017-11-16

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



     本文轉自ljl_19880709 51CTO部落格,原文連結:http://blog.51cto.com/luojianlong/1345682,如需轉載請自行聯絡原作者





相關文章