在elasticsearch中查询嵌套对象

时间:2015-03-26 20:44:13

标签: json database elasticsearch elasticsearch-plugin mongoosastic

我的映射如下所示:

    "mappings": {
        "nodes": {
            "properties": {
                "createdAt": {
                    "type": "date",
                    "format": "dateOptionalTime"
                },
                "data": {
                    "type": "string"
                },
                "isFile": {
                    "type": "boolean"
                },
                "isPublic": {
                    "type": "boolean"
                },
                "location": {
                    "properties": {
                        "_id": {
                            "type": "string"
                        }
                    }
                },
                "name": {
                    "type": "string"
                },
                "owner": {
                    "properties": {
                        "_id": {
                            "type": "string"
                        },
                        "username": {
                            "type": "string"
                        }
                    }
                },
                "sharedWith": {
                    "type": "object"
                }
            }
        }
    }

当我执行以下查询时:

"filter": {
      "term": {
            "owner.username": "user_69d349"
      }
}

我得到了正确的结果,但是当我做的时候

"filter": {
    "term": {
        "owner._id": "RvdDC"
    }
}

我没有结果。

我正在使用以下文件:

{
    "_index": "nodess",
    "_type": "nodes",
    "_id": "I7Cac9n",
    "_score": 1.0,
    "_source": {
        "name": "stream",
        "isFile": true,
        "owner": {
            "_id": "RvdDC",
            "username": "user_69349"
        },
        "sharedWith": [],
        "isPublic": false,
        "location": {
            "_id": null
        },
        "data": "baked baked baked hey",
        "createdAt": "2015-03-24T00:53:53.551Z"
    }
}

1 个答案:

答案 0 :(得分:1)

我想这是因为您没有使用nested类型。

Here是一个很好的解释,当您不使用嵌套类型时会发生什么。基本上,当您为对象数组编制索引时,文档会被展平。

你必须告诉ES你正在使用嵌套类型。

      "owner": {
            "type": "nested", //<-- declare type here
            "properties": {
                "_id": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },