我必须通过标签对演员的电影进行汇总
例如,我想查看所有电影的小罗伯特·丹尼(Robert Deni)的标签。 例如:动作(10)惊人(4)浪漫(2)
如果我的用户通过标签(动作)过滤电影小罗伯特·丹尼,则需要更新过滤器。如果我查看浪漫史,那么:动作(1)大片(2)浪漫史(2)
这是我的映射:
"mapping": {
"actor": {
"properties": {
"id": {
"type": "keyword"
},
"name": {
"type": "text"
},
"movies": {
"type": "nested",
"properties": {
"id": {
"type": "keyword"
},
"studio": {
"type": "nested",
"properties": {
"id": {
"type": "keyword"
},
"label": {
"type": "text"
}
}
},
"tags": {
"type": "nested",
"properties": {
"id": {
"type": "keyword"
},
"label": {
"type": "text"
}
}
}
}
}
}
}
}
}
这是我的查询
{
"query": {
"bool": {
"filter": [
{
"match": {
"id": {
"query": 587
}
}
},
{
"bool": {
"must": [
{
"nested": {
"path": "movies",
"query": {
"nested": {
"path": "movies.tags",
"query": {
"term": {
"movies.tags.id": {
"value": 5189,
"boost": 1
}
}
}
}
}
}
}
]
}
}
]
}
},
"aggs": {
"tags": {
"nested": {
"path": "movies.tags"
},
"aggs": {
"tags": {
"terms": {
"field": "movies.tags.id",
"size": 100
}
}
}
}
}
}
我的聚合忽略给定标签。我可以按标签过滤还是不过滤,聚合结果不会改变。
有什么想法吗?
答案 0 :(得分:0)
是否有理由将标记查询嵌套两次?首先,您说movies
,然后说movie.tags
,这可能就是为什么您未获得理想结果的原因。试试这个
{
"query":{
"bool":{
"filter":[
{
"match":{
"id":{
"query":587
}
}
},
{
"bool":{
"must":[
{
"nested":{
"path":"movies",
"query":{
"term":{
"movies.tags.id":{
"value":5189,
"boost":1
}
}
}
}
}
]
}
}
]
}
},
"aggs":{
"tags":{
"nested":{
"path":"movies.tags"
},
"aggs":{
"tags":{
"terms":{
"field":"movies.tags.id",
"size":100
}
}
}
}
}
}
如果它不起作用,请共享一部分数据。
此外,请注意,当您应用查询限制时,您的聚合也会受到影响。相反,如果您想在整个索引范围内进行汇总而没有Robert Downey限制(通常是这种情况),则可以使用filtered aggregations。