在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 的文档不存在,则 foundfalse

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> 实现。
  • 如果需要一次检索多个文档,可以使用 _mget API。
  • 这种查询方式性能非常高,适用于场景中需要直接定位某个具体文档的情况。

发表评论

后才能评论