通过第三个从一个索引到另一个索引进行聚合和过滤
Aggregate and filter from one index to another through a third
在我的 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"
}
}
}
}
}
}
这很难回答,因为您似乎遗漏了一些细节。简单的答案是:使用嵌套文档或父子关系。在您的情况下使用哪一个取决于很多因素。我的建议是同时尝试它们并进行测试。看看他们的表现如何。第三种选择是完全非规范化您的数据。这就是我询问更新的原因,它们有多频繁,Person 文档有多大,Archive 文档有多大等。如果您不准备回答这些问题,那么测试 nested 和 parent-child 并选择一个或其他。祝你好运!
在我的 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"
}
}
}
}
}
}
这很难回答,因为您似乎遗漏了一些细节。简单的答案是:使用嵌套文档或父子关系。在您的情况下使用哪一个取决于很多因素。我的建议是同时尝试它们并进行测试。看看他们的表现如何。第三种选择是完全非规范化您的数据。这就是我询问更新的原因,它们有多频繁,Person 文档有多大,Archive 文档有多大等。如果您不准备回答这些问题,那么测试 nested 和 parent-child 并选择一个或其他。祝你好运!