无法将mysql时间戳映射到elasticsearch

时间:2015-02-10 14:09:29

标签: php mysql laravel indexing elasticsearch

我想将一个mysql表插入到elasticsearch中以便进行搜索,但是我在将时间戳从mysql映射到ES时遇到了问题。

在mysql中我的时间戳看起来像" 2015-01-01 15:30:34",我已经尝试将其映射为" timestamp" /" int" /"长"但没有任何作用。看看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 个答案:

答案 0 :(得分:1)

包含T的时间戳采用ISO 8601格式。由于Laravel使用Carbon,您可以使用它将字符串转换为 ISO 8601 ,如下所示:

$myDateTime->toIso8601String();

关于你的第二个问题,你的方法很好。通过使用ES同步MySQL插入,更新和删除操作,可以确保ES索引近乎实时更新。

如果对ES文档进行实时重建索引对性能有害(通常是经常插入,更新和删除),则可以设置一个cron来同步并以给定的间隔重新索引ES文档。 / p>