ES学习记录7——ES的数据复制模型(批处理接口)

本文详细介绍了Elasticsearch的批处理接口,包括Multi Get接口和Bulk接口的使用方法。Multi Get接口允许批量获取多个文档,支持过滤和路由。Bulk接口则用于批量索引/删除操作,大大提高效率,支持多种操作行为,如创建、更新和删除。文中还讨论了批处理的响应结构、版本控制、路由和刷新策略等关键概念。
摘要由CSDN通过智能技术生成

9.2 批处理接口

9.2.1 Multi Get接口

 Multi Get允许基于索引、类型以及ID获取多个文档,响应具有一个docs数组,其中所有获取的文档按顺序对应于原始的multi-get请求,如果多个get请求中存在个别get失败了,那么doc数组中用含有这些错误的对象来代替原本应该是文档的位置。下面是多get请求的案例:

GET /_mget
{
   
    "docs" : [
        {
   
            "_index" : "test",
            "_type" : "_doc",
            "_id" : "1"
        },
        {
   
            "_index" : "test",
            "_type" : "_doc",
            "_id" : "2"
        }
    ]
}

其实就是将原来的get请求的条件放在了请求体中,这个请求体中可以放多个请求条件,但是发现上述的索引、类型都相同,所以可以进一步提取为:

GET /test/_doc/_mget
{
   
  "docs": [
    {
   
      "_id": "1"
    },
    {
   
      "_id": "2"
    }
  ]
}

总而言之,这里可以把相同的都提取出来,不同的留在请求体的docs数组中,上述的文档的id可以直接搞成一个数组,更加简洁:

// 注,这里id数组里面的数字虽然不加引号,但是ES生成的id都为String类型,最好加上
GET /test/_doc/_mget
{
   
  "ids": ["1","2"]
}

过滤

 默认情况下,get是取回整个文档中的所有字段,mget也是一样,但它和get一样也提供了过滤的功能,只过滤出部分属性进行显示,参数也一样_source_include_source_exclude_source可以整体过滤文档属性,下面的_mget案例展示了一些用法:

GET /test/_doc/_mget
{
   
  "docs": [
    // 直接不开启过滤,所以返回的结果中没有文档的具体属性
    {
   
      "_id": "1",
      "_source": false
    },
    // 过滤出文档中的name和age属性进行显示
    {
   
      "_id": "3",
      "_source": ["name", "age"]
    },
    // 将age属性丢弃,将name属性过滤出来
    {
   
      "_id": "4",
      "_source": {
   
        "exclude": ["age"],
        "include": ["name"]
      }
    }
   ]
}

除了上述使用_source源过滤外,还可以使用字段过滤,关键字为stored_fields(这个字段不知道是用来干嘛的,有人说是独立于_source之外单独存储的),比如下面的:

GET /_mget
{
   
    "docs" : [
        {
   
            "_index" : "test",
            "_type" : "_doc",
            "_id" : "1",
            "stored_fields" : ["field1", "field2"]
        },
        {
   
            "_index" : "test",
            "_type" : "_doc",
            "_id" : "2",
            "stored_fields" : ["field3", "field4"]
        }
    ]
}

在实操时,这个字段没搞懂啥意思,只能过滤_source,测试下来好像就只能选择是否显示_source,下面是测试过程:

// 取出原始文档
GET /_mget
{
   
    "docs" : [
        {
   
          "_index": "glodon",
          "_id": "2"
        },
        {
   
          "_index": "shardstest",
          "_id": 1
        }
    ]
}

// 最原始的结果
{
   
    "docs": [
        {
   
            "_index": "glodon",
            "_type": "employee",
            "_id": "2",
            "_version": 2,
            "found": true,
            "_source": {
   
                "user": "test",
                "likes": 3,
                "post_date": 1542347983,
                "message": "trying out Elasticsearch"
            }
        },
        {
   
            "_index": "shardstest",
            "_type": "_doc",
            "_id": "1",
            "_version": 2,
            "found": true,
            "_source": {
   
                "product": "xiaomi",
                "price": 20890.89
            }
        }
    ]
}

// 使用stored_fields字段过滤
GET /_mget
{
   
	"docs": [
		{
   
			"_index": "glodon",
			"_id": "2",
			"stored_fields": ["user", "message"]
		},
		{
   
			"_index": "shardstest",
			"_id": 1,
			"stored_fields": ["_source"]
		}
	]
}

// 过滤后的结果
{
   
    "docs": [
        {
   
            "_index": "glodon",
            "_type": "employee",
            "_id": "2",
            "_version": 2,
            "found": true
        },
        {
   
            "_index": "shardstest",
            "_type": "_doc",
            "_id": "1",
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值