elastic4s中如何从RequestSuccess[DeleteByQueryResponse]提取信息
解决方案
你提到的result类型为Left[DeleteByQueryResponse]应该是观测笔误,从你给出的RequestSuccess泛型定义来看,匹配到的success实例的result字段本身就是DeleteByQueryResponse类型,可以直接访问提取信息。
方法1:直接访问result字段提取信息
你在RequestSuccess匹配分支内,直接调用success.result即可拿到完整的DeleteByQueryResponse对象,常用可提取的核心字段包括:
- 匹配到的符合条件的文档总数:
total - 实际成功删除的文档数:
deleted - 执行是否超时:
timedOut - 分片执行结果统计:
shards - 执行过程中产生的异常失败列表:
failures
方法2:通过map方法转换结果
如果你需要对返回结果做统一转换封装,可以调用RequestSuccess提供的map方法,传入自定义转换函数即可得到新的Response实例。
完整修改后的代码示例
def delete(id: String) = { client.execute { deleteByQuery("myIndex", termQuery("id", id)) }.await } delete(id) match { case failure: RequestFailure => complete(StatusCodes.InternalServerError, failure.body.getOrElse("Unknown reason")) case success: RequestSuccess[DeleteByQueryResponse] => // 直接提取result字段 val delResult = success.result // 组装自定义返回信息 val resultInfo = s"删除操作完成:共匹配到${delResult.total}条文档,成功删除${delResult.deleted}条,是否超时:${delResult.timedOut}" complete(resultInfo) // map方法使用示例 // val infoResponse = success.map(res => s"共删除${res.deleted}条记录") // complete(infoResponse.result) }
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

