我猜这很可能是一个聚合,因为我不知道某个特定字段的值-需要与其他结果进行比较的字段。我试图创建一个结果列表,其中:result1中的fielda与result2中的fielda具有完全相同的值(我不在乎它是什么),其中1个result1在fieldb中具有“蓝色”,result2在fieldb中具有“绿色”(我在乎其中一个中存在“蓝色”,另一个中存在“绿色”)。只有通过聚合才能实现这一点,对吗?如果是这样,那么聚合脚本会是什么样子(我假设它也是一个脚本)。谢谢。
下面是一些示例数据:
[
{
"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\u a”值列表,其中至少有两个结果匹配,其中1在“field\u b”中为“blue”,1在“field\u b”中为“green”。
所以,在这个例子中,我想知道“1111111111”符合这个标准-有1个是“蓝色”和1个是“绿色”,而“22222”不匹配,因为有1个是“蓝色”和1个是“黄色”(即,不是“绿色”)。
我知道我可以做一个聚合,例如,为我的结果计算“字段a”中的值。
但是,在“字段\ a”中可以有1-n具有相同的值。我特别需要知道,对于给定的“field\u a”值,是否至少有1个在“field\u b”中带有“blue”,至少有1个在“field\u b”中带有“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???? ]
}
}
}
1条答案
按热度按时间ekqde3dh1#
我能得到我想要的通过做下面我有“[这应该是什么样子??]上面写着: