elasticsearch 弹性搜索映射器无法分析元素集合
我有一个实体:
elasticsearch 弹性搜索映射器无法分析元素集合,
elasticsearch,spring-boot,
elasticsearch,Spring Boot,我有一个实体: @Entity public class Person { @Id @GeneratedValue private Long id; private String name; private String surname; @ElementCollection @CollectionTable(name = "EMAIL_ADDRESSES", joinColumns=@JoinColumn(name="PERSON_I
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
private String name;
private String surname;
@ElementCollection
@CollectionTable(name = "EMAIL_ADDRESSES", joinColumns=@JoinColumn(name="PERSON_ID"))
private Set<EmailAddress> emailAddresses = new HashSet<>();
...
constructurs
getters&setters
...
}
我想做的是在elasticsearch上创建一个索引,其中包含Person类型。我正在使用XContentBuilder构建要发送的json对象
public void addIndex(Person person) {
IndexResponse response = this.elasticsearchClient.prepareIndex("persons", "person", "1")
.setSource(buildPersonObject(person)).get();
}
private XContentBuilder buildPersonObject(Person person) {
XContentBuilder builder = jsonBuilder().startObject()
.field("id", person.getId())
.field("name", person.getName())
.field("surname", person.getSurname());
if (person.getEmailAddresses().size() > 0) {
builder.startArray("emailAddresses");
for (EmailAddress emailAddress : person.getEmailAddresses()) {
builder.startObject();
builder.field("label", emailAddress.getLabel());
builder.field("email", emailAddress.getEmail());
builder.endObject();
}
builder.endArray();
}
builder.endObject();
return builder;
}
它抛出如下异常:
Caused by: org.elasticsearch.index.mapper.MapperParsingException: failed to parse [emailAddresses] at org.elasticsearch.index.mapper.FieldMapper.parse(FieldMapper.java:329)
at org.elasticsearch.index.mapper.DocumentParser.parseObjectOrField(DocumentParser.java:309)
at org.elasticsearch.index.mapper.DocumentParser.parseObject(DocumentParser.java:326)
at org.elasticsearch.index.mapper.DocumentParser.parseNonDynamicArray(DocumentParser.java:414)
at org.elasticsearch.index.mapper.DocumentParser.parseArray(DocumentParser.java:379)
at org.elasticsearch.index.mapper.DocumentParser.parseObject(DocumentParser.java:254)
at org.elasticsearch.index.mapper.DocumentParser.parseDocument(DocumentParser.java:122)
at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:309)
at org.elasticsearch.index.shard.IndexShard.prepareIndex(IndexShard.java:580)
at org.elasticsearch.index.shard.IndexShard.prepareIndexOnPrimary(IndexShard.java:559)
at org.elasticsearch.action.index.TransportIndexAction.prepareIndexOperationOnPrimary(TransportIndexAction.java:212)
at org.elasticsearch.action.index.TransportIndexAction.executeIndexRequestOnPrimary(TransportIndexAction.java:224)
at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:158)
at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:66)
at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryPhase.doRun(TransportReplicationAction.java:639)
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:279)
at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:271)
at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:75)
at org.elasticsearch.transport.TransportService$4.doRun(TransportService.java:376)
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
... 1 common frames omitted
Caused by: java.lang.IllegalArgumentException: unknown property [label]
at org.elasticsearch.index.mapper.core.StringFieldMapper.parseCreateFieldForString(StringFieldMapper.java:362)
at org.elasticsearch.index.mapper.core.StringFieldMapper.parseCreateField(StringFieldMapper.java:311)
at org.elasticsearch.index.mapper.FieldMapper.parse(FieldMapper.java:321)
当使用EmailAddress作为@OneToMany关系而不是@ElementCollection时,上述代码可以正常工作
那么,如何将@Embeddeble类与elasticsearch映射器结合使用呢
Caused by: org.elasticsearch.index.mapper.MapperParsingException: failed to parse [emailAddresses] at org.elasticsearch.index.mapper.FieldMapper.parse(FieldMapper.java:329)
at org.elasticsearch.index.mapper.DocumentParser.parseObjectOrField(DocumentParser.java:309)
at org.elasticsearch.index.mapper.DocumentParser.parseObject(DocumentParser.java:326)
at org.elasticsearch.index.mapper.DocumentParser.parseNonDynamicArray(DocumentParser.java:414)
at org.elasticsearch.index.mapper.DocumentParser.parseArray(DocumentParser.java:379)
at org.elasticsearch.index.mapper.DocumentParser.parseObject(DocumentParser.java:254)
at org.elasticsearch.index.mapper.DocumentParser.parseDocument(DocumentParser.java:122)
at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:309)
at org.elasticsearch.index.shard.IndexShard.prepareIndex(IndexShard.java:580)
at org.elasticsearch.index.shard.IndexShard.prepareIndexOnPrimary(IndexShard.java:559)
at org.elasticsearch.action.index.TransportIndexAction.prepareIndexOperationOnPrimary(TransportIndexAction.java:212)
at org.elasticsearch.action.index.TransportIndexAction.executeIndexRequestOnPrimary(TransportIndexAction.java:224)
at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:158)
at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:66)
at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryPhase.doRun(TransportReplicationAction.java:639)
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:279)
at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:271)
at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:75)
at org.elasticsearch.transport.TransportService$4.doRun(TransportService.java:376)
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
... 1 common frames omitted
Caused by: java.lang.IllegalArgumentException: unknown property [label]
at org.elasticsearch.index.mapper.core.StringFieldMapper.parseCreateFieldForString(StringFieldMapper.java:362)
at org.elasticsearch.index.mapper.core.StringFieldMapper.parseCreateField(StringFieldMapper.java:311)
at org.elasticsearch.index.mapper.FieldMapper.parse(FieldMapper.java:321)