2015-02-10 40 views
0

我想將我的一個mysql表插入elasticsearch用於搜索目的,但我有問題將時間戳從mysql映射到ES。無法將mysql時間戳映射到elasticsearch

在mysql中,我的時間戳看起來像「2015-01-01 15:30:34」,我試圖將它映射爲「timestamp」/「int」/「long」,但沒有任何效果。看看ES文檔,看起來像ES預計時間戳看起來像「2015-01-01T15:30:34」

其中帶有「T」。

不能我把一個正常的mysql時間戳映射爲「2015-01-01 15:30:34」到ES?

第二個問題: 由於我只在MySql中有一個我想要搜索的表,所以我只在ES中有這個表。我這樣做是這樣的:每次在MySql中插入/更新/刪除新行時,同一行被插入/更新/刪除後立即進入ES。這是做到這一點的正確方法嗎?爲了保持實時更新索引。

我使用Laravel包:https://github.com/adamfairholm/Elasticquent

因爲這就是最簡單的一個,我發現有人在ES衛生組織新。

回答

1

包含T的時間戳記格式爲ISO 8601格式。由於Laravel使用Carbon你可以用它來將字符串轉換爲ISO 8601像這樣:

$myDateTime->toIso8601String(); 

關於你的第二個問題,你的做法是很好的。通過同步MySQL插入,使用ES更新和刪除操作,可以確保ES索引近乎實時地保持最新。

如果ES文檔的實時重新索引結果不利於性能(通常如果您頻繁插入,更新和刪除),則可以設置cron以給定間隔同步並重新索引ES文檔。

+0

謝謝波格丹。但是ES真的只支持ISO 8601嗎?我真的想插入我目前的TS「2015-02-02 15:30:30」,然後用它們進行排序。 – user2722667 2015-02-11 13:40:05