elasticsearch,Mapping,elasticsearch" /> elasticsearch,Mapping,elasticsearch" />

Mapping Elasticsearch默认映射

Mapping Elasticsearch默认映射,mapping,elasticsearch,Mapping,elasticsearch,我目前的理解- Elasticsearch在第一次接收JSON数据集时创建映射索引 无法更改此映射,但可以重新映射数据集 问题- 忘记重新映射吧。有没有办法告诉ES在默认情况下按照- “将所有非日期的内容都视为字符串类型” 还有,如果我这样做,我会损失很多吗 更新- 我添加了文件-config/mappings/_default/mapping.json,其中包含以下内容- { "dynamic_templates": [ { "template_

我目前的理解-

  • Elasticsearch在第一次接收JSON数据集时创建映射索引
  • 无法更改此映射,但可以重新映射数据集
  • 问题-

    忘记重新映射吧。有没有办法告诉ES在默认情况下按照-

    “将所有非日期的内容都视为字符串类型”

    还有,如果我这样做,我会损失很多吗

    更新-

    我添加了文件-
    config/mappings/_default/mapping.json
    ,其中包含以下内容-

    {
        "dynamic_templates": [
            {
                "template_1": {
                    "match": "*",
                    "match_mapping_type": "int",
                    "mapping": {
                        "type": "string"
                    }
                },
                "template_2": {
                    "match": "*",
                    "match_mapping_type": "long",
                    "mapping": {
                        "type": "string"
                    }
                }
            }
        ]
    }
    
    我还尝试将以下内容放在-
    config/default\u mapping.json

    {
        "_default_" : {
            "match": "*",
            "match_mapping_type": "int",
            "mapping": {
                    "type": "string"
            }
        }
    }
    
    我的“动机”是消除当
    int
    long
    类型更改为
    string
    时出现的错误。这是否将所有
    int
    long
    值映射为
    string
    ,以跨越将来创建的所有索引?是否需要将此
    动态\u模板
    键嵌套在
    \u all

    更新II-

    添加此映射文件会导致elasticsearch出现问题-

    [2014-02-04 10:48:34,396][DEBUG][action.admin.indices.create] [Her] [logstash-2014.02.04] failed to create
    org.elasticsearch.index.mapper.MapperParsingException: mapping [mapping.json]
        at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$2.execute(MetaDataCreateIndexService.java:312)
        at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:298)
        at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:135)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:701)
    Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Map
        at org.elasticsearch.index.mapper.DocumentMapperParser.extractMapping(DocumentMapperParser.java:268)
        at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:155)
        at org.elasticsearch.index.mapper.MapperService.parse(MapperService.java:314)
        at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:193)
        at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$2.execute(MetaDataCreateIndexService.java:309)
        ... 5 more
    2014-02-04 10:48:34 +0000 [warn]: temporarily failed to flush the buffer. next_retry=2014-02-04 10:48:33 +0000 error_class="Net::HTTPServerException" error="400 \"Bad Request\"" instance=17509700
    

    如果从头开始,因此没有映射,则依赖于默认值。每次发送文档时,尚未映射的字段都会根据其json类型(以及日期约定)自动映射。也就是说,如果您在第一个文档中以数字形式发送一个字段,并且该字段在第二个文档中成为字符串,那么第二个文档的索引操作将返回一个错误

    有用于管理映射的API,这并不意味着您必须声明所有字段。您只需指定要与默认行为不同的行为。对于尚未创建的索引,可以在指定映射的同时,使用if索引已经存在,或者甚至包括在中

    可以更改映射,但只能应用向后兼容的更改。始终可以添加新字段,但不能更改现有字段的类型或分析器。在这种情况下,您可以尝试使用使更改向后兼容,否则您需要根据更新的映射重新编制索引


    至于你的最后一个问题,如果你把所有东西都作为一个字符串索引,你就失去了你通常可以用数字来做的事情,例如范围查询。这是否可行取决于您的数据以及您需要对其执行的操作。

    如果您将第一个文档中的字段作为数字发送,并且该字段在第二个文档中成为字符串,则第二个文档的索引操作将返回错误。有办法解决这个问题吗?我不介意所有东西都映射为字符串。没有任何标志表明-
    不映射,字符串所有内容。
    ?:)当然可以,您的问题是是否有意义,我的回答假设您知道这是可能的:)是答案,以避免指定所有字段,而只指定一个模式和要应用的映射。@javanna-类似这样的内容是否可以确保所有我的
    int
    long
    值都映射到
    string
    ,一刀切?请您验证一下好吗?我建议您不要使用配置文件,因为您需要像elasticsearch提供的那样出色的API。只需将动态模板添加到映射中。使用
    \u default
    类型是有意义的,您只需删除
    匹配映射类型
    ,以便使用单个模板将所有内容映射为字符串。至于你的错误,你提交的文件格式不正确。