【发布时间】:2021-02-23 14:16:42
【问题描述】:
我正在使用 spring-data-elasticsearch 来使用 elasticsearch 作为我的数据源。我以这种方式为我的实体建模
Foo.java
@Document(indexName = "foo", shards = 1, versionType = VersionType.INTERNAL, createIndex = true)
public class Foo {
@Field(type = FieldType.Text, name = "name")
private String name;
@Field(type = FieldType.Nested, name = "bar")
private Bar bars;
}
Bar.java
public class Bar {
@Field(type = FieldType.Text, name = "name")
private String name;
}
我正在使用 UpdateQuery 仅更新 foo 文档中的“bar”值,如下所示
Map<String, Object> params = new HashMap<>();
params.put("bar", bar);
UpdateQuery updateQuery = UpdateQuery.builder(id)
.withScript("ctx._source.bar = params.bar")
.withParams(params)
.build();
UpdateResponse updateResponse = operations.update(updateQuery, index);
我收到以下错误
ava.lang.IllegalArgumentException: cannot write xcontent for unknown value of type class com.myapp.model.Bar
at org.elasticsearch.common.xcontent.XContentBuilder.unknownValue(XContentBuilder.java:833) ~[elasticsearch-x-content-7.9.3.jar:7.9.3]
at org.elasticsearch.common.xcontent.XContentBuilder.map(XContentBuilder.java:895) ~[elasticsearch-x-content-7.9.3.jar:7.9.3]
at org.elasticsearch.common.xcontent.XContentBuilder.map(XContentBuilder.java:870) ~[elasticsearch-x-content-7.9.3.jar:7.9.3]
at org.elasticsearch.common.xcontent.XContentBuilder.field(XContentBuilder.java:866) ~[elasticsearch-x-content-7.9.3.jar:7.9.3]
at org.elasticsearch.script.Script.toXContent(Script.java:660) ~[elasticsearch-7.9.3.jar:7.9.3]
at org.elasticsearch.common.xcontent.XContentBuilder.value(XContentBuilder.java:857) ~[elasticsearch-x-content-7.9.3.jar:7.9.3]
at org.elasticsearch.common.xcontent.XContentBuilder.value(XContentBuilder.java:850) ~[elasticsearch-x-content-7.9.3.jar:7.9.3]
at org.elasticsearch.common.xcontent.XContentBuilder.field(XContentBuilder.java:842) ~[elasticsearch-x-content-7.9.3.jar:7.9.3]
注意: 我尝试使用脚本更新 foo.name 字段。它工作得很好。问题是在更新查询中使用 Bar 对象。
解决这个问题的任何想法
【问题讨论】:
标签: java elasticsearch spring-data-elasticsearch