Sphinx增量索引

2021-07-31 05:41:04 字數 1858 閱讀 6449

sphinx建立索引之後,如果我們的資料庫又增加了一條資料,需要重新建立索引。但是如果資料量十分龐大時,每次都重新建立索引顯然是不合適的。

我們希望實現的效果是,每次都只建立新增的資料的索引。

假設現在資料庫中有三條資料,id分別為1,2,3。

使用indexer命令為這三條資料建立索引,並把max_doc_id=3記錄到一張表(sphinx_counter)中,表示當前主索引已經建立了id<=3的所有資料的索引

假設此時有新的資料插入,id為4,5。然後為這兩條新資料建立索引,稱之為增量索引,同時更新sphinx_counter表,max_doc_id=5

最後使用indexer --merge將增量索引合併到主索引中

sphinx_counter表結構如下:

drop

table

ifexists

`sphinx_counter`;

create

table

`sphinx_counter` (

`counter_id`

int(11) not

null comment '標識不同的資料表',

`max_doc_id`

int(11) not

null comment '文件已索引的最大id',

primary

key (`counter_id`)

) engine=innodb default charset=utf8;

#***************====資料來源配置***************==

#主索引資料來源

source article_src

#增量索引資料來源

source article_delta_src: article_src

#***************====索引配置***************==

#主索引

index article_index

#增量索引

index article_delta_index : article_index

indexer

searchd

我們要寫乙個增量索引的指令碼,定時去執行這個指令碼

#!/bin/bash

#建立增量索引

/usr/local/sphinx/bin/indexer article_delta_index --rotate

#合併增量索引和主索引

/usr/local/sphinx/bin/indexer --merge article_index article_delta_index --rotate

--rotate表示通知searchd程序有索引更新了,如果沒有這個引數,必須停止searchd程序才能建立索引

一般情況我們也會建立乙個主索引指令碼,每天半夜無人時去執行一次,來全部重新建立索引

#!/bin/bash

/usr/local/sphinx/bin/indexer article_index --rotate

如果不合併增量索引和主索引,每次建立增量索引都會覆蓋之前建立的增量索引,導致索引丟失

合併索引時的io消耗是索引檔案大小的兩倍,假設主索引檔案大小是100g,增量索引大小是2g,那麼io消耗是(100+2)*2 = 204g,雖然io消耗大,但相比全部重新建立索引來說,還是小得多。

sphinx增量索引

在sphinx libmmseg搭建中文全文搜尋引擎 安裝配置中安裝試驗了sphinx的使用,但是還有幾方面的問題有待處理。用來建立索引的分詞資料 動態增量索引更新 索引在前端的介面的表現使用 本篇主要是對動態增量更新的一些研究。關於分詞資料的建立和前端介面的控制將在以後研究。在利用 sphinx ...

sphinx增量索引使用

sphinx在使用過程中如果表的資料量很大,新增加的內容在sphinx索引沒有重建之前都是搜尋不到的。這時可以通過建立sphinx增量索引,通過定時更新增量索引,合併主索引的方式,來實現偽實時更新。使用定時任務,定時更新增量索引,例如10分鐘一次 在利用 sphinx 做搜尋引擎的時候,一般他的索引...

sphinx主索引,增量索引建立

相關命令及步驟 建立主索引 usr local coreseek bin indexer c usr local coreseek etc csft.conf all 建立增量索引 1.建立測試資料表以及資料 2.修改配置檔案 主索引源 sql query pre 增量索引源 sql query p...