过滤ElasticSearch中的嵌套聚合

时间:2015-11-07 04:01:39

标签: elasticsearch

从我的索引(Items)给出以下映射:

{
  "title": {
    "type":"string"
  },
  "tag_groups": {
    "type":"nested",
    "include_in_parent":true,
    "properties": {
      "name":{
        "type":"string",
        "index":"not_analyzed"
      },
      "terms": {
        "type":"string",
        "index":"not_analyzed"
      }
    }
  }
}

以下索引中每个文档的数据样本:

{
  "title":"Christian Louboutin Magenta Leather Lady Peep",
  "tag_groups": [
    {
      "name": "Color",
      "terms": ["pink"]
    },
    {
      "name":"Material/Fabric",
      "terms":["leather"]
    },
    {
      "name":"Season",
      "terms":["summer", "spring"]
    },
    {
      "name":"Occasion",
      "terms":["cocktail", "night out", "wedding: for the guests", "date night"]
    }
  ],
}

重要提示:这些tag_groups因产品和类别而异。因此,将它们从嵌套属性中拉出会很困难,因为它会创建不适用于索引中所有文档的索引属性。

这是我的查询,它在每个tag_groups.name和相应的值集合中生成正确的聚合结果。计数也是准确的。

{
  "size":"40",
  "query": {
    "filtered": {
      "query": {"match_all": {}}
    }
  },
  "aggs":{
    "tagGroupAgg": {
      "nested": {
        "path":"tag_groups"
      },
      "aggs":{
        "tagGroupNameAgg":{
          "terms":{
            "field":"tag_groups.name"
          },
          "aggs":{
            "tagGroupTermsAgg":{
              "terms": {
                "field":"tag_groups.terms"
              }
            }
          }
        }
      }
    }
  }
}

现在问题......

为了准确反映左侧的聚合计数,当我将TermsFilter应用于聚合时(tag_groups.Color = [' pink']),如何确保聚合过滤器不是& #39; t应用于tag_groups.Color结果?

目前,当我应用该过滤器时,我将丢失所有tag_groups.Colors(粉红色除外),阻止用户搜索其他颜色......

我在这个上撞墙了。任何帮助将不胜感激!

{
   "size":"40",
   "query":{
      "filtered":{
         "query":{
            "match_all":{

            }
         }
      }
   },
   "aggs":{
      "tagGroupAgg":{
         "nested":{
            "path":"tag_groups"
         },
         "aggs":{
            "tagGroupNameAgg":{
               "terms":{
                  "field":"tag_groups.name"
               },
               "aggs":{
                  "tagGroupTermsAgg":{
                     "terms":{
                        "field":"tag_groups.terms"
                     },
                     "aggs":{
                        "tagGroupTermsReverseAgg":{
                           "reverse_nested":{

                           },
                           "aggs":{
                              "testingReverseFilter":{
                                 "filter":{
                                    "bool":{
                                       "must":[
                                          {
                                             "terms":{
                                                "tag_groups.name":[
                                                   "Color"
                                                ]
                                             }
                                          },
                                          {
                                             "terms":{
                                                "brand_name.raw":[
                                                   "Chanel"
                                                ]
                                             }
                                          }
                                     ]
                                    }
                                 },
                                 "aggs":{
                                    "tagGroupTermsAgg2":{
                                       "terms":{
                                          "field":"tag_groups.terms"
                                       }
                                    }
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
}

0 个答案:

没有答案