是否可以在ElasticSearch中为内部对象定义默认映射?

时间:2015-05-26 14:59:39

标签: elasticsearch

说我有这样的文件:

{
    "events" : [
        { 
         "event_id" : 123,
         "props" : {
              "version": "33"
        },
        {
         "event_id" : 124,
         "props" : {
              "version": "44a"
         }
    ]
}

是否可以指定将events.props.version映射到某种类型?

我试过了:

{
  "template" : "logstash-*",
  ...
  "mappings" : {
    "_default_" : {
       "properties" : {
         "events.props.version" : { "type" : "string" }
       }
    }
  }
}

但这似乎不起作用。

2 个答案:

答案 0 :(得分:1)

当然,但你需要使用"对象"类型:

如果您要映射

,请从文档(https://www.elastic.co/guide/en/elasticsearch/reference/1.5/mapping-object-type.html
{
    "tweet" : {
        "person" : {
            "name" : {
                "first_name" : "Shay",
                "last_name" : "Banon"
            },
            "sid" : "12345"
        },
        "message" : "This is a tweet!"
    }
}

你可以写:

{
    "tweet" : {
        "properties" : {
            "person" : {
                "type" : "object",
                "properties" : {
                    "name" : {
                        "type" : "object",
                        "properties" : {
                            "first_name" : {"type" : "string"},
                            "last_name" : {"type" : "string"}
                        }
                    },
                    "sid" : {"type" : "string", "index" : "not_analyzed"}
                }
            },
            "message" : {"type" : "string"}
        }
    }
}

答案 1 :(得分:1)

请查看elasticsearch Mapping API中的mapping API。

要在内部元素中设置任何分析器,我们需要将每个内部字段视为单独的属性集。尝试以下

{
    "mappings": {
        "properties": {
            "events": {
                "properties": {
                    "event_id": {
                        "type": "string",
                        "analyzer": "keyword"
                    },
                    "props": {
                        "properties": {
                            "version": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        }
    }
}

如果这不起作用,请告诉我您的映射。