date - 无法在 elastisearch 上定义日期类型索引
问题描述
我有一个文件发送到 elasticsearch,看起来像这样:
{
"created": 1543247749419,
"name": "something",
"person": {
"created": 1543247012491,
...
}
}
这两个created
字段都是epoch_millis
日期格式(以毫秒为单位的时间戳)。我基本上尝试了三件事:
- 像这样使用 curl 添加文档:
curl -H "Content-Type: application/json" -X POST "http://ipaddress:9200/somedb" -d "@/some/path"
到目前为止一切顺利,但索引将 my 的类型设置created
为long
,而不是date
。
从 Kibana 界面复制索引,更改
long
fordate
并为其创建一个新数据库:{“映射”:{“somedb2”:{“属性”:{“创建”:{“类型”:“日期”,“格式”:“x”},
并像这样发送数据:
curl -H "Content-Type: application/json" -X POST "http://ipaddress:9200/somedb2" -d "@/some/path"
然后我从elasticsearch收到了这个错误信息
{ "error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason":"Root mapping definition has unsupported parameters: [mapping : {properties={created={type=date, format=x},
现在我真的不知道该怎么办。在 interwebz 上搜索基本上只讨论格式化部分,而没有太多关于配置或创建索引的内容。我需要一个弹性搜索插件来处理日期吗?
解决方案
JSON(这是 ElasticSearch 的数据格式)没有明确的日期格式,它们始终被视为字符串,即使以其他方式传递也是如此。
因此,实际上,如果您未指定日期格式,则会考虑此选项:“strict_date_optional_time||epoch_millis”,即 epoch millis - 在您的情况下也是正确的。
这就是为什么每个人都在谈论格式化而不是转换;)
推荐阅读
- python - Python如何从中获取特定值
- svn - 将特定 SVN 修订版从服务器 A 迁移到服务器 B
- angular - Saturn Datepicker 动态范围模式道具
- java - 我无法使用 Mockito 模拟存储库
- javascript - 在反应路由器中,我无法更改视图,但只有 url 正在更改
- react-native - 有没有这样的 React 原生组件包?
- r - 如何将嵌套列表分解为数据框,其中每个嵌入列表成为单独的列?
- angular - 用于调度操作和检查后端调用是否成功的 Ngrx 模式
- python - 打印实际正在打印到打印机的文档名称
- mysql - 存储两个其他表之间关系的表的 MYSQL 索引优化