1. 程式人生 > >elasticsearch刪除資料延遲重新整理問題

elasticsearch刪除資料延遲重新整理問題

記錄一次工作中遇到的問題。

後臺管理系統中管理功能將資料儲存到資料庫一份,同時也儲存到ES中一份,然後終端POS從ES中取資料。

這時候問題來了,通過管理功能刪除資料,同步去刪除ES中的資料,然而,資料庫中的資料已被刪除,ES中的資料還在,等1-2分鐘之後ES中資料才消失。這導致終端POS不能顯示最新的資料。

下面來看看問題的解決過程。

先來看看實體類的配置。

ESWindowgoods代表視窗選單功能,ESWindowgoodsFuture代表未來菜譜功能,從document註解中的引數來看,兩個索引實體類的重新整理間隔是一樣的。

但是實際功能操作過程中發現,視窗選單功能刪除菜品後,ES不會立即刪除,未來菜譜功能刪除菜品後,ES會立即刪除。為什麼配置一樣,兩個功能刪除操作後的行為不一樣呢?

這時候我決定看一下實際ES索引的設定到底是什麼,這裡我們使用elasticsearch-head外掛來檢視。

點選索引下面的資訊,然後再點選索引資訊,這時候就可以看到索引的初始設定以及屬性資訊了

我們可以看到windowgoodsindex索引的refresh_interval屬性是-1,意思是不重新整理。這樣就可以解釋,為什麼刪除資料後,ES中沒有立即刪除,而是過1-2分鐘再刪這個現象了。

我們再來看看windowgoodsfutureindex索引的refresh_interval屬性,也是-1,這個索引其實是我後來重建的,重建之前,這個屬性不存在,因此該屬性預設為1。這就能解釋,為什麼視窗選單刪除的資料ES不能立即重新整理,未來菜譜刪除的資料ES能立即重新整理這個現象了。於是,我們要重建windowgoodsfutureindex索引。

我們用這個命令重建索引,由於不想刪除原先索引中的資料,所以需要先把原索引資料匯入到新索引中。匯入完之後,我們將未來菜譜功能的索引更換到新索引上,再次測試刪除資料,這次發現刪除完之後,資料庫中刪了,但是未來菜譜的ES中還存在資料,這就和視窗選單的刪除操作後不刪ES資料的問題一致了。等等,問題貌似沒有解決啊。上面的幾個步驟,發現問題,檢視索引設定,重建索引,兩個索引的重新整理時間保持一致,最終刪除資料後,ES裡的資料還是刪除不了。好了,最後我們去刪除後去呼叫ES的手動重新整理方法來達到這個目的。

好了,再次測試,執行刪除操作後,ES中的資料可以刪除了。windowgoodsfutureindex和windowgoodsindex索引的重新整理行為也保持一致了