7

好的,在我的 elastisearch 中,我使用以下映射作为索引:

{

    "mappings": {
        "mytype": {
            "type":"object",
            "dynamic" : "false",
            "properties": {
                "name": {
                    "type": "string"
                },
                "address": {
                    "type": "string"
                },
                "published": {
                    "type": "date"
                }

            }
        }
    }
}

有用。事实上,如果我在“已发布”字段中输入格式错误的日期,它会抱怨并失败。我也有以下配置:

...
node.name : node1
index.mapper.dynamic : false
index.mapper.dynamic.strict : true
...

如果没有映射,我就无法真正使用该类型。问题是,如果我插入类似的东西:

{“名称”:“boh58585”,“地址”:“hiohio”,“已发布”:“2014-4-4”,“测试”:“hophiophop”}

它会很高兴地接受它。这不是我期望的行为,因为该字段test不在映射中。如何将文档的字段限制为仅映射中的字段???

4

2 回答 2

11

使用"dynamic": false告诉 Elasticsearch 永远不允许更改索引的映射。如果您希望在尝试使用定义映射之外的字段索引新文档时引发错误,请"dynamic": "strict"改用。

来自文档:“动态参数也可以设置为严格,这意味着不仅不会将新字段引入映射,使用这些新字段解析(索引)文档也会失败。”

由于您已经在设置中定义了它,我猜想dynamic完全从映射定义中省略将默认为"dynamic": "strict".

于 2013-08-27T20:37:51.633 回答
0

您的日期字段格式错误吗?

我会解决日期问题并继续使用dynamic: false.

您可以在此处阅读有关为自定义格式设置日期字段映射的方法

将日期格式字符串粘贴到{type: date, format: ?}映射中。

于 2013-08-28T07:04:29.057 回答