【问题标题】:Delete Elasticsearch document by ID with Scala using Java API使用 Java API 使用 Scala 按 ID 删除 Elasticsearch 文档
【发布时间】:2018-03-29 20:49:06
【问题描述】:

我在 Scala 中使用 Elastic Java API 删除文档列表,使用他们的 ID 一次删除一个,目前没有成功。 API 适用于 SearchResponse 等其他调用。
我的代码如下所示:

var deleteResp : DeleteResponse = null

deleteResp = ElasticSearch.getClient()
      .prepareDelete(index, type, id)
      .get()

同理:

deleteResp = ElasticSearch.getClient()
      .prepareDelete(index, type, id)
      .execute()
      .actionGet()

我还尝试捕获 Elastic 响应以使用它进行调试,但 stdout 中没有显示任何内容。

try{ \ previous code } 
catch {
    case e: Exception => {
    print("Failed deletion", e.getMessage)
    e.printStackTrace() }
}

配置:
- 斯卡拉 2.10.6
- 火花 1.6
- 弹性搜索 2.3.2

谢谢

【问题讨论】:

  • 你确定你的索引、类型和id吗?你能找到curl -XGET localhost:9200/index/type/id的文档吗?
  • 好的,您确定您的客户端已正确连接到您的 ES 服务器?
  • 连通性也一样,删除部分其实是代码的最后一步。在此之前,运行多个查询以获取 JSON 响应并轻松处理它们。
  • 但是您在deleteResp 中实际上得到了什么样的回应?
  • 问题是我不知道如何捕获响应,try/catch 块不返回任何 stackTrace,打印 deleteResp var 给出 org.elasticsearch.action.delete.DeleteResponse@5da55732 但是当我直接发送 DELETE 命令时感觉它工作正常。

标签: scala elasticsearch elasticsearch-java-api


【解决方案1】:

我猜这是一个非常具体的案例,但鉴于 Java API 使用方面的信息不佳,有人可能会发现此案例相关。

感谢 Val 和精确的调试,我找到了原因: 传递给 prepareSearch() 的字符串格式要非常小心。

我的 ID,来自一个列表,包含的括号搞砸了,删除请求成功但 ID 错误。

有关详细信息,请考虑在请求对象上使用所有可用方法并仔细检查每种格式:

var deletedId = deleteResp.getId()
var deletedType = deleteResp.getType()
var deletedIndex = deleteResp.getIndex()
var deletedShard = deleteResp.getShardInfo()

【讨论】:

    猜你喜欢
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2023-03-08
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2019-01-22
    相关资源
    最近更新 更多