查询不同级别的多级嵌套文档

时间:2017-03-16 11:02:20

标签: elasticsearch

我的数据格式如下

{
  "mappings": {
    "blog": {
      "properties": {
        "comments": {
          "type": "nested",
          "properties": {
            "subComments": {
              "type": "nested"
            }
          }
        }
      }
    }
  }
}

我有多个文档,其中包含

等数据
{
  "blog_post_id": "blog1",
  "comments": [
    {
      "id": "c1",
      "user_id": "u1",
      "timestamp": 1487781975676,
      "value": "CVLA1",
      "subComments": [
        {
          "value": "sub comment 1"
        },
        {
          "value": "sub comment 2"
        }
      ]
    },
    {
      "id": "c2",
      "user_id": "u1",
      "timestamp": 1487781975686,
      "value": "CVLA2",
      "subComments": [
        {
          "value": "sub comment 3"
        },
        {
          "value": "sub comment 4"
        }
      ]
    }
  ]
}

我想匹配具有评论值CVLA1的博客文档和具有值“子评论2”的成功评论。

我写了一个像

这样的查询
{
  "query": {
    "nested": {
      "path": "comments",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "comments.value": "CVLA1"
              }
            },
            {
              "nested": {
                "path": "comments.subComments",
                "query": {
                  "match": {
                    "commnets.subComments.value": "sub comment 2"
                  }
                }
              }
            }
          ]
        }
      }
    }
  }
}

但是这个没有按预期工作。任何帮助如何在多级嵌套文档的不同级别进行查询。

1 个答案:

答案 0 :(得分:3)

您的查询周围有commnets.subComments.value的拼写错误。它应该是comments.subComments.value。所以整个查询看起来像这样:

{
  "query": {
    "nested": {
      "path": "comments",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "comments.value": "CVLA1"
              }
            },
            {
              "nested": {
                "path": "comments.subComments",
                "query": {
                  "match": {
                    "comments.subComments.value": "sub comment 2"
                  }
                }
              }
            }
          ]
        }
      }
    }
  }
}

我仔细检查过 - 它适用于我。