【问题标题】:Querying nested object in elasticsearch在elasticsearch中查询嵌套对象
【发布时间】:2015-05-31 01:28:32
【问题描述】:

我的映射如下所示:

    "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"
    }
}

【问题讨论】:

    标签: json database elasticsearch elasticsearch-plugin mongoosastic


    【解决方案1】:

    我猜这是因为你没有使用nested 类型。

    Here 很好地解释了不使用嵌套类型时发生的情况。基本上,当您索引对象数组时,您的文档会被展平。

    你必须告诉 ES 你使用的是嵌套类型。

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

    【讨论】:

    • 好吧,我没有使用对象数组。我只是在使用对象。请参阅示例中的所有者字段。我已经尝试过了,但没有取得太大的成功。
    • 问题是它可以与owner.username 一起使用,但不能与owner._id 一起使用
    • 您是否检查过您的文档是否正确编入索引?我的意思是实际上有 owner._id 具有该值的字段。
    • 是的,这是localhost:9200/nodess/_search的结果,我以为名字前的下划线有什么特殊之处,但找不到任何相关信息。
    • 是的,这就是我要说的。可能是 _id 字段名称的问题,对于整个文档 ID,它类似于 reserved
    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    相关资源
    最近更新 更多