一、题目
通过异步方式查询earthquakes索引下Magnitude大于5的数据
二、思考
正常的查询大家可能会用的多一点,这种异步查询为了可以数据量量比较大的查询在后台执行,不用同步等待结果,待执行完成在获取结果。
三、解题
Step 1、准备基础数据
# DELETE earthquakes
PUT earthquakes# 初始化数据
POST earthquakes/_bulk
{"index":{"_id":1}}
{"DateTime":"2016-01-01 12:12:12", "Magnitude":4.56}
{"index":{"_id":2}}
{"DateTime":"2016-01-01 15:12:12", "Magnitude":6.46}
{"index":{"_id":3}}
{"DateTime":"2016-02-02 13:12:12", "Magnitude":4}
{"index":{"_id":4}}
{"DateTime":"2016-03-02 13:12:12", "Magnitude":6}
Step 2、执行异步查询
注意:使用的api是_async_search
POST earthquakes/_async_search?size=0
{"query": {"range": {"Magnitude": {"gte": 5}}}
}
Step 3、异步获取结果
在官网通过的api说明中,可以获取到一个id,然后通过这个ID可以获取异步执行的结果,但是由于我本地没有这么多的数据集,无法形成一个正常的异步查询。暂且通过官网API提供的实例进行假设练习。官网API实例返回异步查询结果如下
{"id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=", "is_partial" : true, "is_running" : true, "start_time_in_millis" : 1583945890986,"expiration_time_in_millis" : 1584377890986,"response" : {"took" : 1122,"timed_out" : false,"num_reduce_phases" : 0,"_shards" : {"total" : 562, "successful" : 3, "skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 157483, "relation" : "gte"},"max_score" : null,"hits" : [ ]}}
}
在通过get方式获取对应异步结果,模版为 get /_async_search/{id}
GET /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=
还可以通过其他命令例如:
查询异步执行状态,API模版为 GET /_async_search/status/{id}
GET /_async_search/status/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=
删除异步执行,API模版为 DELETE /_async_search/{id}
DELETE /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=
四、总结
同步查询和异步查询API对比记忆
- 异步查询使用_async_search
- 同步查询使用_search
参考资料
- Async search | Elasticsearch Guide [8.1] | Elastic
送一波福利:
福利一
有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!
有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!
有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!
福利二
福利三