当前位置: 首页 > 知识库问答 >
问题:

如何更新Elasticsearch中的映射以更改字段数据类型和更改字符串中分析器的类型

夏兴生
2023-03-14

在尝试更新映射时,我遇到以下错误:

{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"mapper [timestamp] of different type, current_type [string], merged_type [date]"}],"type":"illegal_argument_exception","reason":"
mapper [timestamp] of different type, current_type [string], merged_type [date]"},"status":400}

我正尝试在windows上运行以下命令

   curl -XPUT localhost:9200/logstash-*/_mapping/log?update_all_types -d "{
    "properties":
    {
        "timestamp": 
        {
            "type": "date", 
            "format": "MM-dd-yyyy HH:mm:ss",
            "fielddata":{"loading" : "lazy"} }
        }
    }";

如何将日期字段的数据类型从字符串更改为具有特定格式的日期类型。

我尝试更改字符串数据类型的映射,将其更改为eagerloading和not_analyzed,但它给出了以下错误:

{"root_cause":[{"type":"illegal_argument_exception","reason":"Mapper for [AppName] conflicts with existing mapping in other types:\n[mapper [AppName] has different [index] values, mapper [App
 different [doc_values] values, cannot change from disabled to enabled, mapper [AppName] has different [analyzer]]"}],"type":"illegal_argument_exception","reason":"Mapper for [AppName] conflict with
existing mapping in other types:\n[mapper [AppName] has different [index] values, mapper [AppName] has different [doc_values] values, cannot change from disabled to enabled, mapper [AppName]
rent [analyzer]]"},"status":400}
 curl -XPUT localhost:9200/logstash-*/_mapping/log?update_all_types -d "{
"properties":
    {"AppName":
        {
        "type": "string", 
        "index" : "not_analyzed",
        "fielddata":{"loading" : "eager"}
        }
    }
}"

但是,如果将其从not_analyth更改为analyth,则会给出一个acknowledged=true消息。我怎样才能改变分析器。

共有1个答案

杜阳炎
2023-03-14

不能更改现有的数据类型映射。正如弹性文件所说:

虽然可以添加到现有的映射,但不能更改现有的字段映射。如果某个字段的映射已经存在,则该字段中的数据可能已被索引。如果要更改字段映射,索引数据将是错误的,并且无法正确搜索。

我们可以更新一个映射来添加一个新的字段,但是我们不能将一个现有的字段从analysis更改为not_analysis。

您的唯一选择是使用新映射创建一个新索引,并将数据从旧索引重新索引到新索引。

 类似资料:
  • 问题内容: ElasticSearch文档尚不清楚如何执行此操作。 我索引了一些推文,其中一个字段created_at被索引为字符串而不是日期。我找不到如何通过curl调用对该更改重新索引。如果重新编制索引是一个复杂的过程,那么我宁愿只是删除其中的内容并重新开始。但是,我也找不到如何指定字段类型! 任何帮助是极大的赞赏。 问题答案: 您需要使用Put Mapping AP I 定义映射。 日期可以

  • 问题内容: 在我的系统中,数据插入始终是通过logstash通过csv文件完成的。我从未预定义映射。但每当我输入它总是被一个字符串是,其结果就像一个条目被分为,,,。无论如何,我是否可以更改elasticsearch的默认/动态映射,以便所有字符串(无论索引如何,无论类型如何)都被视为?还是有一种在文件中设置它的方法?说我的档案看起来像 我希望所有的字符串都是这样,我也不介意将其作为所有将来的数据

  • 是否可以在elasticsearch中更新文档中字段的映射数据类型?我是否必须删除整个索引并添加一个新的索引?是否需要创建一个包含新映射和所有文档的新索引?还是可以更改映射并要求elasticsearch使用新映射属性重新索引所有文档?第二种方法我不会丢失所有的文件。 Elasticsearch版本:6.3.2

  • 嗨,为了保持向后兼容性,可以更改协议缓冲区中字段的数据类型吗。例如 旧消息 所以基本上我没有更改字段的标签号,也没有重命名它,但我更改了数据类型。那么这是向后兼容的吗?如果一个应用程序获得了一个用以前的模式创建的旧proto对象,它可以通过这个新模式创建的对象进行解析吗?

  • 问题内容: 我将Pandas’ver 0.12.0’与Python 2.7结合使用,并具有如下数据框: 该系列由一些整数和字符串组成。它在默认情况下是。我想将的所有内容转换为字符串。我试过了,产生下面的输出。 1) 如何将的所有元素转换为String? 2) 我最终将用于为数据帧建立索引。与具有整数索引相比,在数据帧中具有String索引会降低速度吗? 问题答案: 您可以将id的所有元素转换为使用

  • 请帮助解决此错误... 因为我在该对象上使用了bigdecimal类型,而没有添加一个操作@字段(type=FieldType.Double) 有没有办法配置默认的FieldType。大十进制加倍?或者我们需要在每个大十进制中添加字段注释