【问题标题】:Cant map mysql timestamp into elasticsearch无法将mysql时间戳映射到elasticsearch
【发布时间】:2015-04-10 14:33:20
【问题描述】:

我想将我的一个 mysql 表插入到 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 中只有一个要搜索的表,因此我在 ES 中只有该表。我这样做的方式是:每次在 MySql 中插入/更新/删除一个新行时,在 ES 之后立即插入/更新/删除同一行。这是正确的方法吗?为了保持索引实时更新。

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

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

【问题讨论】:

    标签: php mysql laravel indexing elasticsearch


    【解决方案1】:

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

    $myDateTime->toIso8601String();
    

    至于你的第二个问题,你的方法很好。通过将您的 MySQL 插入、更新和删除操作与 ES 同步,您可以确保 ES 索引几乎是实时更新的。

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

    【讨论】:

    • 谢谢博格丹。但是ES真的只支持ISO 8601吗?我真的很想插入我当前的 TS "2015-02-02 15:30:30" 然后用它们进行排序。
    猜你喜欢
    • 2019-11-17
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2023-03-15
    • 2012-01-21
    • 2011-10-01
    • 1970-01-01
    • 2018-06-03
    相关资源
    最近更新 更多