ik analyzer實現熱載入擴充套件詞典

2021-08-22 08:30:49 字數 1788 閱讀 7820

當初的產品需求是根據後台新增的擴充套件詞及停止詞三天更新到ik中,由於ik-analyzer,是一次載入所有類及配置檔案的,所以解決這個問題的第一思路就是在類的初始化方法中寫乙個定時排程,每三天去讀取資料庫中擴充套件次及停止詞。

實體類:

public class dictionaryparticiple implements serializable 

public dictionaryparticiple()

public long getid()

public void setid(long id)

public string getword()

public void setword(string word)

public byte gettype()

public void settype(byte type)

public date getcreatetime()

public void setcreatetime(date createtime)

public string getoptuser()

public void setoptuser(string optuser)

@override

public string tostring() ';

}}

初始化:

/**

* 詞典初始化

* 由於ik analyzer的詞典採用dictionary類的靜態方法進行詞典初始化

* 只有當dictionary類被實際呼叫時,才會開始載入詞典,

* 這將延長首次分詞操作的時間

* 該方法提供了乙個在應用載入階段就初始化字典的手段

* @return dictionaryparticiple

*/public static dictionary initial(configuration cfg)

}} return singleton;

}

定時排程獲取資料庫資料:

/**

* 定時排程查詢資料庫

* 查詢黑白名單實現runnable介面

* 0 (延遲)

* (間隔時間)

* timeunit.seconds (計時單位秒)

*/public static void addextensionword()else }}

}, 0, oneday_second*3, timeunit.seconds);

}

原始碼中是有已存在的配置檔案也就是擴充套件次與停用詞(ext.dic,stopword.dic),那麼當在資料庫載入到記憶體的時候,儲存擴充套件次與停用詞的物件必須得用同乙個,不然只會載入最後儲存的物件,也算是個小細節吧。

其中

dictionaryparticipleservice.selectdictionary();為jdbc查詢資料庫方法也就是查擴充套件次及停止詞,將查詢出的結果放到
singleton._maindict.fillsegment(maindictword.trim().tochararray());與
_stopworddict.fillsegment(stopworddict.trim().tochararray());裡面,
scheduledexecutorservice類在這裡使用的是建立乙個執行緒的執行緒池,網上有很多大神的解釋我就不在露怯了。

熱部署,熱載入

熱載入 1 熱載入在pom.xml中新增devtools的m en引用 org.springframework.boot spring boot devtools true org.springframework.boot spring boot m en plugin true 熱部署生效 dev...

熱部署和熱載入

2018 8 22 今天入職第二天,看到老大在群裡發了乙個go熱載入實現的鏈結,之前沒有聽說過熱載入,所以搜尋了一下,下面是關於熱部署和熱載入的相關整理。在專案線上更新時,可能會遇到需要熱部署的情況,雖然現在大多數公司由於業務量大採用了分布式集群,可以分批次的重啟更新。但是還是有需要熱部署 熱部署和...

熱部署和熱載入

2018 8 22 今天入職第二天,看到老大在群裡發了乙個go熱載入實現的鏈結,之前沒有聽說過熱載入,所以搜尋了一下,下面是關於熱部署和熱載入的相關整理。在專案線上更新時,可能會遇到需要熱部署的情況,雖然現在大多數公司由於業務量大採用了分布式集群,可以分批次的重啟更新。但是還是有需要熱部署 熱部署和...