1

我正在使用 Elasticsearch 7.1 版并尝试使用动态模板映射,但似乎无法使其正常工作。索引成功地接受了我的映射和数据加载,但是没有根据我提供的映射对数据进行索引,这让我怀疑我的映射中有错误。

这是我要索引的文档的简化版本:

{
    "id": "foo",
    "breadcrumb": {
        "en-US": [
            {
                "name": "one",
                "url": "/path/1"
            },
            {
                "name": "two",
                "url": "/path/2"
            }
        ],
        "es-ES": [
            {
                "name": "uno",
                "url": "/path/1"
            },
            {
                "name": "dos",
                "url": "/path/2"
            }
        ]
    }
}

这是映射的简化版本:

{
    "dynamic": "false",
    "properties": {
        "id": {"type": "keyword"}
    },
    "dynamic_templates": [
        {
            "breadcrumb_template": {
                "path_match": "breadcrumb.*",
                "match_mapping_type": "object",
                "mapping": {
                    "type": "nested",
                    "properties": {
                        "url": {"type": "keyword"},
                        "name": {"type": "keyword"}
                    }
                }
            }
        }
    ]
}

我知道我可以明确地映射它,但我会为“面包屑”下的每个不同键重复相同的结构,我宁愿避免这种情况。

4

1 回答 1

1

dynamic: false它不适用于dynamic_templates。字段已保存并显示在 中_source,但不可搜索。如果你在属性中添加breadcrumb字段dynamic: true应该没问题。

"properties": {
    "id": {"type": "keyword"},
    "breadcrumb": {"type": "object", "dynamic": true}
}
于 2020-03-05T21:52:46.470 回答