【发布时间】:2018-06-22 01:13:33
【问题描述】:
在我的 Elasticsearch 服务器上,我有三个索引:Person、Archive 和 Document。
每个文档都有一个
archive字段,它是它所在的Archive的_id。每个存档都有一个
owner,它是Person的_id,它是存档的所有者。
通过上面的索引,我可以将文档聚合到档案桶中,并将档案聚合到所有者桶中。
我怎样才能在人员聚合中也包含文档,这样如果我过滤特定的人,我会得到属于该人的档案及其文档,而不仅仅是档案?
这是我目前用来过滤和聚合档案到所有者桶中的内容:
{
"post_filter": {
"terms": {
"owner": [
"my_owner_id"
]
}
},
"aggs": {
"_filter_archive": {
"filter": {
"terms": {
"owner": [
"my_owner_id"
]
}
},
"aggs": {
"archive": {
"terms": {
"field": "archive"
}
}
}
}
}
}
【问题讨论】:
-
您已经根据关系数据库的思维和方法对 Elasticsearch 索引进行了建模,这在大多数情况下都是错误的。以目前的配置,你无法达到你想要的。
-
@AndreiStefan 你对功能性 Elasticsearch 模型有什么建议吗?
-
如果可能,将您的数据非规范化并将所有内容都放在一个索引中。你用的是什么ES版本?
-
我使用的是 ES 6.1
-
这很难回答,因为您似乎遗漏了一些细节。简单的答案是:使用
nested文档或父子关系。在您的情况下使用哪一个取决于很多因素。我的建议是尝试它们并进行测试。看看他们的表现如何。第三种选择是完全非规范化您的数据。这就是我询问更新的原因,更新的频率,Person 文档有多大,Archive 文档有多大等。如果您不准备回答这些问题,请测试nested和 parent-child 并选择一个或其他。祝你好运!
标签: elasticsearch search faceted-search elasticsearch-aggregation