记录以这种格式存在:{user_id, state}
。
我需要编写一个elasticsearch查询来查找记录列表中同时存在这两种状态的所有user_id。
例如,如果存储的样本记录是:
{1,a}
{1,b}
{2,a}
{2,b}
{1,a}
{3,b}
{3,b}
运行此示例的查询的输出将是
{"1", "2"}
到目前为止我已尝试过这个:
{
"size": 0,
"query": {
"bool": {
"filter": {
"terms": {
"state": [
"a",
"b"
]
}
}
}
},
"aggs": {
"user_id_intersection": {
"terms": {
"field": "user_id",
"min_doc_count": 2,
"size": 100
}
}
}
}
但这将返回
{"1", "2", "3"}
答案 0 :(得分:0)
假设你知道状态集的基数,这里2,你可以使用 Bucket Selector Aggregation
GET test/_search
{
"size": 0,
"aggs": {
"user_ids": {
"terms": {
"field": "user_id"
},
"aggs": {
"states_card": {
"cardinality": {
"field": "state"
}
},
"state_filter": {
"bucket_selector": {
"buckets_path": {
"states_card": "states_card"
},
"script": "params.states_card == 2"
}
}
}
}
}
}