首页 > 解决方案 > 如何启用嵌套映射?

问题描述

使用 ES 6 并且无法正确设置我的映射。我有这个文档:

{
    "_index": "entries_1",
    "_type": "elasticsearch-record",
    "_id": "3684",
    "_score": 5.355921,
    "_source": {
            "title": "My Title",
            "result": {
            "autor": [
                "fernando-fernandes"
            ]
        }
    }
}

还有我的映射:

{
    "craft-entries_1": {
        "mappings": {
            "elasticsearch-record": {
                "properties": {
                    "result": {
                        "type": "nested",
                        "enabled": false
                    }
                }
            }
        }
    }
}

我不能results.autor用这个查询:

{
    "query": {
            "bool" : {
            "must" : [
                { "term": { "result.autor": "fernando-fernandes" } }
            ]
        }
    }
}

我试过 PUT 这个,但似乎对映射根本没有影响,即使我再次查询我的映射仍然显示为enabled:false,也许我应该映射为对象?

{
    "properties": {
        "result.autor": { 
            "type": "nested",
            "enabled": true
        }
    }
}

我错过了什么?

标签: elasticsearchelasticsearch-mapping

解决方案


您的源文档没有根据您的映射正确设计,应该是这样的:

{
  "title": "My Title",
  "result": [
    {
      "autor": "fernando-fernandes"
    }
  ]
}

由于result是嵌套的,因此应该将其建模为内部包含元素的数组。

因此,删除您的索引,使用以下映射重新创建它(您需要删除enabled: false,因为这仅适用于object类型)

PUT craft-entries_1
{
    "mappings": {
        "elasticsearch-record": {
            "properties": {
                "result": {
                    "type": "nested"
                }
            }
        }
    }
}

最后,如上所示为您的文档编制索引,然后您的查询将起作用。


推荐阅读