弹性搜索:带有父和子条件的嵌套查询

Nishant kumar

我有2个示例记录,如下所示:

{
    "parents": [
      {
        "child": [
          {
            "is_deleted": false,
            "child_id": -1,
            "timestamp": 1483536052232
          }
        ],
        "parent_id": 810
      },
      {
        "child": [
          {
            "is_deleted": true,
            "child_id": 105,
            "timestamp": 1483537567000
          }
        ],
        "parent_id": 42
      }
    ]
},
{
  "parents": [
      {
        "child": [
          {
            "is_deleted": false,
            "child_id": 105,
            "timestamp": 1483537567000
          }
        ],
        "parent_id": 42
      }
    ]
}

和我的映射:

"properties": {
  "parents": {
    "type": "nested",
    "properties": {
      "parent_id": {
        "type": "integer",
        "doc_values": false
      },
      "child": {
        "type": "nested",
        "properties": {
          "is_deleted": {
            "type": "boolean",
            "doc_values": false
          },
          "child_id": {
            "type": "integer",
            "doc_values": false
          },
          "timestamp": {
            "type": "long",
            "doc_values": false
          }
        }
      }
    }
  }

我想按至少有一个带is_deletedas的孩子的父母ID进行搜索false例如,如果我要查询父母ID为42,则我应该只获得第二个文档,而不是第一个。

Artholl

您应该使用嵌套查询来查询嵌套字段。

这是一个示例,但是我不知道这是否是最好的解决方案,至少它是可行的:

POST /test1/test/_search
{
   "query": {
      "nested": {
         "path": "parents",
         "query": {
            "bool": {
               "must": [
                  {
                     "match": {
                        "parents.parent_id": 42
                     }
                  },
                  {
                     "nested": {
                        "path": "parents.child",
                        "query": {
                           "term": {
                              "parents.child.is_deleted": "F"
                           }
                        }
                     }
                  }
               ]
            }
         }
      }
   }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章