coreseek配置以及增量索引合併索引

引導:本人是個php菜鳥,公司的業務並不繁瑣,但是最近使用到了全文搜索,就想着用sphinx。
大致分爲三個部分,1:安裝;2配置:3調用api 。這裏主要說一下配置及調用api。安裝的步驟我之前單獨寫了一個帖子可以去看看,如果不太明白可以去官網,安裝步驟說的很清楚,廢話不多說,開始。
一、爲什麼要用增量索引?其實我個人認爲對數據量小的業務來說用增量索引完全沒有必要。可以定時重新生成索引就OK了。增量索引就是對 截至到上次生成的索引 以後添加的內容單獨生成索引,這樣數據量比較小,並且不影響業務處理,然後定期進行索引合併,爲了保持數據統一性,還需要定期從新生成索引。
1、上次生成索引的id需要記錄下來,可以用一張表來存儲。
CREATE TABLEtbl_pre_coursevideo(
idint(11) NOT NULL DEFAULT '0',
maxidint(11) NOT NULL DEFAULT '0',
PRIMARY KEY (
id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、配置文件

source mysql
{
 type                    = mysql
    sql_host             = 127.0.0.1
    sql_user              = root
    sql_pass              = 123456
    sql_db                = test
    sql_port              = 3306
    sql_query_pre        = SET NAMES utf8
    sql_query_pre       = SET SESSION query_cache_type=OFF #如果這裏報錯去mysql配置文件修改
    sql_query_pre         = REPLACE INTO tbl_pre_coursevideo SELECT 1, MAX(id) FROM tbl_coursevideo    #在剛纔新建的表中將當前索引生成的最多id存起來,爲增量索引做準備。


    sql_query                = SELECT id,title,create_time, subtitle,content,type FROM tbl_coursevideo WHERE id <=(SELECT maxid FROM tbl_pre_coursevideo WHERE id=1)
   #上面這條sql可以分爲兩部分WHERE 之前,是對數據的查詢(根據自己的業務來定)where之後,是對剛纔的記錄
   最大ID 的篩選

    sql_attr_uint            = id           #從SQL讀取到的值必須爲整數
     sql_attr_timestamp        = create_time #從SQL讀取到的值必須爲整數,作爲時間屬性


    sql_field_string          = title  #字符串字段(可全文搜索,可返回原始文本信息)  
     sql_field_string          = subtitle  #字符串字段(可全文搜索,可返回原始文本信息)  
     sql_field_string          = content  #字符串字段(可全文搜索,可返回原始文本信息)  
}
source increment : mysql
{
sql_query_pre = SET NAMES utf8
sql_query                = SELECT id,title,create_time, subtitle,content,type FROM  

tbl_coursevideo WHERE id >(SELECT maxid FROM tbl_pre_coursevideo WHERE id=1)
#這是增量索引的數據源sql。和上面保持一致,唯一的變化,就是where條件之後,這裏查詢的是大於上次重新生成索引的id,即:剛剛添加的數據
}


#index定義
index mysql
{
   source            = mysql             #對應的source名稱
    path            = /usr/local/coreseek/var/data/mysql#請修改爲實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
    docinfo            = extern
    mlock            = 0
    morphology        = none
    min_word_len        = 1
    html_strip                = 0

    #中文分詞配置,詳情請查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
    charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux環境下設置,/符號結尾
    #charset_dictpath = etc/                             #Windows環境下設置,/符號結尾,最好給出絕對路徑,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8
}


index increment : mysql
{
  source=increment

    path            = /usr/local/coreseek/var/data/increment
    charset_dictpath = /usr/local/mmseg3/etc/
    charset_type    = zh_cn.utf-8
}
#全局index定義
indexer
{
    mem_limit            = 128M
}


#searchd服務定義
searchd
{
    listen                  =   9312
    read_timeout        = 5
    max_children        = 30
    max_matches            = 1000
    seamless_rotate        = 0
    preopen_indexes        = 0
    unlink_old            = 1


    pid_file = /usr/local/coreseek/var/log/searchd_mysql.pid  #請修改爲實際使用的絕對路徑,例如:/usr/local/coreseek/var/...

    log =/usr/local/coreseek/var/log/searchd_mysql.log       #請修改爲實際使用的絕對路徑,例如:/usr/local/coreseek/var/...

    query_log =/usr/local/coreseek/var/log/query_mysql.log  #請修改爲實際使用的絕對路徑,例如:/usr/local/coreseek/var/...


}

使用:
1、生成索引(一下命令都是我自己的安裝環境路徑,具體的修改成自己的)
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all #生成索引
這時tbl_pre_coursevideo 表裏會增加一條記錄。存放的就是你內容表中的最大id

2、
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf #開啓後臺進程

這時候對mysql數據源進行搜索的話其實已經是有數據的。
3、增量索引(內容表新增數據的前提)
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf increment --rotate #執行完成以後會提示生成幾條增量索引數據,即你剛纔在內容表添加的數據條數。這時候其實就可以測試你的增量索引成功沒cl->Query($keyword, ‘increment ‘);調用api時可以用增量索引查詢你剛添加的內容
4、合併索引

usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf
–merge mysql increment –rotate

cl->Query('查詢的關鍵字', 'mysql'); //就能查詢出來剛纔的新添加的數據,以及以前的數據。

5、爲了保持數據統一,還需要定時從新生成索引

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all --rotate
#--rotate 是不影響服務器搜索時可以添加這個屬性

二、
1、調用api,這是我自己封裝的,sphinxapi.php安裝完成的文件裏有這個類

require 'sphinxapi.php';

class Sphinx {

    private $host = '127.0.0.1';
    private $port = 9312;
    private $cl;

    /*
     * @desc 構造函數  初始化sphinx對象
     */

    public function __construct() {
        $this->cl = new SphinxClient ();
        $this->cl->SetServer($this->host, $this->port);
        $this->cl->SetConnectTimeout(1);
        $this->cl->SetArrayResult(true);
        $this->cl->SetMatchMode(SPH_MATCH_EXTENDED2);
        $this->cl->SetRankingMode(SPH_RANK_WORDCOUNT);
    }

    /*
     * @desc 搜索
     * @param $page  頁數
     * @param $pagesize  條數
     * @param $keyword  搜索關鍵字
     * @param $source 索引源
     */

    public function search($keyword, $p, $pagesize) {
        $page = ($p - 1) * 10;
        $this->cl->SetLimits($page, $pagesize); //分頁
        $res = $this->cl->Query($keyword, $source); //sphinx 查詢

    }
  }

2、定時任務
yum install crontab //安裝
crontab -e //打開編輯
然後定時 執行增量索引,合併索引,從新生成索引

住:如果說合並索引頁成功了。但是查詢出來的數據一直爲空,那你就看看配置文件那

 path            = /usr/local/coreseek/var/data/increment #這裏的配置,主索引是否和增量索引這隻的路徑一樣,increment 就是索引的文件名,會在data文件夾下。

至此就講了。如果有什麼不會的,把這篇博客好好看看,包括註釋,這都是我遇到的一些問題,都給註釋了起來。如果有什麼不明白的地方也可以給我留言,知無不盡。下次給大家講一講分詞哪一塊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章