ElasticSearch 实战:使用mget进行批量查询

在 Elasticsearch 中,mget(multiple get)API 用于一次性查询多个文档,显著减少了网络往返次数,提高了查询效率。以下是如何使用 mget 进行批量查询的实战步骤:

1. 请求格式

mget 请求采用 GET 方法,发送到 <index>/_mget 端点,请求体包含一个 docs 数组,每个元素是一个对象,描述要查询的文档:

{
  "docs": [
    {
      "_index": "<index_name>",
      "_type": "<type_name>",  // 对于 Elasticsearch 7.x 及更高版本,此字段通常不需要,因为已经默认为 `_doc`
      "_id": "<document_id>"
    },
    {
      "_index": "<index_name>",
      "_type": "<type_name>",
      "_id": "<document_id>"
    },
    ...
  ]
}

2. 示例请求

假设您要从 users 索引中批量查询用户 ID 为 123 的文档,可以发出如下 mget 请求:

curl -X GET "http://localhost:9200/users/_mget" -H 'Content-Type: application/json' -d'
{
  "docs": [
    { "_id": "1" },
    { "_id": "2" },
    { "_id": "3" }
  ]
}'

3. 响应格式

响应体包含一个 docs 数组,与请求中的顺序对应,每个元素是一个对象,包含查询结果:

  • _index: 文档所在的索引名。
  • _type: 文档类型(对于 Elasticsearch 7.x 及更高版本,通常为 _doc)。
  • _id: 文档 ID。
  • _version: 文档版本号。
  • found: 布尔值,表示是否找到了对应 ID 的文档。如果为 false,则其他字段(如 _source)将缺失。
  • _source: (如果存在)包含查询到的文档原始内容的 JSON 对象。
  • fields: (可选)如果请求中指定了要返回的特定字段,它们将在此处列出。

示例响应:

{
  "docs": [
    {
      "_index": "users",
      "_type": "_doc",
      "_id": "1",
      "_version": 1,
      "found": true,
      "_source": {
        "user_id": "1",
        "username": "Alice",
        "email": "alice@example.com",
        "age": 30
      }
    },
    {
      "_index": "users",
      "_type": "_doc",
      "_id": "2",
      "_version": 1,
      "found": true,
      "_source": {
        "user_id": "2",
        "username": "Bob",
        "email": "bob@example.com",
        "age": 35
      }
    },
    {
      "_index": "users",
      "_type": "_doc",
      "_id": "3",
      "found": false
    }
  ]
}

4. 注意事项

  • 跨索引查询mget 请求可以同时查询多个索引中的文档,只需在 docs 数组中为不同索引指定相应的 _index

  • 过滤返回字段:通过在请求体中添加 stored_fields 参数,可以指定返回哪些字段(而非整个 _source)。这对于减少网络传输量和提高查询性能特别有用,特别是当文档 _source 中包含大量数据时。

  • 版本控制:可以指定 versionversion_type 参数来处理并发更新情况下的版本控制。

  • 错误处理:如果请求中的某些文档 ID 不存在或出现其他错误,Elasticsearch 仍会返回其他成功查询的结果。需要检查响应中每个文档的 found 字段来确定查询是否成功。

通过 mget API,您可以高效地批量查询多个文档,节省网络资源并提高查询速度。在处理大量文档查询或需要定期批量获取数据的场景中,这是一种非常实用的技术。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值