Elasticsearch:自动使用服务器时间设置日期字段并更新时区

在大多数情况下,你的数据包含一个以 create_date 命名的字段。 即使没有日期字段,处理各种格式和时区的日期对数据仓库来说也是一个重大挑战。 与此类似,如果要检测变化的数据,则必须准确设置日期字段。

在 Elasticsearch 中还有一个选项可以自动将服务器的日期设置为字段。

我们将使用摄取管道属性的 setdate 处理器。

创建摄入管道

首先我们需要设置一个时间戳字段。 之后我们将使用日期处理器来更新字段。

日期处理器有一些功能。 target_field 属性就是其中之一。 如果未定义 target_field 属性,它将计算 field 并写入一个名为 @timestamp 的新字段。 但我们想要改变一个已经存在的字段。

bash 复制代码
1.  PUT _ingest/pipeline/sales-timestamp
2.  {
3.    "description": "Set two different timestamp fields.",
4.    "processors": [
5.      {
6.        "set": {
7.          "field": "timestamp",
8.          "value": "{{{_ingest.timestamp}}}"
9.        }
10.      },
11.      {
12.        "date": {
13.            "field": "timestamp",
14.            "target_field": "tr_timestamp",
15.            "timezone": "+0300",
16.            "formats": [ "ISO8601"]
17.        }
18.      }
19.    ]
20.  } 

运行上面的脚本后,系统将显示("acknowledged":true)消息:

markdown 复制代码
1.  {
2.    "acknowledged": true
3.  }

此外,还可以使用 DELETE 命令进行删除或使用 GET 命令验证属性。 重新运行 PUT 命令应该足以更新管道。

sql 复制代码
1.  GET _ingest/pipeline

3.  DELETE _ingest/pipeline/sales-timestamp

下一步是使用管道创建索引。 对于新建立的摄取管道,必须设置 index.default_pipeline。

即使它会自动填充 date 字段,你仍然需要在索引的映射中定义它们

sql 复制代码
1.  # Create "sales" Index
2.  PUT sales
3.  {
4.    "settings": {
5.      "index.default_pipeline": "sales-timestamp"
6.    },
7.    "mappings": {
8.       "properties": {
9.         "timestamp": { "type": "date" },
10.         "tr_timestamp": { "type": "date" },
11.         "name": { "type": "text" },
12.         "authour": { "type": "keyword" }
13.       }
14.     }
15.  }

写入数据

当你想同时向一个索引添加多个数据时,可以使用 Bulk API。 它尝试从每一行解析你的脚本。 这意味着你不能在批量插入期间使用格式化的 JSON。

通过这种技术,Elasticsearch 会自动为数据分配一个 ID。

bash 复制代码
1.  POST sales/_bulk
2.  {"index":{}}
3.  {"name":"The Lord of the Rings: The Fellowship of the Ring","authour":"J. R. R. Tolkien"}
4.  {"index":{}}
5.  {"name":"The Lord of the Rings 2: The Two Towers","authour":"J. R. R. Tolkien"}

下一步将允许我们列出或搜索我们的数据。

bash 复制代码
1.  GET sales/_search?filter_path=**.hits
2.  {
3.    "size": 5, 
4.    "query": {
5.      "match_all": {}
6.    }
7.  }

上面运行的结果为:

json 复制代码
1.  {
2.    "hits": {
3.      "hits": [
4.        {
5.          "_index": "sales",
6.          "_id": "rVjrTooBxPLM4Lwr4CwQ",
7.          "_score": 1,
8.          "_source": {
9.            "name": "The Lord of the Rings: The Fellowship of the Ring",
10.            "authour": "J. R. R. Tolkien",
11.            "tr_timestamp": "2023-09-01T07:06:35.783+03:00",
12.            "timestamp": "2023-09-01T04:06:35.783682Z"
13.          }
14.        },
15.        {
16.          "_index": "sales",
17.          "_id": "rljrTooBxPLM4Lwr4CwQ",
18.          "_score": 1,
19.          "_source": {
20.            "name": "The Lord of the Rings 2: The Two Towers",
21.            "authour": "J. R. R. Tolkien",
22.            "tr_timestamp": "2023-09-01T07:06:35.792+03:00",
23.            "timestamp": "2023-09-01T04:06:35.792130Z"
24.          }
25.        }
26.      ]
27.    }
28.  }

在这种情况下,你应该密切关注 tr_timestamp 和 timestamp 数据。 tr_timestamp 列中的数据末尾有 "+03:00"。

你可以向索引添加更多数据。

bash 复制代码
1.  POST sales/_bulk
2.  {"index":{}}
3.  {"name":"The Lord of the Rings 3: The Return of the King", "authour":"J. R. R. Tolkien"}
json 复制代码
 1.        {
2.          "_index": "sales",
3.          "_id": "r1j0TooBxPLM4LwreSyl",
4.          "_score": 1,
5.          "_source": {
6.            "name": "The Lord of the Rings 3: The Return of the King",
7.            "authour": "J. R. R. Tolkien",
8.            "tr_timestamp": "2023-09-01T07:15:59.397+03:00",
9.            "timestamp": "2023-09-01T04:15:59.397509Z"
10.          }
11.        }

更多关于 pipeline 的使用方法,请阅读文章 "Elasticsearch:ingest pipelines - 使用技巧和窍门"。

相关推荐
本旺5 小时前
Elasticsearch 前缀匹配性能优化实战,附4种方式即执行计划判别
大数据·elasticsearch·性能优化
Elastic 中国社区官方博客10 小时前
Elastic 在 Everest Group 企业搜索产品 PEAK Matrix® 评估 2026 中被评为领导者
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索
Java小白笔记11 小时前
Codex Skills 分类整理
大数据·人工智能·elasticsearch·搜索引擎·ai·ai编程·ai写作
Elastic 中国社区官方博客14 小时前
谁来评判评判者?在 Elasticsearch Workflows 中使用 LLM-as-a-Judge
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索
Elastic 中国社区官方博客18 小时前
使用 Elasticsearch 作为 Grafana 的直接替代 Prometheus 后端
大数据·数据库·sql·elasticsearch·搜索引擎·grafana·prometheus
阿里云大数据AI技术1 天前
AI Search × ES Agent Builder 最佳实践:企业智能助手落地指南
人工智能·elasticsearch
利威尔·3 天前
常用git命令
大数据·elasticsearch·搜索引擎
至乐活着3 天前
ELK日志系统从零搭建到实战:Nginx日志采集与可视化全攻略
nginx·elk·elasticsearch·docker·日志系统
say_fall3 天前
【Git 精品详解】企业规范:企业级开发模型、Git Flow、发版流程规范、Code Owner 制度、事故应急回滚
大数据·linux·服务器·git·学习·elasticsearch
Elastic 中国社区官方博客4 天前
跟踪资金流向:使用 ES|QL 和跨集群搜索追踪洗钱网络
大数据·人工智能·安全·elasticsearch·搜索引擎·金融·全文检索