弹性搜索 - 按主题聚合

时间:2017-08-28 06:26:21

标签: elasticsearch

我有多个主题(布尔值),我想对它们进行聚合。 e.g。

topic A -> car AND bike
topic B -> movies AND entertainment
topic C -> (X OR Y) AND Z

我有很多像这样的布尔列表,以主题的形式分类。每个布尔值都比上例中所示的复杂。

不,我想基于使用聚合的主题显示计数,或者我想显示每个主题的数据的每日分手。 e.g。

topic A -> X records
topic B -> Y records
topic C -> Z records

现在我正在向elasticsearch发送单独的请求以计算每个主题,然后将输出组合成最终数组。由于涉及的http请求数量很多,这个过程需要花费很多时间。

建议我实现这一目标的有效方法。

  

注意:主题布尔值是可更改的,因此我们无法为记录分配标签。

2 个答案:

答案 0 :(得分:2)

您有一个搜索查询列表,您的目标是获取(仅)每个查询的匹配数。

对于只有一个查询,这将是count API

要同时查看一个查询,您应使用“match_all”进行搜索并使用filters Aggregation。您也可以使用大小= 0的Multi Search API

答案 1 :(得分:1)

您可以使用过滤器聚合并在其中应用任意bool过滤器:

  "aggs" : {
    "My Booleans" : {
      "filters" : {
        "filters" : {
          "Topic A" :   { "bool" : { "filter" : [{ "match": { "my_prop": "car" } }, { "match": { "my_prop": "bike" } }] } }
        }
      }
    }
  }

Bool过滤器可用于构建任意复杂的过滤器逻辑,因为它们提供AND,OR和NOT逻辑,并且可以嵌套。