【发布时间】:2020-09-29 02:52:25
【问题描述】:
我猜这很可能是一个聚合,因为我不知道某个特定字段的值 - 需要与其他结果进行比较的字段。 我正在尝试创建一个结果列表,其中: 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"
}
]
我的查询只知道“record_type”的值。 我需要的是一个“field_a”值列表,这些值与至少有 2 个结果相匹配,其中 1 在“field_b”中具有“蓝色”,1 在“field_b”中具有“绿色”。
因此,在此示例中,我想知道“1111111111”与该标准匹配 - 有 1 个“蓝色”和 1 个“绿色”,而“2222222222”不匹配,因为有 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???? ]
}
}
}
【问题讨论】:
-
如果能提供一些JSON格式的样本索引数据和预期的搜索结果就好了?
标签: elasticsearch elasticsearch-aggregation