如何在一个查询中让所有孩子都成为父母

时间:2018-08-01 08:36:07

标签: elasticsearch

我有以下映射:

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

我想获得带有所有“简单”商品的“窗口”产品,但是仅当一个或多个“简单”商品的属性“加权” = 1时

我写了以下查询:

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

但是我有带有与该术语匹配的“简单”的“窗口”。换句话说,我想通过“ simple”的选项过滤“ window”列表,并获取所有匹配的“ window”及其所有“ simple”。是否可以在一个查询中没有“嵌套”?还是我必须做一些查询?

1 个答案:

答案 0 :(得分:0)

好。幸运的是,我只需要获得一个带有其子项ID的“窗口”产品即可,因此我找到了parent_id查询,可以帮助我完成此任务。

现在我有以下查询:

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

不幸的是,我必须执行2个查询(has_child,然后执行parent_id),而不是一个,但这对我来说是可以的。