ElasticSearch - 带有数组字段的子项聚合问题
ElasticSearch - issue with sub term aggregation with array fields
我有以下两个文件:
{
"title":"The Avengers",
"year":2012,
"casting":[
{
"name":"Robert Downey Jr.",
"category":"Actor",
},
{
"name":"Chris Evans",
"category":"Actor",
}
]
}
和:
{
"title":"The Judge",
"year":2014,
"casting":[
{
"name":"Robert Downey Jr.",
"category":"Producer",
},
{
"name":"Robert Duvall",
"category":"Actor",
}
]
}
我想根据两个字段执行聚合:casting.name 和 casting.category。
我尝试使用基于 casting.name 字段的 TermsAggregation 和子聚合,这是另一个基于 casting.category 字段的 TermsAggregation。
问题在于,对于 "Chris Evans" 条目,ElasticSearch 为所有类别(演员、制作人)设置了存储桶,而它应该只设置 1 个存储桶(演员)。
似乎所有 casting.category 次和所有 casting.name 次之间存在笛卡尔积。
对于数组字段(转换),它的行为就像这样,而我对简单字段(如标题或年份)没有问题。
我也尝试过使用嵌套聚合,但可能不正确,ElasticSearch 抛出错误提示 casting.category 不是嵌套字段。
有什么想法吗?
Elasticsearch 会将嵌套对象展平,因此在内部您将得到:
{
"title":"The Judge",
"year":2014,
"casting.name": ["Robert Downey Jr.","Robert Duvall"],
"casting.category": ["Producer", "Actor"]
}
如果您想保持关系,您需要使用 nested objects or a parent child relationship
要进行嵌套映射,您需要执行如下操作:
"mappings": {
"movies": {
"properties": {
"title" : { "type": "string" },
"year" : { "type": "integer" },
"casting": {
"type": "nested",
"properties": {
"name": { "type": "string" },
"category": { "type": "string" }
}
}
}
}
}
我有以下两个文件:
{
"title":"The Avengers",
"year":2012,
"casting":[
{
"name":"Robert Downey Jr.",
"category":"Actor",
},
{
"name":"Chris Evans",
"category":"Actor",
}
]
}
和:
{
"title":"The Judge",
"year":2014,
"casting":[
{
"name":"Robert Downey Jr.",
"category":"Producer",
},
{
"name":"Robert Duvall",
"category":"Actor",
}
]
}
我想根据两个字段执行聚合:casting.name 和 casting.category。
我尝试使用基于 casting.name 字段的 TermsAggregation 和子聚合,这是另一个基于 casting.category 字段的 TermsAggregation。
问题在于,对于 "Chris Evans" 条目,ElasticSearch 为所有类别(演员、制作人)设置了存储桶,而它应该只设置 1 个存储桶(演员)。
似乎所有 casting.category 次和所有 casting.name 次之间存在笛卡尔积。 对于数组字段(转换),它的行为就像这样,而我对简单字段(如标题或年份)没有问题。
我也尝试过使用嵌套聚合,但可能不正确,ElasticSearch 抛出错误提示 casting.category 不是嵌套字段。
有什么想法吗?
Elasticsearch 会将嵌套对象展平,因此在内部您将得到:
{
"title":"The Judge",
"year":2014,
"casting.name": ["Robert Downey Jr.","Robert Duvall"],
"casting.category": ["Producer", "Actor"]
}
如果您想保持关系,您需要使用 nested objects or a parent child relationship
要进行嵌套映射,您需要执行如下操作:
"mappings": {
"movies": {
"properties": {
"title" : { "type": "string" },
"year" : { "type": "integer" },
"casting": {
"type": "nested",
"properties": {
"name": { "type": "string" },
"category": { "type": "string" }
}
}
}
}
}