有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

elasticsearch需要elasticsearch高级Java客户端更新ByQueryRequest API帮助

我正在从普通的ES Http调用迁移到ES HighLevelJavaClient

我想转换这个旧的实现POST/\u update\u by\u query

 {
  "script": {
    "inline": "ctx._source.collibra_match_for = []"
  },
  "query": {
    "bool": {
      "filter": {
        "script": {
          "script": {
            "source": "doc['collibra_match_for.keyword'].values.length > 0",
            "lang": "painless"
          }
        }
      }
    }
  }
}

到高级客户端代码

我试过的代码是:

  UpdateByQueryRequest request = new UpdateByQueryRequest();
    request.setConflicts("proceed");
    request.setQuery(QueryBuilders.boolQuery().filter(QueryBuilders.scriptQuery(new Script("doc['collibra_match_for.keyword'].values.length > 0"))));
    request.setScript(new Script(ScriptType.INLINE, "painless","ctx._source.collibra_match_for = []",Collections.emptyMap()));
    request.setRefresh(true);
    try {
        BulkByScrollResponse bulkResponse = esClient.updateByQuery(request, RequestOptions.DEFAULT);
        long totalDocs = bulkResponse.getTotal();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

但我有一个错误:

Elasticsearch exception [type=exception, reason=Incorrect HTTP method for uri [/_update_by_query?requests_per_second=-1&ignore_unavailable=false&expand_wildcards=open&allow_no_indices=true&refresh=true&conflicts=proceed&timeout=1m] and method [POST], allowed: [DELETE, PUT, GET, HEAD]]

任何帮助都将不胜感激:)


共 (1) 个答案

  1. # 1 楼答案

    我真的找到了这个问题的答案。。 我们只需要在构造函数中添加索引名。 这是这个问题的最终答案。希望对以后的人有用:)

        UpdateByQueryRequest request = new UpdateByQueryRequest(INDEX_NAME);
        request.setConflicts("proceed");
        request.setQuery(QueryBuilders.boolQuery().filter(QueryBuilders.scriptQuery(new Script("doc['collibra_match_for.keyword'].values.length > 0"))));
        request.setScript(new Script(ScriptType.INLINE, "painless","ctx._source.collibra_match_for = []",Collections.emptyMap()));
        request.setRefresh(true);
        try {
            BulkByScrollResponse bulkResponse = esClient.updateByQuery(request, RequestOptions.DEFAULT);
            long totalDocs = bulkResponse.getTotal();
        } catch (IOException e) {
            e.printStackTrace();
        }