Spring数据Elasticsearch。因为冲突而无法合并。无法更新[_source]的启用设置]。

问题描述 投票:6回答:1

我想禁用 _source 场与 春天数据Elasticsearch为了添加这个属性。

"_source": {
    "enabled": false
}

我正在做以下工作 @Configuration 类。

    @Bean
    public ElasticsearchTemplate elasticsearchTemplate() throws IOException {
        ElasticsearchTemplate template = new ElasticsearchTemplate(getNodeClient());
        Map<Object, Object> mapping = new LinkedHashMap<Object, Object>();
        if (template.indexExists(Computer.class)){
            mapping = template.getMapping(Computer.class);                  
        } else {
            template.createIndex(Computer.class);
        }
        LinkedHashMap<String, Boolean> hashMap = new LinkedHashMap<String, Boolean>();
        hashMap.put("enabled", false);
        mapping.put("_source", hashMap);
        template.putMapping(Computer.class, mapping);
        return template;
    }

但我得到了以下异常。

java.lang.IllegalArgumentException: Can't merge because of conflicts: [Cannot update enabled setting for [_source]]
    at org.elasticsearch.index.mapper.internal.SourceFieldMapper.doMerge(SourceFieldMapper.java:458) ~[elasticsearch-2.2.0.jar:2.2.0]
    at org.elasticsearch.index.mapper.FieldMapper.merge(FieldMapper.java:380) ~[elasticsearch-2.2.0.jar:2.2.0]
    at org.elasticsearch.index.mapper.MetadataFieldMapper.merge(MetadataFieldMapper.java:75) ~[elasticsearch-2.2.0.jar:2.2.0]
    at org.elasticsearch.index.mapper.Mapping.merge(Mapping.java:120) ~[elasticsearch-2.2.0.jar:2.2.0]
    at org.elasticsearch.index.mapper.DocumentMapper.merge(DocumentMapper.java:392) ~[elasticsearch-2.2.0.jar:2.2.0]
    at org.elasticsearch.cluster.metadata.MetaDataMappingService$PutMappingExecutor.applyRequest(MetaDataMappingService.java:261) ~[elasticsearch-2.2.0.jar:2.2.0]
    at org.elasticsearch.cluster.metadata.MetaDataMappingService$PutMappingExecutor.execute(MetaDataMappingService.java:230) ~[elasticsearch-2.2.0.jar:2.2.0]
    at org.elasticsearch.cluster.service.InternalClusterService.runTasksForExecutor(InternalClusterService.java:458) ~[elasticsearch-2.2.0.jar:2.2.0]
    at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:762) ~[elasticsearch-2.2.0.jar:2.2.0]
    at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:231) ~[elasticsearch-2.2.0.jar:2.2.0]
    at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:194) ~[elasticsearch-2.2.0.jar:2.2.0]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_102]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_102]
    at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_102]

错误发生的原因是,在这个配置下,我试图设置了... enabled 的变量 org.elasticsearch.index.mapper.internal.SourceFieldMapper假的但由于一些奇怪的原因,它被一个已经设置了该属性的实例检查为 真正.

我怎么能做配置该字段为假?

谢谢。

spring elasticsearch spring-boot spring-data-elasticsearch
1个回答
0
投票

这个错误只发生在你试图更新一个对象的映射时。现有 索引。在你的情况下,已经有'电脑'指数与 _source 设为 真正. 你可以通过运行

GET /computer/_mapping

这将返回

{
  "computer": {
    "mappings": {
      "_source": {
        "enabled": true
      }
    }
  }
} 

的映射值 _source 归档 不能 被更新。

如果您需要更改映射,请使用正确的映射创建一个新的索引,并将您的数据重新编入该索引。

或者,您可以使用以下方法删除计算机索引

DELETE /computer

而Spring Data将在启动时创建具有正确映射的索引。

© www.soinside.com 2019 - 2024. All rights reserved.