elasticsearch过滤器聚合-多个过滤器

时间:2018-07-25 15:39:21

标签: ruby-on-rails elasticsearch

使用ElasticSearch聚合来聚合文档中的数据。 所以聚合请求看起来像这样

 {  
   "query":{  
      "bool":{  
         "filter":[  
            {  
               "terms":{  
                  "status":[  
                     "active",
                     "deleted"
                  ]
               }
            },
            {  
               "terms":{  
                  "address_ids":[  
                     4078,
                     4080
                  ]
               }
            }
         ]
      }
   },
   "aggregations":{  
      "neighbourhoods":{  
         "terms":{  
            "field":"neighbourhoods",
            "size":100
         }
      },
      "budgets_stats":{  
         "filter":{  
            "range":{  
               "budget":{  
                  "lt":100000
               }
            }
         },
         "aggregations":{  
            "budget":{  
               "stats":{  
                  "field":"budget"
               }
            }
         }
      }
   }
}

我想过滤出匹配预算低于100000 **的文档,并为该特定汇总添加更多过滤器。 我无法将其添加到查询子句中,因为我有其他汇总项,不希望应用这些预算过滤器。

我不能使用过滤器聚合,因为它为每个过滤器创建了一个不同的存储桶-而不是应用了所有过滤器的1个存储桶。

如何创建包含多个过滤器的过滤器聚合?可以说其他条件应该是     “ budgets_stats”:{
             “过滤”:                 {
                   “范围”:{
                      “ vip_budget”:{
                         “ gt”:500                       }                    }                 }           }

我尝试使用Array,但无法正常工作。

filter: [{:range=>{:budget=>{:lt=>100000}}}, {:range=>{:vip_budget=>{:gt=>500}}}]

获取此错误(使用rails gems)

Elasticsearch :: Transport :: Transport :: Errors :: BadRequest异常:[400] {“错误”:{“ root_cause”:[{“ type”:“ parsing_exception”,“ reason”:“ 预期[过滤器]下的[START_OBJECT],但在[budgets_stats]“,” line“:1,” col“:233}] 中获得了[START_ARRAY]:” type“:” parsing_exception“,”原因“: “在[过滤器]下预期[START_OBJECT],但在[budgets_stats]中获得了[START_ARRAY]”,“行”:1,“ col”:233},“状态”:400}

这甚至可能吗?在弹性/ rails宝石文档中找不到有关弹性的参考

将感谢您的帮助,

谢谢

0 个答案:

没有答案