需要Elasticsearch查询,该查询将结果限制为在一个字段中具有相同值但在另一个字段中具有不同值的结果

需要Elasticsearch查询,该查询将结果限制为在一个字段中具有相同值但在另一个字段中具有不同值的结果,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我猜这很可能是一个聚合,因为我不知道某个特定字段的值-该字段需要与其他结果进行比较。 我正在尝试创建一个结果列表,其中: Result1中的fieldA与Result2中的fieldA具有完全相同的值(我不在乎它是什么) 及 其中1个结果1在字段B中为“蓝色”,结果2在字段B中为“绿色”(我确实关心其中一个中为“蓝色”,另一个中为“绿色”)。 只有通过聚合才能实现这一点,对吗? 如果是这样的话,聚合脚本会是什么样子(我假设它也是一个脚本)。 谢谢 下面是一些示例数据: [ {

我猜这很可能是一个聚合,因为我不知道某个特定字段的值-该字段需要与其他结果进行比较。 我正在尝试创建一个结果列表,其中: Result1中的fieldA与Result2中的fieldA具有完全相同的值(我不在乎它是什么) 及 其中1个结果1在字段B中为“蓝色”,结果2在字段B中为“绿色”(我确实关心其中一个中为“蓝色”,另一个中为“绿色”)。 只有通过聚合才能实现这一点,对吗? 如果是这样的话,聚合脚本会是什么样子(我假设它也是一个脚本)。 谢谢

下面是一些示例数据:

[
    {
        "record_id": "1",
        "record_type": "typeA",
        "field_a": "1111111111",
        "field_b": "blue"
    },
    {
        "record_id": "2",
        "record_type": "typeA",
        "field_a": "1111111111",
        "field_b": "green"
    },
    {
        "record_id": "3",
        "record_type": "typeA",
        "field_a": "2222222222",
        "field_b": "blue"
    },
    {
        "record_id": "4",
        "record_type": "typeA",
        "field_a": "2222222222",
        "field_b": "yellow"
    }
]
我的查询只知道“记录类型”的值。 我需要的是一个“field_a”值列表,这些值至少匹配两个结果,其中1个在“field_b”中为“blue”,1个在“field_b”中为“green”

因此,在本例中,我想知道“1111111”符合该标准-有1个为“蓝色”,1个为“绿色”,而“2222”不匹配,因为有1个为“蓝色”,1个为“黄色”(即,不是“绿色”)

我知道我可以做一个聚合,例如,为我的结果计算“field_a”中的值

但是,在“field_a”中可以有1-N个值相同。我特别需要知道,对于给定的“field_a”值,“field_b”中是否至少有1个值为“blue”,而“field_b”中是否至少有1个值为“green”

希望这能说明问题所在,但如果不是这样的话,这就是我“认为”我应该做的——聚合的聚合:

{
  "size": 0,
   "query": {
      "bool": {
        "must": [
        {
          "query_string": {
            "query": "*",
            "analyze_wildcard": true,
            "default_field": "*"
          }
        }
      ],
    "filter" : [
      {
        "terms" : {
          "record_type.keyword" : [
            "typeA"
          ],
          "boost" : 1.0
        }
      }
    ]
      }
   },
   "aggs": {
    "uniq_field_a_values": {
      "terms": {
        "field": "field_a.keyword",
        "size" : 10000
      }
    },
    "aggs": {
      [ what should this look like???? ]
    }
  }
}

我可以通过在上面写的“[这应该是什么样子?”)中执行以下操作来获得我想要的:

      "aggs": {
        "blue": {
          "filter": {
            "term": {
              "fieldB.keyword": "blue"
            }
          }
        },
        "green": {
          "filter": {
            "term": {
              "fieldB.keyword": "green"
            }
          }
        },
        "both": {
          "bucket_script": {
            "buckets_path": {
              "blue_count": "blue._count",
              "green_count": "green._count"
            },
            "script": "if ((params.blue_count > 0) && (params.green_count > 0)) { 1}"
          }
        }
    

如果您能提供一些JSON格式的示例索引数据和预期的搜索结果,那就太好了?