后端开发之Elasticsearch篇----深度查询和批量查询

深度查询和批量查询

深度分页

在分页查询中,使用和query同级的关键字from和size。但是当你的from从9999开始而size是10的时候肯定会报错。
因为有一个max_result_window的参数控制着,其默认值是10000。如果你的公司非要进行那些超深度的查询,可以修改这个值

GET     /shop/_settings         #  用于查询相关的设置

PUT     /shop/_settings         #  设置相关参数
{ 
    "index.max_result_window": "20000"
}

当然你也可以使用scroll滚动搜索,并设置锚点保存时间

  • scroll=1m,相当于是一个session会话时间,搜索保持的上下文时间为1分钟。
POST    /shop/_search?scroll=1m
{
    "query": { 
    	"match_all": {
    	}
    },  
    "sort" : ["_doc"], 
    "size":  5
}
# 上面的返回值会有一个_scroll_id的属性,将其copy

POST    /_search/scroll
{
    "scroll": "1m", 
    "scroll_id" : "your last scroll_id"  # 贴在这个点发
}

批量操作

_mget批量查询

# 之前的多id查询是这样的,这种是检索类的查询将返回相关的max_score和hint等元数据
POST /shop/_doc/_search
{
	"query":{
		"ids":{
			"type":"_doc",
			"values":["1001","1002","1003"]
		}
	}
}

# 但是_mget这个就是返回一个个doc,并且如果没有存在要查询的id时,也会显示一个json对象,里面有个属性是found会显示false,而有的id的found就是true
POST /shop/_doc/_mget
{
	"ids":["1001","1002","1003"]
}

bulk批量操作
和以往的输入风格有一点点区别。不用对json进行格式化,切每行都要会车(包括最后一行也要会车)

{ action: { metadata }}\n
{ request body        }\n
{ action: { metadata }}\n
{ request body        }\n
...
  • { action: { metadata }}代表批量操作的类型,可以是新增、删除或修改
  • \n是每行结尾必须填写的一个规范,每一行包括最后一行都要写,用于es的解析
  • { request body }是请求body,增加和修改操作需要,删除操作则不需要

action必须是以下选项之一:

  • create:如果文档不存在,那么就创建它。存在会报错。发生异常报错不会影响其他操作。
  • index:创建一个新文档或者替换一个现有的文档。
  • update:部分更新一个文档。
  • delete:删除一个文档。
create新增文档
POST    /_bulk
{"create": {"_index": "shop2", "_type": "_doc", "_id": "2001"}}
{"id": "2001", "nickname": "name2001"}
{"create": {"_index": "shop2", "_type": "_doc", "_id": "2002"}}
{"id": "2002", "nickname": "name2002"}
{"create": {"_index": "shop2", "_type": "_doc", "_id": "2003"}}
{"id": "2003", "nickname": "name2003"}

# 也可以将index和type写在url上面
POST    /shop/_doc/_bulk
{"create": {"_id": "2003"}}
{"id": "2003", "nickname": "name2003"}
{"create": {"_id": "2004"}}
{"id": "2004", "nickname": "name2004"}
{"create": {"_id": "2005"}}
{"id": "2005", "nickname": "name2005"}

index创建或者覆盖原有的文档
# 有就更新,没有就创建。而create的话,有就报错
POST    /shop/_doc/_bulk
{"index": {"_id": "2004"}}
{"id": "2004", "nickname": "index2004"}
{"index": {"_id": "2007"}}
{"id": "2007", "nickname": "name2007"}
{"index": {"_id": "2008"}}
{"id": "2008", "nickname": "name2008"}

update部分文档字段
POST    /shop/_doc/_bulk
{"update": {"_id": "2004"}}
{"doc":{ "id": "3004"}}
{"update": {"_id": "2007"}}
{"doc":{ "nickname": "nameupdate"}}

delete删除
# 不用跟request body
POST    /shop/_doc/_bulk
{"delete": {"_id": "2004"}}
{"delete": {"_id": "2007"}}

综合批量各种操作
POST    /shop/_doc/_bulk
{"create": {"_id": "8001"}}
{"id": "8001", "nickname": "name8001"}
{"update": {"_id": "2001"}}
{"doc":{ "id": "20010"}}
{"delete": {"_id": "2003"}}
{"delete": {"_id": "2005"}}

官方提示:每个集群都用自己的一个批量性能顶峰阈值,当到达这个阈值时(批量的操作数量),性能就会下降

发布了118 篇原创文章 · 获赞 16 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_39702831/article/details/105000309