如何在弹性搜索中定义映射;不接受映射字段以外的字段



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

{
    "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
...

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

{"name":"boh55855","地址":"hiohio","已发表":"2014-4-4","测试":"hophiophop"}

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

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

从文档中:"动态参数也可以设置为strict,这意味着不仅新字段不会被引入映射,而且使用这些新字段解析(索引)文档也会失败。"

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

您的问题是日期字段格式不正确吗?

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

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

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

最新更新