【发布时间】:2020-02-07 13:30:29
【问题描述】:
我的文档如下所示:
{
"ownID": "Val_123",
"parentID": "Val_456",
"someField": "Val_78",
"otherField": "Val_90",
...
}
我正在尝试获取 ownID 值列表的所有(唯一,如在一个实例中)结果,同时按 parentID 值列表过滤,反之亦然反之亦然。
到目前为止我所做的是:
- 获取(单独!)key1 和 key2 中 ownID 和 parentID 的唯一值
{
"size": 0,
"aggs": {
"key1": {
"terms": {
"field": "ownID",
"include": {
"partition": 0,
"num_partitions": 10
},
"size": 100
}
},
"key2": {
"terms": {
"field": "parentID",
"include": {
"partition": 0,
"num_partitions": 10
},
"size": 100
}
}
}
}
- 使用过滤器获取(某些)匹配 ownID 或 parentID 的结果
{
"size": 0,
"query": {
"bool": {
"should": [
{
"terms": {
"ownID": ["Val_1","Val_2","Val_3"]
}
},
{
"terms": {
"parentID": ["Val_8","Val_9"]
}
}
]
}
},
"aggs": {
"my_filter": {
"top_hits": {
"size": 30000,
"_source": {
"include": ["ownID", "parentID","otherField"]
}
}
}
}
}
但是,我需要为第二个查询中的每个过滤器获取单独结果,然后获取:
- (1) 与 ownID 的某个值匹配的文档的 parentID
- (2) 与 parentID 的某个值匹配的文档的 ownID。
到目前为止,我设法使用两个类似的查询来做到这一点(请参阅下面的 (1)),但理想情况下,我希望将它们组合起来并只查询一次。
{
"size": 0,
"query": {
"bool": {
"should": [
{
"terms": {
"ownID": [ "Val1", Val_2, Val_3 ]
}
}
]
}
},
"aggs": {
"my_filter": {
"top_hits": {
"size": 30000,
"_source": {
"include": "parentID"
}
}
}
}
}
我使用的是 Elasticsearch 5.2 版
【问题讨论】:
标签: elasticsearch elasticsearch-aggregation elasticsearch-query