elasticsearch的文档操作
在Elasticsearch中,文档是存储在索引中的最小数据单元。它是对应于JSON格式的数据对象,表示实际的数据记录。每个文档都具有唯一的ID,并且包含一组键值对,用于表示文档的字段和相应的值,本文主要介绍了对文档的基本操作。
官网:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
1、新增文档
向Elasticsearch中的索引添加新文档时,可以使用HTTP请求通过RESTful API进行操作。以下是一个示例用法来新增文档:
假设我们有一个名为my_index的索引,my_index的基本属性如下
create_at、emali、field1、field2、name(包含firstname)、price、title
1、使用HTTP PUT请求创建一个新的文档:
PUT /my_index/_doc/1
{
"name":{
"firstname":"测试"
},
"email":"[email protected]",
"create_at":"2023-05-20",
"filed1":"测试字段1",
"field2":"测试字段2",
"price":90,
"title":"测试案例"
}
在上述示例中,我们使用PUT请求将一个具有指定ID(此处为1)的文档添加到my_index索引中。请求的内容是一个JSON对象。
返回结果:
2、使用自动生成的文档ID创建新文档:
POST /my_index/_doc
{
"name":{
"firstname":"测试2"
},
"email":"[email protected]",
"create_at":"2023-05-21",
"filed1":"测试字段2-1",
"field2":"测试字段2-2",
"price":180,
"title":"测试案例2"
}
上述代码我们使用了POST请求向名为my_index的索引中新增了一个文档,此时新增的文档ID是自动生成文档ID并添加文档。
使用PUT和使用POST新增文档的区别:
PUT:PUT方法用于在指定的终端点上创建或更新指定的资源。当使用PUT请求时,您需要明确指定要创建或更新的资源的唯一标识符。如果指定的资源已经存在,则会更新该资源;如果不存在,则会创建一个新的资源。因此,使用PUT请求时,您需要提供明确的文档ID,以便指定要创建或更新的文档。
PUT /<索引名>/_doc/<文档id>
{
字段名:字段值
字段名:字段值
}
POST:POST方法用于在指定的终端点上执行操作,例如在索引中创建文档、执行搜索或聚合等。当使用POST请求时,Elasticsearch会自动生成一个唯一的文档ID,并将文档添加到指定的索引中。如果指定的文档ID已经存在,Elasticsearch将返回一个错误。因此,每次使用POST请求创建文档时,都会生成一个新的文档ID。
POST /<索引名>/_doc
{
字段名:字段值
字段名:字段值
}
总结来说,POST用于自动生成文档ID并添加文档,PUT用于明确指定文档ID并创建或更新文档。选择使用POST还是PUT取决于对文档ID的要求以及创建还是更新文档。
2、查询文档
1、查询文档id的文档
在Elasticsearch中,查询文档的语法主要使用GET请求来进行,结构如下:
GET /索引名称/_doc/文档ID
其中,索引名称是要查询的索引的名称,文档ID是要查询的文档的唯一标识符。
以我们的索引my_index为例:
GET /my_index/_doc/1
2、查询所有文档
在Elasticsearch中,查询文档的语法主要使用GET请求来进行,使用_search端点,并指定一个匹配所有文档的查询条件,例如match_all查询。以下是一个查询所有文档的示例:
GET /索引id/_search
{
"query": {
"match_all": {
}
}
}
响应中的hits字段包含了查询到的文档信息,其中hits.hits是一个数组,每个元素代表一个匹配的文档。
_source中显示了每个文档的具体内容。
3、删除文档
可以使用删除文档的API。在Elasticsearch中,可以使用DELETE方法和文档的索引、类型和ID来删除文档。以下是删除文档的语法和一个示例:
DELETE /<索引名称>/<文档类型>/<文档ID>
假如我们现在要删除文档id为Vy7NjogBvRBn7emX3Wv8的文档(上文中PUT的文档)
DELETE /my_index/_doc/Vy7NjogBvRBn7emX3Wv8
从Elasticsearch 7.x版本开始,类型已经被弃用,因此在新版本中,可以直接使用_doc作为文档类型。
4、修改文档
1、使用PUT命令修改文档
PUT /<索引名称>/_doc/<文档ID>
{
"字段1": "值1",
"字段2": "值2",
...
}
修改索引为my_index的文档id为1 的文档数据:
PUT /my_index/_doc/1
{
"name":{
"firstname":"修改文档"
},
"emali":"[email protected]",
"create_at":"2022-11-11",
"filed1":"修改1",
"filed2":"修改2",
"price":80,
"title":"修改"
}
修改后:
注意:
- 如果文档不存在,则会创建一个新文档;如果文档已经存在,则会替换现有文档的内容。
- 使用PUT请求更新文档时,Elasticsearch会完全替换现有文档的内容。如果只提供了要更新的部分字段,其他字段将被视为缺失并被删除。
- 仅更新部分字段而保留其他字段不变,推荐使用部分更新(Partial Update)的方式,使用POST请求和_update API来进行部分更新.
2、使用POST命令修改文档
使用POST更新文档操作:
方式一:
全量修改,会删除旧的文档,增加新的文档
PUT /<索引名称>/_doc/<文档ID>
{
"字段1": "新值1",
"字段2": "新值2",
}
以下是更新索引my_index中文档id为1的文档数据
PUT /my_index/_doc/1
{
"name":{
"firstname":"PUT修改文档"
},
"emali":"[email protected]",
"create_at":"2022-12-12",
"filed1":"PUT修改1",
"filed2":"PUT修改2",
"price":800,
"title":"POST修改"
}
方式二:
增量修改,修改指定字段的值,该格式可以进行部分更新
POST /<索引名称>/_update/<文档ID>
{
"doc": {
"字段1": "新值1",
"字段2": "新值2",
...
}
}
示例:
我们修改了文档id为1的部分数据
总结:
创建文档(新增):
使用 **POST /<索引名称>/_doc 或 PUT /<索引名称>/_doc/<文档ID>**方法来创建新的文档。
在请求正文中提供文档的字段和值。
查询文档:
使用**GET /<索引名称>/_doc/<文档ID>**方法来获取特定ID的文档。
使用 GET /<索引名称>/_search方法来执行高级查询并获取匹配的文档。
更新文档:
使用 POST /<索引名称>/_update/<文档ID> 方法进行部分更新。
使用 PUT /<索引名称>/_doc/<文档ID> 方法进行完全替换。
删除文档:
使用 DELETE /<索引名称>/_doc/<文档ID> 方法来删除特定ID的文档。
使用 DELETE /<索引名称> 方法来删除整个索引库。