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

Mapping elasticsearch中的默认数据类型映射

Mapping elasticsearch中的默认数据类型映射,mapping,elasticsearch,Mapping,elasticsearch,以下是config/default_mapping.json的内容: { "_default_" : [ { "int_template" : { "match": "*", "match_mapping_type": "int", "mapping": { "type": "string"

以下是
config/default_mapping.json
的内容:

{
    "_default_" : [
    {
        "int_template" : {
                "match": "*",
                "match_mapping_type": "int",
                "mapping": {
                        "type": "string"
                }
        }
    ]
}
我想让ES做的是从我的日志中挑出所有数字,并将它们映射为字符串

用例-

org.elasticsearch.index.mapper.MapperParsingException: failed to parse [this]
    at org.elasticsearch.index.mapper.core.AbstractFieldMapper.parse(AbstractFieldMapper.java:398)
    at org.elasticsearch.index.mapper.object.ObjectMapper.serializeValue(ObjectMapper.java:618)
    at org.elasticsearch.index.mapper.object.ObjectMapper.parse(ObjectMapper.java:471)
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:513)
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:457)
    at org.elasticsearch.index.shard.service.InternalIndexShard.prepareCreate(InternalIndexShard.java:342)
    at org.elasticsearch.action.bulk.TransportShardBulkAction.shardIndexOperation(TransportShardBulkAction.java:401)
    at org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:155)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:556)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1.run(TransportShardReplicationOperationAction.java:426)
    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.NumberFormatException: For input string: "ABC"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Long.parseLong(Long.java:438)
    at java.lang.Long.parseLong(Long.java:478)
    at org.elasticsearch.common.xcontent.support.AbstractXContentParser.longValue(AbstractXContentParser.java:89)
清除所有索引后-
curl-XDELETE'http://localhost:9200/_all“
,我运行此命令将以下内容发送给ES(通过fluentd的tailf插件)——

echo“{\”this\:134}”>/home/user/logs/program data/logs/tiger/tiger.log

创建初始索引。现在,为了测试我的默认映射是否有效,我在先前发送的
int
值处发送了一个
string

echo“{\”this\”:\“ABC\”}>>/home/user/logs/program data/logs/tiger/tiger.log

ES捕获的异常-

org.elasticsearch.index.mapper.MapperParsingException: failed to parse [this]
    at org.elasticsearch.index.mapper.core.AbstractFieldMapper.parse(AbstractFieldMapper.java:398)
    at org.elasticsearch.index.mapper.object.ObjectMapper.serializeValue(ObjectMapper.java:618)
    at org.elasticsearch.index.mapper.object.ObjectMapper.parse(ObjectMapper.java:471)
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:513)
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:457)
    at org.elasticsearch.index.shard.service.InternalIndexShard.prepareCreate(InternalIndexShard.java:342)
    at org.elasticsearch.action.bulk.TransportShardBulkAction.shardIndexOperation(TransportShardBulkAction.java:401)
    at org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:155)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:556)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1.run(TransportShardReplicationOperationAction.java:426)
    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.NumberFormatException: For input string: "ABC"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Long.parseLong(Long.java:438)
    at java.lang.Long.parseLong(Long.java:478)
    at org.elasticsearch.common.xcontent.support.AbstractXContentParser.longValue(AbstractXContentParser.java:89)
这里可能出了什么问题

更新-

org.elasticsearch.index.mapper.MapperParsingException: failed to parse [this]
    at org.elasticsearch.index.mapper.core.AbstractFieldMapper.parse(AbstractFieldMapper.java:398)
    at org.elasticsearch.index.mapper.object.ObjectMapper.serializeValue(ObjectMapper.java:618)
    at org.elasticsearch.index.mapper.object.ObjectMapper.parse(ObjectMapper.java:471)
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:513)
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:457)
    at org.elasticsearch.index.shard.service.InternalIndexShard.prepareCreate(InternalIndexShard.java:342)
    at org.elasticsearch.action.bulk.TransportShardBulkAction.shardIndexOperation(TransportShardBulkAction.java:401)
    at org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:155)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:556)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1.run(TransportShardReplicationOperationAction.java:426)
    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.NumberFormatException: For input string: "ABC"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Long.parseLong(Long.java:438)
    at java.lang.Long.parseLong(Long.java:478)
    at org.elasticsearch.common.xcontent.support.AbstractXContentParser.longValue(AbstractXContentParser.java:89)
我的
default\u mapping.json
现在看起来像-

{
        "_default_": {
            "dynamic_templates": [
                {
                    "string_template": {
                        "match": "*",
                        "mapping": {
                            "type": "string"
                        }
                    }
                }
            ]
        }
}

首先,我建议不要使用基于文件系统的配置或映射。只要通过api就可以了

您的映射格式不正确,因为您具有类型名称(
\u default\u
),但未指定提交的是动态模板


至于内容,如果您想将所有内容映射为字符串,我会删除
match\u mapping\u type

您是否可以对正确的json配置进行粘贴?我已经为此苦苦挣扎了几个小时。看看正确的json,这里有一个例子……如果我想让这个数字全面改变,在给定的json示例中,我应该用什么来代替
“person”
*
person
是示例中的类型名,
\u default\u
在您的情况下很好,它将适用于所有类型。您忘记的是它下面的
dynamic\u templates
部分。确认该文件将被称为
default\u mapping.json
,并将被放置在
config/default\u mapping.json