【问题标题】:Update ElasticSearch document based on condition using Java API使用 Java API 根据条件更新 ElasticSearch 文档
【发布时间】:2021-08-20 08:38:01
【问题描述】:

我有一个弹性搜索索引(让我们将其命名为学生)。我有字段

{ "name","division" ,"class" , "studentRollNo"} .

是否可以更新名称为 "ABC" 的记录的弹性搜索索引。使用 update API 我只能通过 id 更新它,使用 Update with query 如何传递 jsonString 。假设我用于更新的 json 字符串是

现有的:

{ "name":"abc" , "division":"D","class" :10 ,"studentRollNo":23}

更新:

{"name":"abc" , "division" : A , "class" : 11 , "studentRollNo" : 23}

【问题讨论】:

  • 请在下面查看我的答案,如果对您有帮助,请标记为解决方案:)

标签: java elasticsearch


【解决方案1】:

我不确定您使用的是哪个 elasticsearch 版本,但下面是 ES 7.13 版本的代码 sn-p。

RestHighLevelClient client = new RestHighLevelClient(
            RestClient.builder(new HttpHost("localhost", 9200, "http")));

    UpdateByQueryRequest request = new UpdateByQueryRequest("student");
    request.setQuery(new TermQueryBuilder("name", "abc"));

    // This data map you can directly create from JSON string as well.
    Map<String, Object> data = new HashMap<String, Object>();
    data.put("name", "abc");
    data.put("division", "A");
    data.put("class", 11);
    data.put("studentRollNo", 23);

    Map<String, Object> param = new HashMap<String, Object>();
    param.put("data", data);

    // script will read data param value and assign to document source
    String source = "ctx._source=params.data";
    Script script = new Script(ScriptType.INLINE, "painless", source, param);

    request.setScript(script);
    client.updateByQuery(request, RequestOptions.DEFAULT);
    client.close();

以下是查询 rest API json 的等效更新:

POST student/_update_by_query
{
  "query": {
    "term": {
      "name": {
        "value": "abc"
      }
    }
  },
  "script": {
    "source": "ctx._source=params.data",
    "params": {
      "data": {
        "name": "abc",
        "division": "A",
        "class": 11,
        "studentRollNo": 23
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多