Elasticsearch指定响应查询和批量操作

1.指定响应查询

在响应的数据中,如果我们不需要全部的字段,可以指定某些需要的字段进行返回。

GET http://127.0.0.1:9200/blog1/user/1001?_source=id,name
返回数据如下:

{
    "_index": "blog1",
    "_type": "user",
    "_id": "1001",
    "_version": 2,
    "_seq_no": 8,
    "_primary_term": 2,
    "found": true,
    "_source": {
        "name": "李四",
        "id": 1002
    }
}

如不需要返回元数据,仅仅返回原始数据,可以这样:
GET http://127.0.0.1:9200/blog1/user/1001/_source
返回结果:

{
	"id": 1002,
	"name": "李四",
	"age": 25,
	"sex": "男"
}

GET http://127.0.0.1:9200/blog1/user/1001/_source?_source=id,name
响应结果:

{
    "name": "李四",
    "id": 1002
}

2.判断文档是否存在

如果我们只需要判断文档是否存在,而不是查询文档内容,那么可以这样:
HEAD http://127.0.0.1:9200/blog1/user/1001,如果返回的status是200,表示数据存在,返回404表示不存在。

3.批量操作

1.批量查询_mget

POST http://127.0.0.1:9200/blog1/user/_mget
{
	"ids":["1001","1002"]
}

响应结果:

{
	"docs": [
		{
			"_index": "blog1",
			"_type": "user",
			"_id": "1001",
			"_version": 2,
			"_seq_no": 8,
			"_primary_term": 2,
			"found": true,
			"_source": {
				"id": 1002,
				"name": "李四",
				"age": 25,
				"sex": "男"
			}
		},
		{
			"_index": "blog1",
			"_type": "user",
			"_id": "1002",
			"found": false
		}
	]
}

2._bulk操作
在Elasticsearch中,支持批量的插入、修改、删除操作,都是通过_bulk的api完成的。

  • 批量插入
POST http://127.0.0.1:9200/blog1/user/_bulk

{"create":{"_index":"blog1","_type":"user","_id":2001}}
{"id":2001,"name":"name1","age": 20,"sex": "男"}
{"create":{"_index":"blog1","_type":"user","_id":2002}}
{"id":2002,"name":"name2","age": 20,"sex": "男"}
{"create":{"_index":"blog1","_type":"user","_id":2003}}
{"id":2003,"name":"name3","age": 20,"sex": "男"}


响应数据:

{
    "took": 186,
    "errors": false,
    "items": [
        {
            "create": {
                "_index": "blog1",
                "_type": "user",
                "_id": "2001",
                "_version": 1,
                "result": "created",
                "_shards": {
                    "total": 1,
                    "successful": 1,
                    "failed": 0
                },
                "_seq_no": 13,
                "_primary_term": 3,
                "status": 201
            }
        },
        {
            "create": {
                "_index": "blog1",
                "_type": "user",
                "_id": "2002",
                "_version": 1,
                "result": "created",
                "_shards": {
                    "total": 1,
                    "successful": 1,
                    "failed": 0
                },
                "_seq_no": 5,
                "_primary_term": 3,
                "status": 201
            }
        },
        {
            "create": {
                "_index": "blog1",
                "_type": "user",
                "_id": "2003",
                "_version": 1,
                "result": "created",
                "_shards": {
                    "total": 1,
                    "successful": 1,
                    "failed": 0
                },
                "_seq_no": 6,
                "_primary_term": 3,
                "status": 201
            }
        }
    ]
}
  • 批量删除
POST http://127.0.0.1:9200/blog1/user/_bulk

{"delete":{"_index":"blog1","_type":"user","_id":2001}}
{"delete":{"_index":"blog1","_type":"user","_id":2002}}
{"delete":{"_index":"blog1","_type":"user","_id":2003}}

响应结果:


{
    "took": 89,
    "errors": false,
    "items": [
        {
            "delete": {
                "_index": "blog1",
                "_type": "user",
                "_id": "2001",
                "_version": 2,
                "result": "deleted",
                "_shards": {
                    "total": 1,
                    "successful": 1,
                    "failed": 0
                },
                "_seq_no": 14,
                "_primary_term": 3,
                "status": 200
            }
        },
        {
            "delete": {
                "_index": "blog1",
                "_type": "user",
                "_id": "2002",
                "_version": 2,
                "result": "deleted",
                "_shards": {
                    "total": 1,
                    "successful": 1,
                    "failed": 0
                },
                "_seq_no": 7,
                "_primary_term": 3,
                "status": 200
            }
        },
        {
            "delete": {
                "_index": "blog1",
                "_type": "user",
                "_id": "2003",
                "_version": 2,
                "result": "deleted",
                "_shards": {
                    "total": 1,
                    "successful": 1,
                    "failed": 0
                },
                "_seq_no": 8,
                "_primary_term": 3,
                "status": 200
            }
        }
    ]
}

其他操作就类似了。
一次请求多少性能最高?

  • 整个批量请求需要被加载到接受我们请求节点的内存里,所以请求越大,给其它请求可用的内存就越小。有一个最佳的bulk请求大小。超过这个大小,性能不再提升而且可能降低。
  • 最佳大小,当然并不是一个固定的数字。它完全取决于你的硬件、你文档的大小和复杂度以及索引和搜索的负载。
  • 幸运的是,这个最佳点(sweetspot)还是容易找到的:试着批量索引标准的文档,随着大小的增长,当性能开始降低,说明你每个批次的大小太大了。开始的数量可以在1000~5000个文档之间,如果你的文档非常大,可以使用较小的批次。
  • 通常着眼于你请求批次的物理大小是非常有用的。一千个1kB的文档和一千个1MB的文档大不相同。一个好的批次最好保持在5-15MB大小间。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值