乐闻世界logo
搜索文章和话题

Elasticsearch 如何插入数据?

7 个月前提问
3 个月前修改
浏览次数124

6个答案

1
2
3
4
5
6

在 Elasticsearch 中,插入数据通常是通过 HTTP PUT 或 POST 请求向所选索引提交 JSON 格式的文档来实现的。以下是插入数据的几种常见方法:

使用 HTTP PUT 插入单个文档

如果你已经知道你想要插入的文档的ID,可以使用PUT方法直接插入。例如:

http
PUT /index_name/_doc/document_id { "field1": "value1", "field2": "value2", ... }

在这个例子中,index_name 是你想要插入文档的索引名称,_doc 是文档类型(在Elasticsearch 7.x之后已经废弃),document_id 是这个文档的唯一标识符,紧随其后的是要插入的JSON格式的文档内容。

使用 HTTP POST 插入单个文档

如果你不关心文档的ID,Elasticsearch可以为你自动生成一个。你可以使用POST方法来完成:

http
POST /index_name/_doc { "field1": "value1", "field2": "value2", ... }

在这个例子中,Elasticsearch将自动生成文档ID,并且插入提供的数据。

批量插入文档

当需要插入多个文档时,可以使用Elasticsearch的批量API(_bulk API)来提高效率。这样可以在一个请求中插入多个文档,示例如下:

http
POST /_bulk { "index" : { "_index" : "index_name", "_id" : "1" } } { "field1" : "value1" } { "index" : { "_index" : "index_name", "_id" : "2" } } { "field1" : "value2" } ...

批量API接受一系列操作,每个操作由两行组成:第一行指定操作和元数据(如_index_id),第二行包含实际的文档数据。

使用客户端库

除了直接使用HTTP请求,许多开发人员更喜欢使用客户端库来与Elasticsearch交互。这种方式提供了更方便的API和错误处理。以JavaScript为例,使用官方的elasticsearch客户端库可以这样插入数据:

javascript
const { Client } = require('@elastic/elasticsearch'); const client = new Client({ node: 'http://localhost:9200' }); client.index({ index: 'index_name', id: 'document_id', body: { field1: 'value1', field2: 'value2', ... } }, (err, result) => { if (err) console.log(err); console.log(result); });

在这个例子中,我们创建了一个Elasticsearch客户端实例,然后使用其index方法插入一个文档。可以指定文档ID,也可以让Elasticsearch自动生成。

总结来说,插入数据到Elasticsearch通常涉及发送含有JSON文档的HTTP请求到适当的索引上,无论是单个文档还是批量文档。客户端库可用于简化这个过程,并提供更加方便和健壮的编程接口。

2024年6月29日 12:07 回复

您必须curl首先在 PC 上安装二进制文件。你可以在这里下载。

之后将其解压缩到一个文件夹中。可以说C:\curl。在该文件夹中,您会发现curl.exe包含多个.dll文件的文件。

cmd现在,通过从 .txt 文件中键入内容来打开命令提示符start menu。然后cd c:\curl在那里输入,它会带你到curl文件夹。现在执行curl您拥有的命令。

一件事是,Windows 不支持字段周围的单引号。所以你必须使用双引号。例如,我已将您的curl 命令转换为适当的命令。

shell
curl -H "Content-Type: application/json" -XPOST "http://localhost:9200/indexname/typename/optionalUniqueId" -d "{ \"field\" : \"value\"}"
2024年6月29日 12:07 回复

如果您将 Kibana 与 Elasticsearch 一起使用,那么您可以使用下面的 REST 请求来创建并放入索引。

创建索引

shell
http://localhost:9200/company PUT company { "settings": { "index": { "number_of_shards": 1, "number_of_replicas": 1 }, "analysis": { "analyzer": { "analyzer-name": { "type": "custom", "tokenizer": "keyword", "filter": "lowercase" } } } }, "mappings": { "employee": { "properties": { "age": { "type": "long" }, "experience": { "type": "long" }, "name": { "type": "text", "analyzer": "analyzer-name" } } } } }

创建文档

shell
POST http://localhost:9200/company/employee/2/_create { "name": "Hemani", "age" : 23, "experienceInYears" : 2 }
2024年6月29日 12:07 回复

让我清楚地解释一下..如果您熟悉rdbms..索引是数据库..索引类型是表..这意味着索引是索引类型的集合.,就像数据库(DB)中的表集合一样。

在NOSQL中..索引是数据库,索引类型是集合。作为数据库的集合组..

要执行这些查询...您需要安装适用于 Windows 的 CURL。

Curl只不过是一个命令行休息工具..如果你想要一个图形工具..尝试

Chrome 的 Sense 插件...

希望能帮助到你..

2024年6月29日 12:07 回复

要测试和尝试来自 Windows 的curl 请求,您可以使用 Postman 客户端 Chrome 扩展。它使用起来非常简单,而且功能非常强大。

或者按照建议您可以安装 cURL 实用程序。

示例卷曲请求如下。

shell
curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{ "user" : "Arun Thundyill Saseendran", "post_date" : "2009-03-23T12:30:00", "message" : "trying out Elasticsearch" }' "http://10.103.102.56:9200/sampleindex/sampletype/"

我也在广泛地开始和探索 ES。因此,如果您还有任何其他疑问,请告诉我。

编辑:将索引名称和类型名称更新为完全小写以避免错误并遵循约定。

2024年6月29日 12:07 回复

我开始使用curl,但后来迁移到使用kibana。以下是来自elastic.co(E elastic search、K kibana)的有关 ELK 堆栈的更多信息: https: //www.elastic.co/elk-stack

使用 kibana,您的POST请求会更简单一些:

shell
POST /<INDEX_NAME>/<TYPE_NAME> { "field": "value", "id": 1, "account_id": 213, "name": "kimchy" }
2024年6月29日 12:07 回复

你的答案