使用Java API使用Scala通过ID删除Elasticsearch文档

时间:2018-03-29 08:05:59

标签: scala elasticsearch elasticsearch-java-api

我在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() }
}

配置:
- Scala 2.10.6
- Spark 1.6
- Elasticsearch 2.3.2

谢谢

1 个答案:

答案 0 :(得分:1)

我想这是一个非常具体的案例,但鉴于Java API使用情况不佳,有人可能会发现这种情况相关。

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

我的ID来自列表,其中包含一些混乱的括号,删除请求成功但ID错误。

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

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