使用Java API更新ElasticSearch索引中的嵌套字段

raz*_*inr 4 java json elasticsearch

我正在使用Java API对Elasticsearch进行CRUD操作。

我有一个带有嵌套字段的类型,我想更新此字段。

这是我对类型的映射:

"enduser": {
            "properties": {
                "location": {
                    "type": "nested",
                    "properties":{
                        "point":{"type":"geo_point"}
                    }
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

当然,我的最终用户类型将具有其他参数。

现在,我想将此文档添加到我的嵌套字段中:

"location":{
          "name": "London",
           "point": "44.5, 5.2"
}
Run Code Online (Sandbox Code Playgroud)

我在文档中搜索有关如何更新嵌套文档的信息,但找不到任何东西。例如,我在字符串中具有先前的JSON对象(我们将此字符串称为json)。我尝试了以下代码,但似乎无法正常工作:

params.put("location", json);
client.prepareUpdate(index, ElasticSearchConstants.TYPE_END_USER,id).setScript("ctx._source.location = location").setScriptParams(params).execute().actionGet();
Run Code Online (Sandbox Code Playgroud)

我有来自Elasticsearch的解析错误。有人知道我在做什么错吗?

Alc*_*zar 5

您不需要脚本,只需对其进行更新。

    UpdateRequestBuilder br = client.prepareUpdate("index", "enduser", "1");
    br.setDoc("{\"location\":{ \"name\": \"london\", \"point\": \"44.5,5.2\" }}".getBytes());
    br.execute();
Run Code Online (Sandbox Code Playgroud)