1. 程式人生 > >sphinx 不關閉程序更新索引 和增量索引

sphinx 不關閉程序更新索引 和增量索引

更新單個at_resource 索引 

/usr/local/sphinx211/bin/indexer -c /usr/local/sphinx211/etc/sphinx.conf   at_resource --rotate

更新全部索引

/usr/local/sphinx211/bin/indexer -c /usr/local/sphinx211/etc/sphinx.conf   --all --rotate

加上--rotate

上面呢是重頭到尾的更新也就是每次從id1開始,所以會做重複工作,如果資料量小的話都可以接受,太大的話就用下面增量索引吧

 

增量索引

主要思路就是你生成主索引的時候記錄下當前mysql表的最大id,然後主索引不動,定期去生成增量索引並更改最大id,然後將增量索引合併到主索引就行了

記錄最大id表結構

CREATE TABLE `sph_counter` (
  `id` int(11) unsigned NOT NULL,
  `max_id` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sphinx增量表最大記錄數';

sphinx.conf配置

#定義主索引源

source test
{
    type                    = mysql
    sql_host                = localhost
    sql_user                = root
    sql_pass                = 123456
    sql_db                    = test
    sql_port                = 3306
    sql_query_pre            = SET NAMES utf8
    sql_query_pre           = REPLACE INTO sph_counter (SELECT 1, MAX(id) FROM test) #記錄最大記錄數

    sql_query = select id from test where id<(select max_id from sph_counter where id=1)
    sql_query_info = select * from test where id = $id
}

#增量索引資料來源定義
source test_delta : test
{
        sql_query_pre = SET NAMES utf8
        sql_query_pre           = REPLACE INTO sph_counter (SELECT 1, MAX(id) FROM test) #記錄最大記錄數

        sql_query = select * from test  where id>=(select max_id from sph_counter where id=1)
        sql_query_info = select * from test where id = $id

}

#定義主索引

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

    charset_type        = zh_cn.utf-8
}

#定義增量索引
index test_delta:test
{
    source            = test_delta            #對應的source名稱
    path            = /usr/local/sphinx/var/data/test_delta #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
}

#全域性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/sphinx/var/log/searchd_mysql.pid  #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
    log = /usr/local/sphinx/var/log/searchd_mysql.log        #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
    query_log = /usr/local/sphinx/var/log/query_mysql.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
    binlog_path =                                #關閉binlog日誌
}

生成主索引後定期更新增量合併索引,加入到crontab -e

增量索引
/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf test_delta --rotate

合併索引
/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf --merge test test_delta --rotate