如何在弹性搜索中实现以下逻辑

SELECT COUNT(*)
FROM type1
WHERE type1.field_name IN (
    SELECT field_name
    FROM type2
    WHERE 
        date_filed_name BETWEEN 'date1' AND 'date2');

SELECT COUNT(DISTINCT field3)
FROM type1
WHERE type1.field_name IN (
    SELECT field_name
    FROM type2
    WHERE 
        date_filed_name BETWEEN 'date1' AND 'date2');

我在ES中有两种类型,需要实现这种逻辑 . 我尝试通过使用bool过滤器使用两个ES查询从一种类型获取并在另一种类型中使用它 . 但是有可能使用“术语过滤器查找”之类的东西来组合这两个查询吗?

我有超过1500个唯一ID的子查询结果结果

我正在使用PHP,请在下面找到查询数组 .

$reportParams['body']['query'] = array(
    "filtered" => array(
        "filter" => array(
            "bool" => array(
                "must" => array(
                    "range" => array(
                        "time" => array(
                            "gt" => $start,
                            "lt" => $end
                        )
                    )
                ),
                "should" =>$termFilter
            )
        )
    )
    );

$reportParams['body']['aggs'] = array(
"distinct_user_count" => array(
    "cardinality" => array(
        "field" => $details->agg_field
    )
),
"daily_event_count" => array(
    "value_count" => array(
        "field" => $details->agg_field
    )
)
);

和termsFilter会是这样的

[0] => Array
        (
            [term] => Array
                (
                    [andi] => 84cc04c6059fb490
                )

        )

    [1] => Array
        (
            [term] => Array
                (
                    [andi] => af9cbd253100f2c7
                )

        )

    [2] => Array
        (
            [term] => Array
                (
                    [andi] => c1a3fcf0fefe7107
                )

        )

    [3] => Array
        (
            [term] => Array
                (
                    [andi] => b3a630084347fb2f
                )

        )

“agg_field”是“andi” . 我通过做另一个查询并通过PHP循环创建了termsFilter .