代码之家  ›  专栏  ›  技术社区  ›  Nikita Leshchev

如何在一个查询中获取包含所有子级的父级

  •  0
  • Nikita Leshchev  · 技术社区  · 7 年前

    我有以下映射:

    PUT /test_products
    {
      "mappings": {
        "_doc": {
          "properties": {
            "type": {
              "type": "keyword"
            },
            "name": {
              "type": "text"
            },
            "entity_id": {
              "type": "integer"
            },
            "weighted": {
              "type": "integer"
            }
            "product_relation": {
              "type": "join",
              "relations": {
                "window": "simple"
              }
            }
          }
        }
      }
    }
    

    我想得到所有“simple”的“window”产品,但只有一个或多个“simple”的属性“weighted”=1

    我写了以下问题:

    GET test_products/_search
    {
      "query": {
        "has_child": {
          "type": "simple",
          "query": {
            "term": {
              "weighted": 1
            }
          },
          "inner_hits": {}
        }
      }
    }
    

    但我有“window”和“simple”这两个词是匹配的。换句话说,我想用“simple”选项过滤“window”的列表,并得到所有匹配的“window”及其所有“simple”的列表。在一个查询中不使用“嵌套”是否可能?或者我要问一些问题?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Nikita Leshchev    7 年前

    好啊。幸运的是,我只需要一个“窗口”产品和它所有的孩子通过它的ID,所以我发现 parent_id 可以帮助我完成此任务的查询。

    现在我有以下问题:

    GET test_products/_search
    {
      "query": {
        "parent_id": {
          "type": "simple",
          "id": "window-1"
        }
      }
    }
    

    很遗憾,我必须执行2个查询( has_child 然后 parent_id )而不是一个,但对我来说没关系。