Elasticsearch
概述
GreptimeDB 支持使用 Elasticsearch 的 _bulk
API 来写入数据。我们会将 Elasticsearch 中的 Index 概念映射为 GreptimeDB 的 Table,同时用户可在 HTTP 请求的 URL 参数中用 db
来指定相应的数据库名。不同于原生 Elasticsearch,该 API 仅支持数据写入,不支持数据的修改和删除。在实现层面上,GreptimeDB 会将原生 Elasticsearch _bulk
API 请求中的 index
和 create
命令都视为创建操作。除此之外,GreptimeDB 仅支持解析原生 _bulk
API 命令请求中的 _index
字段而忽略其他字段。
HTTP API
在大多数日志收集器(比如下文中的 Logstash 和 Filebeat)的配置中,你只需要将 HTTP endpoint 配置为 http://${db_host}:${db_http_port}/v1/elasticsearch
,比如 http://localhost:4000/v1/elasticsearch
。
GreptimeDB 支持通过实现以下两个 HTTP endpoint 来实现 Elasticsearch 协议的数据写入:
-
/v1/elasticsearch/_bulk
:用户可使用 POST 方法将数据以 NDJSON 格式写入到 GreptimeDB 中。以下面请求为例,GreptimeDB 将会创建一个名为
test
的表,并写入两条数据:POST /v1/elasticsearch/_bulk
{"create": {"_index": "test", "_id": "1"}}
{"name": "John", "age": 30}
{"create": {"_index": "test", "_id": "2"}}
{"name": "Jane", "age": 25} -
/v1/elasticsearch/${index}/_bulk
:用户可使用 POST 方法将数据以 NDJSON 格式写入到 GreptimeDB 中的${index}
表中。如果 POST 请求中也有_index
字段,则 URL 中的${index}
将被忽略。以下面请求为例,GreptimeDB 将会创建一个名为
test
和another_index
的表,并各自写入相应的数据:POST /v1/elasticsearch/test/_bulk
{"create": {"_id": "1"}}
{"name": "John", "age": 30}
{"create": {"_index": "another_index", "_id": "2"}}
{"name": "Jane", "age": 25}