首页 > 解决方案 > 使用不同的字段类型重新创建弹性索引

问题描述

我是 ES 新手,目前正在尝试在我的服务中使用 spring-data-elasticsearch 3.2.1.RELEASE。设计仍处于早期阶段,因此我不得不更改/更新我们由@Document 注释的 ElasticDocument 中的字段。它看起来有点像:

@Docuemnt(...)
public class MyDocument {
    @Id
    private String id;

    ...

    @Field(type = FieldType.String, name = "myField")
    private String myField;
}

我不得不将 days 字段更改为一个对象,为此我只需将 Datatype 和 FieldType 属性更改为 Object。

@Docuemnt(...)
public class MyDocument {
    @Id
    private String id;

    ...

    @Field(type = FieldType.Object, name = "myField")
    private Object myField;
}

我从集群上的索引中删除了所有文档,并尝试使用新字段类型保存此文档,但由于以前的类型是文本,它看起来仍然出现错误。

org.springframework.data.elasticsearch.ElasticsearchException: Bulk indexing has failures. 
Use ElasticsearchException.getFailedDocuments() for detailed messages 
[
  {
    XYZ=ElasticsearchException[
      Elasticsearch exception [
        type=mapper_parsing_exception,
        reason=failed to parse field [myField] of type [text] in document with id 'XYZ']
      ];
      nested: ElasticsearchException[
        Elasticsearch exception [
          type=illegal_state_exception,
          reason=Can't get text on a START_OBJECT at 1:296          ]
      ];
  }
]

我很确定这可能不是更改字段类型的最佳做法,但我已经尝试过使用不同的 indexName 并且有效。

对于另一次尝试,手动删除此特定索引并让 spring data elasticsearch 在进行批量索引时创建它并没有帮助。我看到了同样的错误。

可能是因为我有更多实例(非本地)连接到弹性,但此时没有对此索引执行任何操作?

标签: spring-bootelasticsearchspring-dataelastic-stackspring-data-elasticsearch

解决方案


推荐阅读