许多 Meilisearch 操作都是作为异步任务处理的。异步任务允许您对 Meilisearch 项目进行资源密集型更改,而不会导致用户停机。

在本教程中,您将使用 Meilisearch API 向索引添加文档,并监控其状态。

前提条件

  • 一个运行中的 Meilisearch 项目
  • 命令行终端

向任务队列添加任务

需要索引的操作(如添加和更新文档或更改索引设置)总是会生成任务。

首先创建一个索引,然后向该索引添加大量文档:

curl \
  -X POST 'MEILISEARCH_URL/indexes/movies/documents'\
  -H 'Content-Type: application/json' \
  --data-binary @movies.json

Meilisearch 不会立即处理您的请求,而是将其加入队列并返回一个简化的任务对象:

{
  "taskUid": 0,
  "indexUid": "movies",
  "status": "enqueued",
  "type": "documentAdditionOrUpdate",
  "enqueuedAt": "2021-08-11T09:25:53.000000Z"
}

这个简化的任务对象确认您的请求已被接受。它还提供了可用于监控请求状态的信息,例如 taskUid

您可以使用 Cloud 界面向新的 Meilisearch Cloud 索引添加文档。要获取此任务的 taskUid,请访问”Task”概览页面,查找与您新创建索引关联的”Document addition or update”任务。

监控任务状态

Meilisearch 按照任务加入队列的顺序处理任务。您可以使用 Meilisearch Cloud 界面或 Meilisearch API 检查任务状态。

在 Meilisearch Cloud 界面监控任务状态

登录您的 Meilisearch Cloud 账户并导航至项目页面。点击项目菜单中的”Tasks”链接:

这将带您进入任务概览页面。在”Uid”列中查找您请求对应的 taskUid

当任务 status 变为 succeeded 时,表示 Meilisearch 已完成处理您的请求。

如果任务 status 变为 failed,则表示 Meilisearch 无法完成您的请求。请检查任务对象的 error 字段获取更多信息。

使用 Meilisearch API 监控任务状态

使用请求响应中的 taskUid 来检查任务状态:

curl \
  -X GET 'MEILISEARCH_URL/tasks/1'

这将返回完整的任务对象:

{
  "uid": 4,
  "indexUid" :"movie",
  "status": "succeeded",
  "type": "documentAdditionOrUpdate",
  "canceledBy": null,
  "details": {

  },
  "error": null,
  "duration": "PT0.001192S",
  "enqueuedAt": "2022-08-04T12:28:15.159167Z",
  "startedAt": "2022-08-04T12:28:15.161996Z",
  "finishedAt": "2022-08-04T12:28:15.163188Z"
}

如果任务仍处于 enqueuedprocessing 状态,请稍等片刻后再次查询。如果您使用的是自托管 Meilisearch 实例,也可以设置 webhook 监听器

status 变为 succeeded 时,表示 Meilisearch 已完成处理您的请求。

如果任务 status 变为 failed,则表示 Meilisearch 无法完成您的请求。请检查任务对象的 error 字段获取更多信息。

总结

你已经了解了当 API 请求向任务队列添加任务时会发生什么,以及如何检查该任务的状态。如需了解更多关于任务工作原理的信息,请查阅任务 API 参考异步操作说明