Spring 数据 Elasticsearch : Can't merge because of conflicts: [Cannot update enabled setting for [_source]]

标签 spring elasticsearch spring-boot spring-data-elasticsearch

我正在尝试禁用 _source字段与 Spring Data Elasticsearch ,为了添加这个属性:

"_source": {
    "enabled": false
}

我在 @Configuration 中执行以下操作类(class):
    @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 的变量至 ,但出于某种奇怪的原因,它正在
使用已将该属性设置为 的实例进行检查真 .

我该怎么做才能将该字段配置为 false?

谢谢。

最佳答案

此错误仅在您尝试更新 的映射时发生。现有 指数。在您的情况下,已经有 _source 的“计算机”索引设置为 .您可以通过运行来检查

GET /computer/_mapping

这将返回
{
  "computer": {
    "mappings": {
      "_source": {
        "enabled": true
      }
    }
  }
} 
_source的映射值已提交 不能 被更新。

如果需要更改映射,请使用正确的映射创建新索引并将数据重新索引到该索引中。

或者,您可以删除计算机索引
DELETE /computer

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

关于 Spring 数据 Elasticsearch : Can't merge because of conflicts: [Cannot update enabled setting for [_source]],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38790777/

相关文章:

java - spring boot 启动报错 BOOT-INF/classes not found

java - 页眉和页脚和freemarker

elasticsearch - Elasticsearch中的关键字匹配(完全匹配)忽略了关键字的顺序

elasticsearch - 无法间歇性连接到 Elastic Search

spring - 将 Quartz Job 声明为 spring bean 是否有任何正当理由?

java - 为什么拦截器会运行三次?

java - SonarQube:不应直接存储或返回可变成员

java - Spring 安全 405

java - 授予 Elasticsearch 访问 Java 的适当权限

java - 默认情况下如何拒绝对所有 URL 的访问?