在我的工作中,我遇到了以下在ElasticSearch中进行准连接的模式。我想知道这是不是一个好主意,从表现上看。
模式:
在一对多关系中连接一个索引中的文档。
有点像es父子关系,但是没有它就实现了。
子文档需要使用名为“我的父ID”的字段进行索引,值为父ID。
可以在查询父项时使用,预先知道父项的ID,以便在同一查询中获取子项。
具有准连接的查询(假设
123
是父ID):
GET /my-index/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"id": {
"value": 123
}
}
}
]
}
},
"aggs": {
"my-global-agg" : {
"global" : {},
"aggs" : {
"my-filtering-all-but-children": {
"filter": {
"term": {
"my_parent_id": 123
}
},
"aggs": {
"my-returning-children": {
"top_hits": {
"_source": {
"includes": [
"my_child_field1_to_return",
"my_child_field2_to_return"
]
},
"size": 1000
}
}
}
}
}
}
}
}
此查询返回:
父项(作为搜索查询结果),以及
其子级(作为聚合结果)。
就性能而言,是指:
绝对是个好主意,
绝对是个坏主意,
难说/这要看情况而定?