【问题标题】:How to define a mapping in elasticsearch that doesn't accept fields other that the mapped ones?如何在不接受映射字段以外的字段的弹性搜索中定义映射?
【发布时间】:2013-08-28 15:04:29
【问题描述】:

好的,在我的 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”, “测试”:“霍普霍普” }

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

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      您对格式错误的日期字段有疑问吗?

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

      您可以阅读有关ways to set up the date field mapping for a custom format here 的信息。

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

      【讨论】:

        猜你喜欢
        • 2015-12-08
        • 2015-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-20
        • 2017-05-25
        相关资源
        最近更新 更多