无法将 mysql 时间戳映射到 elasticsearch

Cant map mysql timestamp into elasticsearch

我想将我的 mysql table 之一插入到 elasticsearch 中以用于搜索目的,但我在将时间戳从 mysql 映射到 ES 时遇到问题。

在 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 中只有一个 table 我想被搜索,所以我在 ES 中只有 table 。我是这样做的:每次新行在 MySql 中获得 inserted/updated/deleted 时,同一行在进入 ES 之后立即获得 inserted/updated/deleted。这是正确的方法吗?为了保持索引实时更新。

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

因为这是我为 ES 的新人找到的最简单的方法。

包含 T 的时间戳在 ISO 8601 format. Since Laravel uses Carbon 中,您可以使用它将字符串转换为 ISO 8601,如下所示:

$myDateTime->toIso8601String();

关于你的第二个问题,你的做法很好。通过将您的 MySQL 插入、更新和删除操作与 ES 同步,您可以确保 ES 索引近乎实时地保持最新状态。

如果对 ES 文档进行实时重新索引对性能不利(通常如果你有频繁的插入、更新和删除),你可以设置一个 cron 以给定的时间间隔同步和重新索引 ES 文档.