面试题答案
一键面试- 获取任务ID:
- 首先,在执行搜索请求时,需要开启
track_total_hits
参数(这不是获取任务ID的直接方式,但确保搜索请求正常执行以便后续获取任务相关信息)。例如,一个搜索请求可以如下:
{ "query": { "match_all": {} }, "track_total_hits": true }
- 然后,要获取任务ID,在搜索请求的
header
中添加preference=_local
,Elasticsearch会将该搜索任务分配到本地节点,并且在响应的_shards
字段中会包含任务ID信息。示例请求(以curl
为例):
curl -X GET "localhost:9200/index_name/_search?preference=_local" -H 'Content-Type: application/json' -d' { "query": { "match_all": {} } }'
- 响应中的
_shards
字段会类似如下:
这里的{ "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0, "tasks": [ "D877552826790330369:12345" ] }, "hits": { "total": { "value": 10, "relation": "eq" }, "max_score": 1.0, "hits": [] } }
D877552826790330369:12345
就是任务ID。 - 首先,在执行搜索请求时,需要开启
- 取消任务:
- 使用
_tasks/cancel
API来取消任务。 - API调用格式:
POST /_tasks/<task_id>/_cancel
,其中<task_id>
就是上面获取到的任务ID。例如,使用curl
:
curl -X POST "localhost:9200/_tasks/D877552826790330369:12345/_cancel"
- 相关参数含义:
- 这里主要就是任务ID,任务ID唯一标识了要取消的任务。它由两部分组成,冒号前的部分是节点ID,冒号后的部分是任务在该节点上的本地ID。Elasticsearch通过这个组合ID可以定位到具体要取消的长时间运行的搜索任务。取消任务成功后,Elasticsearch会停止与该任务相关的资源占用,如查询执行的线程等。
- 使用