Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Elasticsearch在映射时更改日期格式_Php_Mysql_Laravel_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Php,Mysql,Laravel,elasticsearch" /> elasticsearch,Php,Mysql,Laravel,elasticsearch" />

Php Elasticsearch在映射时更改日期格式

Php Elasticsearch在映射时更改日期格式,php,mysql,laravel,elasticsearch,Php,Mysql,Laravel,elasticsearch,我正在使用Laravel和Elasticsearch。但是我不能映射我的mysql时间戳,因为默认情况下ES只支持时间戳为ISO 8601“2015-02-02T15:30:20” 我想映射我的时间戳,看起来像“2015-02-15 15:30:22”-没有“T”的TS 是否可以更改ES以允许时间戳,如“2015-02-15 15:30:22”?在映射中设置一个,以便它接受MySQL格式: curl -XPUT "http://localhost:9200/test/date-format/_m

我正在使用Laravel和Elasticsearch。但是我不能映射我的mysql时间戳,因为默认情况下ES只支持时间戳为ISO 8601“2015-02-02T15:30:20”

我想映射我的时间戳,看起来像“2015-02-15 15:30:22”-没有“T”的TS

是否可以更改ES以允许时间戳,如“2015-02-15 15:30:22”?

在映射中设置一个,以便它接受MySQL格式:

curl -XPUT "http://localhost:9200/test/date-format/_mapping" -d'
{
    "date-format" : {
       "properties": {
          "timestamp": {"type": "date","index": "not_analyzed","format" : "yyyy-MM-DD HH:mm:ss"}
        }
    }
}'
然后通过发布消息进行测试:

curl -XPOST "http://localhost:9200/test/date-format" -d'
{
      "timestamp": "2014-10-22 20:03:12"
}'
它应返回:

{"_index":"test","_type":"test-date","_id":"AUuD22Ls9cHgxNzY1tfJ","_version":1,"created":true}
在映射中设置一个,以便它接受MySQL格式:

curl -XPUT "http://localhost:9200/test/date-format/_mapping" -d'
{
    "date-format" : {
       "properties": {
          "timestamp": {"type": "date","index": "not_analyzed","format" : "yyyy-MM-DD HH:mm:ss"}
        }
    }
}'
然后通过发布消息进行测试:

curl -XPOST "http://localhost:9200/test/date-format" -d'
{
      "timestamp": "2014-10-22 20:03:12"
}'
它应返回:

{"_index":"test","_type":"test-date","_id":"AUuD22Ls9cHgxNzY1tfJ","_version":1,"created":true}

Laravel时间戳通常是碳实例,因此只需将其转换为您的:

那么你需要做的就是

$unixEpochMilli = $user->created_at->timestamp * 1000;  //epoch_milli is elastic default
$isoTime = $user->created_at->toIso8601String();   //also a default

请记住,如果查看Kibana中的数据,它默认为浏览器显示时间。只需单击JSON表示,您将看到类似于
2018-12-19T05:14:21.000Z
的内容,指示存储的历元。

Laravel时间戳通常是碳实例,因此只需将它们转换为您的:

那么你需要做的就是

$unixEpochMilli = $user->created_at->timestamp * 1000;  //epoch_milli is elastic default
$isoTime = $user->created_at->toIso8601String();   //also a default

请记住,如果查看Kibana中的数据,它默认为浏览器显示时间。只需单击JSON表示,您将看到类似于
2018-12-19T05:14:21.000Z
的内容,指示存储的纪元。

放入您的代码?你能使用PHP的str_替换或MySQL的date_格式吗?在ES中使用是绝对可能的。您只需在映射中指定模式。我不知道拉雷维尔要怎么做。贝娄的答案是有效的。我在laravel中使用了这个包,但我不确定它是否支持嵌套对象,如果您也需要的话,请把代码放在哪里?你能使用PHP的str_替换或MySQL的date_格式吗?在ES中使用是绝对可能的。您只需在映射中指定模式。我不知道拉雷维尔要怎么做。贝娄的答案是有效的。我在laravel中使用了这个包,但我不确定它是否也支持嵌套对象,如果您需要的话。奥利,知道如何强制支持0000-00-00 00:00:00默认时间戳吗?奥利,知道如何强制支持0000-00-00 00:00默认时间戳吗?