在Elasticsearch中 按 ID检索文档的语法是什么?
参考回答
在 Elasticsearch 中,可以使用 GET 请求按 ID 检索单个文档。基本语法如下:
GET /<index>/_doc/<document_id>
<index>:要检索文档的索引名称。<document_id>:文档的唯一标识符(ID)。
示例:
假设有一个索引名为 products,其中有一个文档的 ID 为 1,可以通过以下语法检索:
GET /products/_doc/1
详细讲解与拓展
1. 示例返回结果
执行上述请求后,返回的响应结果通常如下:
{
"_index": "products",
"_type": "_doc",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"name": "Laptop",
"price": 1000,
"category": "Electronics"
}
}
- _index:文档所属的索引。
- _id:文档的唯一 ID。
- _version:文档的版本号(表示这是第几次更新)。
- found:表示是否找到文档,
true表示找到,false表示未找到。 - _source:文档的具体内容。
2. 如果文档不存在
如果尝试检索一个不存在的文档,返回的结果会是:
{
"_index": "products",
"_type": "_doc",
"_id": "100",
"found": false
}
3. 批量按 ID 检索文档
如果需要一次检索多个文档,可以使用 _mget(Multi-GET API)。语法如下:
GET /products/_mget
{
"ids": ["1", "2", "3"]
}
返回结果:
{
"docs": [
{
"_index": "products",
"_id": "1",
"found": true,
"_source": {
"name": "Laptop",
"price": 1000
}
},
{
"_index": "products",
"_id": "2",
"found": false
},
{
"_index": "products",
"_id": "3",
"found": true,
"_source": {
"name": "Smartphone",
"price": 700
}
}
]
}
- 结果中每个文档以
docs数组的形式返回。 - 如果某个 ID 的文档不存在,则
found为false。
4. 按 ID 检索的性能
按 ID 检索是 Elasticsearch 中最快的查询方式,原因如下:
– Elasticsearch 会直接通过 倒排索引 定位到文档所在的位置,而无需扫描整个索引。
– 按 ID 查询是 O(1) 的操作,效率非常高。
5. 拓展:按多个条件(非 ID)检索文档
如果需要根据其他条件而非 ID 检索文档,可以使用 Search API。例如,根据 name 字段值为 Laptop 检索:
GET /products/_search
{
"query": {
"match": {
"name": "Laptop"
}
}
}
总结
- 按 ID 检索文档是 Elasticsearch 中最基础也最高效的查询方式,使用
GET /<index>/_doc/<document_id>实现。 - 如果需要一次检索多个文档,可以使用
_mgetAPI。 - 这种查询方式性能非常高,适用于场景中需要直接定位某个具体文档的情况。